blob: 65ebb5c2c3f61127fe930745eecd0c8a91839af4 [file] [log] [blame]
Dan Gohmana826a882010-11-11 21:23:25 +00001; 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
Stephen Linc1c7a132013-07-14 01:42:54 +00006; CHECK-LABEL: @yes(
Dan Gohmana826a882010-11-11 21:23:25 +00007; CHECK-NOT: br
8
9define void @yes(i1 %c) nounwind {
10entry:
11 %a = alloca [4 x i64*], align 8
David Blaikie79e6c742015-02-27 19:29:02 +000012 %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 0, i64 3
Dan Gohmana826a882010-11-11 21:23:25 +000013 call void @frob(i64** %__a.addr)
14 br i1 %c, label %if.then, label %if.end
15
16if.then: ; preds = %entry
17 br label %return
18
19if.end: ; preds = %entry
David Blaikiea79ac142015-02-27 21:17:42 +000020 %tmp5 = load i64*, i64** %__a.addr, align 8
Dan Gohmana826a882010-11-11 21:23:25 +000021 br label %return
22
23return: ; preds = %if.end, %if.then
24 %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
25 ret void
26}
27
Stephen Linc1c7a132013-07-14 01:42:54 +000028; CHECK-LABEL: @no0(
Dan Gohmana826a882010-11-11 21:23:25 +000029; CHECK: br i1 %c
30
31define void @no0(i1 %c) nounwind {
32entry:
33 %a = alloca [4 x i64*], align 8
David Blaikie79e6c742015-02-27 19:29:02 +000034 %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 0, i64 4
Dan Gohmana826a882010-11-11 21:23:25 +000035 call void @frob(i64** %__a.addr)
36 br i1 %c, label %if.then, label %if.end
37
38if.then: ; preds = %entry
39 br label %return
40
41if.end: ; preds = %entry
David Blaikiea79ac142015-02-27 21:17:42 +000042 %tmp5 = load i64*, i64** %__a.addr, align 8
Dan Gohmana826a882010-11-11 21:23:25 +000043 br label %return
44
45return: ; preds = %if.end, %if.then
46 %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
47 ret void
48}
49
Stephen Linc1c7a132013-07-14 01:42:54 +000050; CHECK-LABEL: @no1(
Dan Gohmana826a882010-11-11 21:23:25 +000051; CHECK: br i1 %c
52
53define void @no1(i1 %c, i64 %n) nounwind {
54entry:
55 %a = alloca [4 x i64*], align 8
David Blaikie79e6c742015-02-27 19:29:02 +000056 %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 0, i64 %n
Dan Gohmana826a882010-11-11 21:23:25 +000057 call void @frob(i64** %__a.addr)
58 br i1 %c, label %if.then, label %if.end
59
60if.then: ; preds = %entry
61 br label %return
62
63if.end: ; preds = %entry
David Blaikiea79ac142015-02-27 21:17:42 +000064 %tmp5 = load i64*, i64** %__a.addr, align 8
Dan Gohmana826a882010-11-11 21:23:25 +000065 br label %return
66
67return: ; preds = %if.end, %if.then
68 %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
69 ret void
70}
71
Stephen Linc1c7a132013-07-14 01:42:54 +000072; CHECK-LABEL: @no2(
Dan Gohmana826a882010-11-11 21:23:25 +000073; CHECK: br i1 %c
74
75define void @no2(i1 %c, i64 %n) nounwind {
76entry:
77 %a = alloca [4 x i64*], align 8
David Blaikie79e6c742015-02-27 19:29:02 +000078 %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 1, i64 0
Dan Gohmana826a882010-11-11 21:23:25 +000079 call void @frob(i64** %__a.addr)
80 br i1 %c, label %if.then, label %if.end
81
82if.then: ; preds = %entry
83 br label %return
84
85if.end: ; preds = %entry
David Blaikiea79ac142015-02-27 21:17:42 +000086 %tmp5 = load i64*, i64** %__a.addr, align 8
Dan Gohmana826a882010-11-11 21:23:25 +000087 br label %return
88
89return: ; preds = %if.end, %if.then
90 %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
91 ret void
92}
93
94declare void @frob(i64** nocapture %p)