[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Transforms / GVNHoist / hoist-very-busy.ll
blobf421eff9921af090b37567f94766010e695f0d4d
1 ; RUN: opt -S -gvn-hoist < %s | FileCheck %s
3 %struct.__jmp_buf_tag = type { [8 x i64], i32 }
5 ; Check that hoisting only happens when the expression is very busy.
6 ; CHECK: store
7 ; CHECK: store
9 @test_exit_buf = global %struct.__jmp_buf_tag zeroinitializer
10 @G = global i32 0
12 define void @test_command(i32 %c1) {
13 entry:
14   switch i32 %c1, label %exit [
15     i32 0, label %sw0
16     i32 1, label %sw1
17   ]
19 sw0:
20   store i32 1, i32* @G
21   br label %exit
23 sw1:
24   store i32 1, i32* @G
25   br label %exit
27 exit:
28   call void @longjmp(%struct.__jmp_buf_tag* @test_exit_buf, i32 1) #0
29   unreachable
32 declare void @longjmp(%struct.__jmp_buf_tag*, i32) #0
34 attributes #0 = { noreturn nounwind }
36 ; Check that the store is hoisted.
37 ; CHECK-LABEL: define void @fun(
38 ; CHECK: store
39 ; CHECK-NOT: store
41 define void @fun() {
42 entry:
43   br label %if.then
45 if.then:                                          ; preds = %entry
46   br i1 undef, label %sw0, label %sw1
48 sw0:
49   store i32 1, i32* @G
50   unreachable
52 sw1:
53   store i32 1, i32* @G
54   ret void