Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality...
[oota-llvm.git] / test / Transforms / SimplifyCFG / speculate-with-offset.ll
1 ; RUN: opt -simplifycfg -S < %s | FileCheck %s
2
3 ; This load is safe to speculate, as it's from a safe offset
4 ; within an alloca.
5
6 ; CHECK-LABEL: @yes(
7 ; CHECK-NOT: br
8
9 define void @yes(i1 %c) nounwind {
10 entry:
11   %a = alloca [4 x i64*], align 8
12   %__a.addr = getelementptr [4 x i64*]* %a, i64 0, i64 3
13   call void @frob(i64** %__a.addr)
14   br i1 %c, label %if.then, label %if.end
15
16 if.then:                                          ; preds = %entry
17   br label %return
18
19 if.end:                                           ; preds = %entry
20   %tmp5 = load i64** %__a.addr, align 8
21   br label %return
22
23 return:                                           ; preds = %if.end, %if.then
24   %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
25   ret void
26 }
27
28 ; CHECK-LABEL: @no0(
29 ; CHECK: br i1 %c
30
31 define void @no0(i1 %c) nounwind {
32 entry:
33   %a = alloca [4 x i64*], align 8
34   %__a.addr = getelementptr [4 x i64*]* %a, i64 0, i64 4
35   call void @frob(i64** %__a.addr)
36   br i1 %c, label %if.then, label %if.end
37
38 if.then:                                          ; preds = %entry
39   br label %return
40
41 if.end:                                           ; preds = %entry
42   %tmp5 = load i64** %__a.addr, align 8
43   br label %return
44
45 return:                                           ; preds = %if.end, %if.then
46   %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
47   ret void
48 }
49
50 ; CHECK-LABEL: @no1(
51 ; CHECK: br i1 %c
52
53 define void @no1(i1 %c, i64 %n) nounwind {
54 entry:
55   %a = alloca [4 x i64*], align 8
56   %__a.addr = getelementptr [4 x i64*]* %a, i64 0, i64 %n
57   call void @frob(i64** %__a.addr)
58   br i1 %c, label %if.then, label %if.end
59
60 if.then:                                          ; preds = %entry
61   br label %return
62
63 if.end:                                           ; preds = %entry
64   %tmp5 = load i64** %__a.addr, align 8
65   br label %return
66
67 return:                                           ; preds = %if.end, %if.then
68   %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
69   ret void
70 }
71
72 ; CHECK-LABEL: @no2(
73 ; CHECK: br i1 %c
74
75 define void @no2(i1 %c, i64 %n) nounwind {
76 entry:
77   %a = alloca [4 x i64*], align 8
78   %__a.addr = getelementptr [4 x i64*]* %a, i64 1, i64 0
79   call void @frob(i64** %__a.addr)
80   br i1 %c, label %if.then, label %if.end
81
82 if.then:                                          ; preds = %entry
83   br label %return
84
85 if.end:                                           ; preds = %entry
86   %tmp5 = load i64** %__a.addr, align 8
87   br label %return
88
89 return:                                           ; preds = %if.end, %if.then
90   %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
91   ret void
92 }
93
94 declare void @frob(i64** nocapture %p)