annotate llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode-base.ll @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; RUN: opt -S -codegenprepare -disable-complex-addr-modes=false -addr-sink-new-phis=true -addr-sink-new-select=true %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-YES
anatofuz
parents:
diff changeset
2 ; RUN: opt -S -codegenprepare -disable-complex-addr-modes=false -addr-sink-new-phis=false -addr-sink-new-select=true %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NO
anatofuz
parents:
diff changeset
3 target datalayout =
anatofuz
parents:
diff changeset
4 "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
anatofuz
parents:
diff changeset
5 target triple = "x86_64-unknown-linux-gnu"
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 ; Can we sink for different base if there is no phi for base?
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
8 define i32 @test1(i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
9 ; CHECK-LABEL: @test1
anatofuz
parents:
diff changeset
10 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
11 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
12 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
15 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
16 br label %fallthrough
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 fallthrough:
anatofuz
parents:
diff changeset
19 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
20 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
21 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
22 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
23 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
24 %v = load i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
25 ret i32 %v
anatofuz
parents:
diff changeset
26 }
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 ; Can we sink for different base if there is phi for base?
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
29 define i32 @test2(i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
30 ; CHECK-LABEL: @test2
anatofuz
parents:
diff changeset
31 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
32 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
33 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
36 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
37 br label %fallthrough
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 fallthrough:
anatofuz
parents:
diff changeset
40 ; CHECK: getelementptr inbounds i8, {{.+}} 40
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
41 %b = phi ptr [%b1, %entry], [%b2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
42 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
43 %v = load i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
44 ret i32 %v
anatofuz
parents:
diff changeset
45 }
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 ; Can we sink for different base if there is phi for base but not valid one?
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
48 define i32 @test3(i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
49 ; CHECK-LABEL: @test3
anatofuz
parents:
diff changeset
50 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
51 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
52 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
55 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
56 br label %fallthrough
anatofuz
parents:
diff changeset
57
anatofuz
parents:
diff changeset
58 fallthrough:
anatofuz
parents:
diff changeset
59 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
60 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
61 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
62 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
63 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
64 %b = phi ptr [%b2, %entry], [%b1, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
65 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
66 %v = load i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
67 ret i32 %v
anatofuz
parents:
diff changeset
68 }
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 ; Can we sink for different base if both addresses are in the same block?
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
71 define i32 @test4(i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
72 ; CHECK-LABEL: @test4
anatofuz
parents:
diff changeset
73 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
75 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
76 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
77
anatofuz
parents:
diff changeset
78 if.then:
anatofuz
parents:
diff changeset
79 br label %fallthrough
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 fallthrough:
anatofuz
parents:
diff changeset
82 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
83 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
84 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
85 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
86 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
87 %v = load i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
88 ret i32 %v
anatofuz
parents:
diff changeset
89 }
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 ; Can we sink for different base if there is phi for base?
anatofuz
parents:
diff changeset
92 ; Both addresses are in the same block.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
93 define i32 @test5(i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
94 ; CHECK-LABEL: @test5
anatofuz
parents:
diff changeset
95 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
96 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
97 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
98 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
99
anatofuz
parents:
diff changeset
100 if.then:
anatofuz
parents:
diff changeset
101 br label %fallthrough
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103 fallthrough:
anatofuz
parents:
diff changeset
104 ; CHECK: getelementptr inbounds i8, {{.+}} 40
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
105 %b = phi ptr [%b1, %entry], [%b2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
106 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
107 %v = load i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
108 ret i32 %v
anatofuz
parents:
diff changeset
109 }
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 ; Can we sink for different base if there is phi for base but not valid one?
anatofuz
parents:
diff changeset
112 ; Both addresses are in the same block.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
113 define i32 @test6(i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
114 ; CHECK-LABEL: @test6
anatofuz
parents:
diff changeset
115 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
116 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
117 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
118 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
119
anatofuz
parents:
diff changeset
120 if.then:
anatofuz
parents:
diff changeset
121 br label %fallthrough
anatofuz
parents:
diff changeset
122
anatofuz
parents:
diff changeset
123 fallthrough:
anatofuz
parents:
diff changeset
124 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
125 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
126 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
127 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
128 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
129 %b = phi ptr [%b2, %entry], [%b1, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
130 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
131 %v = load i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
132 ret i32 %v
anatofuz
parents:
diff changeset
133 }
anatofuz
parents:
diff changeset
134
anatofuz
parents:
diff changeset
135 ; case with a loop. No phi node.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
136 define i32 @test7(i32 %N, i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
137 ; CHECK-LABEL: @test7
anatofuz
parents:
diff changeset
138 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
139 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
140 br label %loop
anatofuz
parents:
diff changeset
141
anatofuz
parents:
diff changeset
142 loop:
anatofuz
parents:
diff changeset
143 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
144 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
145 %iv = phi i32 [0, %entry], [%iv.inc, %fallthrough]
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
146 %c3 = phi ptr [%a1, %entry], [%c, %fallthrough]
150
anatofuz
parents:
diff changeset
147 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
148
anatofuz
parents:
diff changeset
149 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
150 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
151 br label %fallthrough
anatofuz
parents:
diff changeset
152
anatofuz
parents:
diff changeset
153 fallthrough:
anatofuz
parents:
diff changeset
154 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
155 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
156 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
157 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
158 %c = phi ptr [%c3, %loop], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
159 %v = load volatile i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
160 %iv.inc = add i32 %iv, 1
anatofuz
parents:
diff changeset
161 %cmp = icmp slt i32 %iv.inc, %N
anatofuz
parents:
diff changeset
162 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
163
anatofuz
parents:
diff changeset
164 exit:
anatofuz
parents:
diff changeset
165 ret i32 %v
anatofuz
parents:
diff changeset
166 }
anatofuz
parents:
diff changeset
167
anatofuz
parents:
diff changeset
168 ; case with a loop. There is phi node.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
169 define i32 @test8(i32 %N, i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
170 ; CHECK-LABEL: @test8
anatofuz
parents:
diff changeset
171 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
172 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
173 br label %loop
anatofuz
parents:
diff changeset
174
anatofuz
parents:
diff changeset
175 loop:
anatofuz
parents:
diff changeset
176 %iv = phi i32 [0, %entry], [%iv.inc, %fallthrough]
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
177 %c3 = phi ptr [%a1, %entry], [%c, %fallthrough]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
178 %b3 = phi ptr [%b1, %entry], [%b, %fallthrough]
150
anatofuz
parents:
diff changeset
179 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
180
anatofuz
parents:
diff changeset
181 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
182 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
183 br label %fallthrough
anatofuz
parents:
diff changeset
184
anatofuz
parents:
diff changeset
185 fallthrough:
anatofuz
parents:
diff changeset
186 ; CHECK: getelementptr inbounds i8, {{.+}} 40
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
187 %c = phi ptr [%c3, %loop], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
188 %b = phi ptr [%b3, %loop], [%b2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
189 %v = load volatile i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
190 %iv.inc = add i32 %iv, 1
anatofuz
parents:
diff changeset
191 %cmp = icmp slt i32 %iv.inc, %N
anatofuz
parents:
diff changeset
192 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
193
anatofuz
parents:
diff changeset
194 exit:
anatofuz
parents:
diff changeset
195 ret i32 %v
anatofuz
parents:
diff changeset
196 }
anatofuz
parents:
diff changeset
197
anatofuz
parents:
diff changeset
198 ; case with a loop. There is phi node but it does not fit.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
199 define i32 @test9(i32 %N, i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
200 ; CHECK-LABEL: @test9
anatofuz
parents:
diff changeset
201 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
202 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
203 br label %loop
anatofuz
parents:
diff changeset
204
anatofuz
parents:
diff changeset
205 loop:
anatofuz
parents:
diff changeset
206 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
207 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
208 %iv = phi i32 [0, %entry], [%iv.inc, %fallthrough]
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
209 %c3 = phi ptr [%a1, %entry], [%c, %fallthrough]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
210 %b3 = phi ptr [%b1, %entry], [%b2, %fallthrough]
150
anatofuz
parents:
diff changeset
211 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
212
anatofuz
parents:
diff changeset
213 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
214 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
215 br label %fallthrough
anatofuz
parents:
diff changeset
216
anatofuz
parents:
diff changeset
217 fallthrough:
anatofuz
parents:
diff changeset
218 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
219 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
220 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
221 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
222 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
223 %c = phi ptr [%c3, %loop], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
224 %b = phi ptr [%b3, %loop], [%b2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
225 %v = load volatile i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
226 %iv.inc = add i32 %iv, 1
anatofuz
parents:
diff changeset
227 %cmp = icmp slt i32 %iv.inc, %N
anatofuz
parents:
diff changeset
228 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
229
anatofuz
parents:
diff changeset
230 exit:
anatofuz
parents:
diff changeset
231 ret i32 %v
anatofuz
parents:
diff changeset
232 }
anatofuz
parents:
diff changeset
233
anatofuz
parents:
diff changeset
234 ; Case through a loop. No phi node.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
235 define i32 @test10(i32 %N, i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
236 ; CHECK-LABEL: @test10
anatofuz
parents:
diff changeset
237 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
238 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
239 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
240
anatofuz
parents:
diff changeset
241 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
242 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
243 br label %fallthrough
anatofuz
parents:
diff changeset
244
anatofuz
parents:
diff changeset
245 fallthrough:
anatofuz
parents:
diff changeset
246 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
247 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
248 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
249 ; CHECK-NO-NEXT: br
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
250 %c = phi ptr [%a1, %entry], [%a2, %if.then]
150
anatofuz
parents:
diff changeset
251 br label %loop
anatofuz
parents:
diff changeset
252
anatofuz
parents:
diff changeset
253 loop:
anatofuz
parents:
diff changeset
254 %iv = phi i32 [0, %fallthrough], [%iv.inc, %loop]
anatofuz
parents:
diff changeset
255 %iv.inc = add i32 %iv, 1
anatofuz
parents:
diff changeset
256 %cmp = icmp slt i32 %iv.inc, %N
anatofuz
parents:
diff changeset
257 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
258
anatofuz
parents:
diff changeset
259 exit:
anatofuz
parents:
diff changeset
260 ; CHECK-YES: sunkaddr
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
261 %v = load volatile i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
262 ret i32 %v
anatofuz
parents:
diff changeset
263 }
anatofuz
parents:
diff changeset
264
anatofuz
parents:
diff changeset
265 ; Case through a loop. There is a phi.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
266 define i32 @test11(i32 %N, i1 %cond, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
267 ; CHECK-LABEL: @test11
anatofuz
parents:
diff changeset
268 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
269 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
270 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
271
anatofuz
parents:
diff changeset
272 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
273 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
274 br label %fallthrough
anatofuz
parents:
diff changeset
275
anatofuz
parents:
diff changeset
276 fallthrough:
anatofuz
parents:
diff changeset
277 ; CHECK: phi
anatofuz
parents:
diff changeset
278 ; CHECK: phi
anatofuz
parents:
diff changeset
279 ; CHECK: br
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
280 %c = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
281 %b = phi ptr [%b1, %entry], [%b2, %if.then]
150
anatofuz
parents:
diff changeset
282 br label %loop
anatofuz
parents:
diff changeset
283
anatofuz
parents:
diff changeset
284 loop:
anatofuz
parents:
diff changeset
285 %iv = phi i32 [0, %fallthrough], [%iv.inc, %loop]
anatofuz
parents:
diff changeset
286 %iv.inc = add i32 %iv, 1
anatofuz
parents:
diff changeset
287 %cmp = icmp slt i32 %iv.inc, %N
anatofuz
parents:
diff changeset
288 br i1 %cmp, label %loop, label %exit
anatofuz
parents:
diff changeset
289
anatofuz
parents:
diff changeset
290 exit:
anatofuz
parents:
diff changeset
291 ; CHECK: sunkaddr
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
292 %v = load volatile i32, ptr %c, align 4
150
anatofuz
parents:
diff changeset
293 ret i32 %v
anatofuz
parents:
diff changeset
294 }
anatofuz
parents:
diff changeset
295
anatofuz
parents:
diff changeset
296 ; Complex case with address value from previous iteration.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
297 define i32 @test12(i32 %N, i1 %cond, ptr %b1, ptr %b2, ptr %b3) {
150
anatofuz
parents:
diff changeset
298 ; CHECK-LABEL: @test12
anatofuz
parents:
diff changeset
299 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
300 %a1 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
301 br label %loop
anatofuz
parents:
diff changeset
302
anatofuz
parents:
diff changeset
303 loop:
anatofuz
parents:
diff changeset
304 ; CHECK-LABEL: loop:
anatofuz
parents:
diff changeset
305 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
306 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
307 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
308 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
309 ; CHECK-NO-NEXT: br
anatofuz
parents:
diff changeset
310 %iv = phi i32 [0, %entry], [%iv.inc, %backedge]
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
311 %c3 = phi ptr [%a1, %entry], [%c, %backedge]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
312 %b4 = phi ptr [%b1, %entry], [%b5, %backedge]
150
anatofuz
parents:
diff changeset
313 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
314
anatofuz
parents:
diff changeset
315 if.then:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
316 %a2 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
317 br label %fallthrough
anatofuz
parents:
diff changeset
318
anatofuz
parents:
diff changeset
319 fallthrough:
anatofuz
parents:
diff changeset
320 ; CHECK-LABEL: fallthrough:
anatofuz
parents:
diff changeset
321 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
322 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
323 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
324 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
325 %c = phi ptr [%c3, %loop], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
326 %b6 = phi ptr [%b4, %loop], [%b2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
327 %v = load volatile i32, ptr %c, align 4
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
328 %a4 = getelementptr inbounds i64, ptr %b4, i64 5
150
anatofuz
parents:
diff changeset
329 %cmp = icmp slt i32 %iv, 20
anatofuz
parents:
diff changeset
330 br i1 %cmp, label %backedge, label %if.then.2
anatofuz
parents:
diff changeset
331
anatofuz
parents:
diff changeset
332 if.then.2:
anatofuz
parents:
diff changeset
333 br label %backedge
anatofuz
parents:
diff changeset
334
anatofuz
parents:
diff changeset
335 backedge:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
336 %b5 = phi ptr [%b4, %fallthrough], [%b6, %if.then.2]
150
anatofuz
parents:
diff changeset
337 %iv.inc = add i32 %iv, 1
anatofuz
parents:
diff changeset
338 %cmp2 = icmp slt i32 %iv.inc, %N
anatofuz
parents:
diff changeset
339 br i1 %cmp2, label %loop, label %exit
anatofuz
parents:
diff changeset
340
anatofuz
parents:
diff changeset
341 exit:
anatofuz
parents:
diff changeset
342 ret i32 %v
anatofuz
parents:
diff changeset
343 }
anatofuz
parents:
diff changeset
344
anatofuz
parents:
diff changeset
345 %struct.S = type {i32, i32}
anatofuz
parents:
diff changeset
346 ; Case with index
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
347 define i32 @test13(i1 %cond, ptr %b1, ptr %b2, i64 %Index) {
150
anatofuz
parents:
diff changeset
348 ; CHECK-LABEL: @test13
anatofuz
parents:
diff changeset
349 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
350 %a1 = getelementptr inbounds %struct.S, ptr %b1, i64 %Index, i32 1
150
anatofuz
parents:
diff changeset
351 br i1 %cond, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
352
anatofuz
parents:
diff changeset
353 if.then:
anatofuz
parents:
diff changeset
354 %i2 = mul i64 %Index, 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
355 %a2 = getelementptr inbounds %struct.S, ptr %b2, i64 %Index, i32 1
150
anatofuz
parents:
diff changeset
356 br label %fallthrough
anatofuz
parents:
diff changeset
357
anatofuz
parents:
diff changeset
358 fallthrough:
anatofuz
parents:
diff changeset
359 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
360 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
361 ; CHECK-NO-NEXT: phi
anatofuz
parents:
diff changeset
362 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
363 %a = phi ptr [%a1, %entry], [%a2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
364 %v = load i32, ptr %a, align 4
150
anatofuz
parents:
diff changeset
365 ret i32 %v
anatofuz
parents:
diff changeset
366 }
anatofuz
parents:
diff changeset
367
anatofuz
parents:
diff changeset
368 ; Select of Select case.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
369 define i64 @test14(i1 %c1, i1 %c2, ptr %b1, ptr %b2, ptr %b3) {
150
anatofuz
parents:
diff changeset
370 ; CHECK-LABEL: @test14
anatofuz
parents:
diff changeset
371 entry:
anatofuz
parents:
diff changeset
372 ; CHECK-LABEL: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
373 %g1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
374 %g2 = getelementptr inbounds i64, ptr %b2, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
375 %g3 = getelementptr inbounds i64, ptr %b3, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
376 %s1 = select i1 %c1, ptr %g1, ptr %g2
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
377 %s2 = select i1 %c2, ptr %s1, ptr %g3
150
anatofuz
parents:
diff changeset
378 ; CHECK: sunkaddr
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
379 %v = load i64 , ptr %s2, align 8
150
anatofuz
parents:
diff changeset
380 ret i64 %v
anatofuz
parents:
diff changeset
381 }
anatofuz
parents:
diff changeset
382
anatofuz
parents:
diff changeset
383 ; Select of Phi case.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
384 define i64 @test15(i1 %c1, i1 %c2, ptr %b1, ptr %b2, ptr %b3) {
150
anatofuz
parents:
diff changeset
385 ; CHECK-LABEL: @test15
anatofuz
parents:
diff changeset
386 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
387 %g1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
388 %g2 = getelementptr inbounds i64, ptr %b2, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
389 %g3 = getelementptr inbounds i64, ptr %b3, i64 5
150
anatofuz
parents:
diff changeset
390 br i1 %c1, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
391
anatofuz
parents:
diff changeset
392 if.then:
anatofuz
parents:
diff changeset
393 br label %fallthrough
anatofuz
parents:
diff changeset
394
anatofuz
parents:
diff changeset
395 fallthrough:
anatofuz
parents:
diff changeset
396 ; CHECK-LABEL: fallthrough:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
397 %p1 = phi ptr [%g1, %entry], [%g2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
398 %s1 = select i1 %c2, ptr %p1, ptr %g3
150
anatofuz
parents:
diff changeset
399 ; CHECK-YES: sunkaddr
anatofuz
parents:
diff changeset
400 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
401 ; CHECK-NO-NEXT: select
anatofuz
parents:
diff changeset
402 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
403 %v = load i64 , ptr %s1, align 8
150
anatofuz
parents:
diff changeset
404 ret i64 %v
anatofuz
parents:
diff changeset
405 }
anatofuz
parents:
diff changeset
406
anatofuz
parents:
diff changeset
407 ; Select of Phi case. Phi exists
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
408 define i64 @test16(i1 %c1, i1 %c2, ptr %b1, ptr %b2, ptr %b3) {
150
anatofuz
parents:
diff changeset
409 ; CHECK-LABEL: @test16
anatofuz
parents:
diff changeset
410 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
411 %g1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
412 %g2 = getelementptr inbounds i64, ptr %b2, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
413 %g3 = getelementptr inbounds i64, ptr %b3, i64 5
150
anatofuz
parents:
diff changeset
414 br i1 %c1, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
415
anatofuz
parents:
diff changeset
416 if.then:
anatofuz
parents:
diff changeset
417 br label %fallthrough
anatofuz
parents:
diff changeset
418
anatofuz
parents:
diff changeset
419 fallthrough:
anatofuz
parents:
diff changeset
420 ; CHECK-LABEL: fallthrough:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
421 %p = phi ptr [%b1, %entry], [%b2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
422 %p1 = phi ptr [%g1, %entry], [%g2, %if.then]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
423 %s1 = select i1 %c2, ptr %p1, ptr %g3
150
anatofuz
parents:
diff changeset
424 ; CHECK: sunkaddr
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
425 %v = load i64 , ptr %s1, align 8
150
anatofuz
parents:
diff changeset
426 ret i64 %v
anatofuz
parents:
diff changeset
427 }
anatofuz
parents:
diff changeset
428
anatofuz
parents:
diff changeset
429 ; Phi of Select case.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
430 define i64 @test17(i1 %c1, i1 %c2, ptr %b1, ptr %b2, ptr %b3) {
150
anatofuz
parents:
diff changeset
431 ; CHECK-LABEL: @test17
anatofuz
parents:
diff changeset
432 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
433 %g1 = getelementptr inbounds i64, ptr %b1, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
434 %g2 = getelementptr inbounds i64, ptr %b2, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
435 %g3 = getelementptr inbounds i64, ptr %b3, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
436 %s1 = select i1 %c2, ptr %g1, ptr %g2
150
anatofuz
parents:
diff changeset
437 br i1 %c1, label %if.then, label %fallthrough
anatofuz
parents:
diff changeset
438
anatofuz
parents:
diff changeset
439 if.then:
anatofuz
parents:
diff changeset
440 br label %fallthrough
anatofuz
parents:
diff changeset
441
anatofuz
parents:
diff changeset
442 fallthrough:
anatofuz
parents:
diff changeset
443 ; CHECK-LABEL: fallthrough:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
444 %p1 = phi ptr [%s1, %entry], [%g3, %if.then]
150
anatofuz
parents:
diff changeset
445 ; CHECK-YES: sunkaddr
anatofuz
parents:
diff changeset
446 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
447 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
448 %v = load i64 , ptr %p1, align 8
150
anatofuz
parents:
diff changeset
449 ret i64 %v
anatofuz
parents:
diff changeset
450 }
anatofuz
parents:
diff changeset
451
anatofuz
parents:
diff changeset
452 ; The same two addr modes by different paths
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
453 define i32 @test18(i1 %cond1, i1 %cond2, ptr %b1, ptr %b2) {
150
anatofuz
parents:
diff changeset
454 ; CHECK-LABEL: @test18
anatofuz
parents:
diff changeset
455 entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
456 %g1 = getelementptr inbounds i64, ptr %b2, i64 5
150
anatofuz
parents:
diff changeset
457 br i1 %cond1, label %if.then1, label %if.then2
anatofuz
parents:
diff changeset
458
anatofuz
parents:
diff changeset
459 if.then1:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
460 %g2 = getelementptr inbounds i64, ptr %b1, i64 5
150
anatofuz
parents:
diff changeset
461 br label %fallthrough
anatofuz
parents:
diff changeset
462
anatofuz
parents:
diff changeset
463 if.then2:
anatofuz
parents:
diff changeset
464 br i1 %cond2, label %fallthrough, label %if.then3
anatofuz
parents:
diff changeset
465
anatofuz
parents:
diff changeset
466 if.then3:
anatofuz
parents:
diff changeset
467 br label %fallthrough
anatofuz
parents:
diff changeset
468
anatofuz
parents:
diff changeset
469 fallthrough:
anatofuz
parents:
diff changeset
470 ; CHECK-YES: sunk_phi
anatofuz
parents:
diff changeset
471 ; CHECK-NO-LABEL: fallthrough:
anatofuz
parents:
diff changeset
472 ; CHECK-NO: phi
anatofuz
parents:
diff changeset
473 ; CHECK-NO-NEXT: load
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
474 %c = phi ptr [%g2, %if.then1], [%g1, %if.then2], [%g1, %if.then3]
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
475 %v1 = load i32, ptr %c, align 4
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
476 %g1_1 = getelementptr inbounds i64, ptr %b2, i64 5
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
477 %v2 = load i32, ptr %g1_1, align 4
150
anatofuz
parents:
diff changeset
478 %v = add i32 %v1, %v2
anatofuz
parents:
diff changeset
479 ret i32 %v
anatofuz
parents:
diff changeset
480 }
anatofuz
parents:
diff changeset
481
anatofuz
parents:
diff changeset
482 ; Different types but null is the first?
anatofuz
parents:
diff changeset
483 define i32 @test19(i1 %cond1, i1 %cond2, i64* %b2, i8* %b1) {
anatofuz
parents:
diff changeset
484 ; CHECK-LABEL: @test19
anatofuz
parents:
diff changeset
485 entry:
anatofuz
parents:
diff changeset
486 %g1 = getelementptr inbounds i64, i64* %b2, i64 5
anatofuz
parents:
diff changeset
487 %bc1 = bitcast i64* %g1 to i32*
anatofuz
parents:
diff changeset
488 br i1 %cond1, label %if.then1, label %if.then2
anatofuz
parents:
diff changeset
489
anatofuz
parents:
diff changeset
490 if.then1:
anatofuz
parents:
diff changeset
491 %g2 = getelementptr inbounds i8, i8* %b1, i64 40
anatofuz
parents:
diff changeset
492 %bc2 = bitcast i8* %g2 to i32*
anatofuz
parents:
diff changeset
493 br label %fallthrough
anatofuz
parents:
diff changeset
494
anatofuz
parents:
diff changeset
495 if.then2:
anatofuz
parents:
diff changeset
496 %bc1_1 = bitcast i64* %g1 to i32*
anatofuz
parents:
diff changeset
497 br i1 %cond2, label %fallthrough, label %if.then3
anatofuz
parents:
diff changeset
498
anatofuz
parents:
diff changeset
499 if.then3:
anatofuz
parents:
diff changeset
500 %g3 = getelementptr inbounds i64, i64* null, i64 5
anatofuz
parents:
diff changeset
501 %bc1_2 = bitcast i64* %g3 to i32*
anatofuz
parents:
diff changeset
502 br label %fallthrough
anatofuz
parents:
diff changeset
503
anatofuz
parents:
diff changeset
504 fallthrough:
anatofuz
parents:
diff changeset
505 ; CHECK-NOT: sunk_phi
anatofuz
parents:
diff changeset
506 %c = phi i32* [%bc2, %if.then1], [%bc1_1, %if.then2], [%bc1_2, %if.then3]
anatofuz
parents:
diff changeset
507 %v1 = load i32, i32* %c, align 4
anatofuz
parents:
diff changeset
508 %g1_1 = getelementptr inbounds i64, i64* %b2, i64 5
anatofuz
parents:
diff changeset
509 %bc1_1_1 = bitcast i64* %g1_1 to i32*
anatofuz
parents:
diff changeset
510 %v2 = load i32, i32* %bc1_1_1, align 4
anatofuz
parents:
diff changeset
511 %v = add i32 %v1, %v2
anatofuz
parents:
diff changeset
512 ret i32 %v
anatofuz
parents:
diff changeset
513 }