[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Transforms / GVNHoist / pr35222-hoist-load.ll
blobb9b1a870a59bde70bc33ec796af2897122678bf6
1 ; RUN: opt -S -gvn-hoist < %s | FileCheck %s
2 ; CHECK-LABEL: build_tree
3 ; CHECK: load
4 ; CHECK: load
5 ; Check that the load is not hoisted because the call can potentially
6 ; modify the global
8 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
10 @heap = external global i32, align 4
12 define i32 @build_tree() unnamed_addr {
13 entry:
14   br label %do.body
16 do.body:                                          ; preds = %do.body, %entry
17   %tmp9 = load i32, i32* @heap, align 4
18   %cmp = call i1 @pqdownheap(i32 %tmp9)
19   br i1 %cmp, label %do.body, label %do.end
21 do.end:                                           ; preds = %do.body
22   %tmp20 = load i32, i32* @heap, align 4
23   ret i32 %tmp20
26 declare i1 @pqdownheap(i32)
28 @i = external hidden unnamed_addr global i32, align 4
29 @j = external hidden unnamed_addr global [573 x i32], align 4
30 @v = external global i1
32 ; CHECK-LABEL: test
33 ; CHECK-LABEL: do.end
34 ; CHECK: load
35 ; Check that the load is not hoisted because the call can potentially
36 ; modify the global
38 define i32 @test() {
39 entry:
40   br label %for.cond
42 for.cond:
43   %a3 = load volatile i1, i1* @v
44   br i1 %a3, label %for.body, label %while.end
46 for.body:
47   br label %if.then
49 if.then:
50   %tmp4 = load i32, i32* @i, align 4
51   br label %for.cond
53 while.end:
54   br label %do.body
56 do.body:
57   %tmp9 = load i32, i32* getelementptr inbounds ([573 x i32], [573 x i32]* @j,
58 i32 0, i32 1), align 4
59   %tmp10 = load i32, i32* @i, align 4
60   call void @fn()
61   %a1 = load volatile i1, i1* @v
62   br i1 %a1, label %do.body, label %do.end
64 do.end:
65   %tmp20 = load i32, i32* getelementptr inbounds ([573 x i32], [573 x i32]* @j,
66 i32 0, i32 1), align 4
67   ret i32 %tmp20
70 declare void @fn()