[clang-tidy][modernize-use-starts-ends-with] Fix operator rewriting false negative...
[llvm-project.git] / llvm / test / CodeGen / PowerPC / f128-branch-cond.ll
blob75c2bc7bc0fa05de08b28f2eb475ad38aa5c9efb
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -O0 < %s | \
3 ; RUN:   FileCheck %s -check-prefix=P8
4 ; RUN: llc -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 -O0 < %s | \
5 ; RUN:   FileCheck %s -check-prefix=P9
7 define i32 @test_choice1(fp128 %a, fp128 %b) #0 {
8 ; P8-LABEL: test_choice1:
9 ; P8:       # %bb.0: # %entry
10 ; P8-NEXT:    mflr 0
11 ; P8-NEXT:    stdu 1, -112(1)
12 ; P8-NEXT:    std 0, 128(1)
13 ; P8-NEXT:    bl __nekf2
14 ; P8-NEXT:    nop
15 ; P8-NEXT:    # kill: def $r3 killed $r3 killed $x3
16 ; P8-NEXT:    cmplwi 3, 0
17 ; P8-NEXT:    bne 0, .LBB0_2
18 ; P8-NEXT:    b .LBB0_1
19 ; P8-NEXT:  .LBB0_1: # %if.true
20 ; P8-NEXT:    bl foo
21 ; P8-NEXT:    nop
22 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
23 ; P8-NEXT:    b .LBB0_3
24 ; P8-NEXT:  .LBB0_2: # %if.false
25 ; P8-NEXT:    bl bar
26 ; P8-NEXT:    nop
27 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
28 ; P8-NEXT:  .LBB0_3: # %final
29 ; P8-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
30 ; P8-NEXT:    clrldi 3, 3, 32
31 ; P8-NEXT:    addi 1, 1, 112
32 ; P8-NEXT:    ld 0, 16(1)
33 ; P8-NEXT:    mtlr 0
34 ; P8-NEXT:    blr
36 ; P9-LABEL: test_choice1:
37 ; P9:       # %bb.0: # %entry
38 ; P9-NEXT:    mflr 0
39 ; P9-NEXT:    stdu 1, -112(1)
40 ; P9-NEXT:    std 0, 128(1)
41 ; P9-NEXT:    xscmpuqp 0, 2, 3
42 ; P9-NEXT:    bne 0, .LBB0_2
43 ; P9-NEXT:    b .LBB0_1
44 ; P9-NEXT:  .LBB0_1: # %if.true
45 ; P9-NEXT:    bl foo
46 ; P9-NEXT:    nop
47 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
48 ; P9-NEXT:    b .LBB0_3
49 ; P9-NEXT:  .LBB0_2: # %if.false
50 ; P9-NEXT:    bl bar
51 ; P9-NEXT:    nop
52 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
53 ; P9-NEXT:  .LBB0_3: # %final
54 ; P9-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
55 ; P9-NEXT:    clrldi 3, 3, 32
56 ; P9-NEXT:    addi 1, 1, 112
57 ; P9-NEXT:    ld 0, 16(1)
58 ; P9-NEXT:    mtlr 0
59 ; P9-NEXT:    blr
60 entry:
61   %cmp = fcmp oeq fp128 %a, %b
62   br i1 %cmp, label %if.true, label %if.false
64 if.true:
65   %res1 = call i32 @foo()
66   br label %final
68 if.false:
69   %res2 = call i32 @bar()
70   br label %final
72 final:
73   %result = phi i32 [%res1, %if.true], [%res2, %if.false]
74   ret i32 %result
77 define i32 @test_choice2(fp128 %a, fp128 %b) #0 {
78 ; P8-LABEL: test_choice2:
79 ; P8:       # %bb.0: # %entry
80 ; P8-NEXT:    mflr 0
81 ; P8-NEXT:    stdu 1, -112(1)
82 ; P8-NEXT:    std 0, 128(1)
83 ; P8-NEXT:    bl __lekf2
84 ; P8-NEXT:    nop
85 ; P8-NEXT:    # kill: def $r3 killed $r3 killed $x3
86 ; P8-NEXT:    cmpwi 3, 1
87 ; P8-NEXT:    blt 0, .LBB1_2
88 ; P8-NEXT:    b .LBB1_1
89 ; P8-NEXT:  .LBB1_1: # %if.true
90 ; P8-NEXT:    bl foo
91 ; P8-NEXT:    nop
92 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
93 ; P8-NEXT:    b .LBB1_3
94 ; P8-NEXT:  .LBB1_2: # %if.false
95 ; P8-NEXT:    bl bar
96 ; P8-NEXT:    nop
97 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
98 ; P8-NEXT:  .LBB1_3: # %final
99 ; P8-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
100 ; P8-NEXT:    clrldi 3, 3, 32
101 ; P8-NEXT:    addi 1, 1, 112
102 ; P8-NEXT:    ld 0, 16(1)
103 ; P8-NEXT:    mtlr 0
104 ; P8-NEXT:    blr
106 ; P9-LABEL: test_choice2:
107 ; P9:       # %bb.0: # %entry
108 ; P9-NEXT:    mflr 0
109 ; P9-NEXT:    stdu 1, -112(1)
110 ; P9-NEXT:    std 0, 128(1)
111 ; P9-NEXT:    xscmpuqp 0, 2, 3
112 ; P9-NEXT:    crmove 20, 3
113 ; P9-NEXT:    crnot 21, 20
114 ; P9-NEXT:    crmove 20, 1
115 ; P9-NEXT:    crnot 20, 20
116 ; P9-NEXT:    crand 20, 20, 21
117 ; P9-NEXT:    crxor 21, 21, 21
118 ; P9-NEXT:    crxor 20, 20, 21
119 ; P9-NEXT:    bc 12, 20, .LBB1_2
120 ; P9-NEXT:    b .LBB1_1
121 ; P9-NEXT:  .LBB1_1: # %if.true
122 ; P9-NEXT:    bl foo
123 ; P9-NEXT:    nop
124 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
125 ; P9-NEXT:    b .LBB1_3
126 ; P9-NEXT:  .LBB1_2: # %if.false
127 ; P9-NEXT:    bl bar
128 ; P9-NEXT:    nop
129 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
130 ; P9-NEXT:  .LBB1_3: # %final
131 ; P9-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
132 ; P9-NEXT:    clrldi 3, 3, 32
133 ; P9-NEXT:    addi 1, 1, 112
134 ; P9-NEXT:    ld 0, 16(1)
135 ; P9-NEXT:    mtlr 0
136 ; P9-NEXT:    blr
137 entry:
138   %cmp = fcmp ugt fp128 %a, %b
139   br i1 %cmp, label %if.true, label %if.false
141 if.true:
142   %res1 = call i32 @foo()
143   br label %final
145 if.false:
146   %res2 = call i32 @bar()
147   br label %final
149 final:
150   %result = phi i32 [%res1, %if.true], [%res2, %if.false]
151   ret i32 %result
154 define i32 @test_choice3(fp128 %a, fp128 %b) #0 {
155 ; P8-LABEL: test_choice3:
156 ; P8:       # %bb.0: # %entry
157 ; P8-NEXT:    mflr 0
158 ; P8-NEXT:    stdu 1, -112(1)
159 ; P8-NEXT:    std 0, 128(1)
160 ; P8-NEXT:    bl __ltkf2
161 ; P8-NEXT:    nop
162 ; P8-NEXT:    # kill: def $r3 killed $r3 killed $x3
163 ; P8-NEXT:    cmpwi 3, -1
164 ; P8-NEXT:    bgt 0, .LBB2_2
165 ; P8-NEXT:    b .LBB2_1
166 ; P8-NEXT:  .LBB2_1: # %if.true
167 ; P8-NEXT:    bl foo
168 ; P8-NEXT:    nop
169 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
170 ; P8-NEXT:    b .LBB2_3
171 ; P8-NEXT:  .LBB2_2: # %if.false
172 ; P8-NEXT:    bl bar
173 ; P8-NEXT:    nop
174 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
175 ; P8-NEXT:  .LBB2_3: # %final
176 ; P8-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
177 ; P8-NEXT:    clrldi 3, 3, 32
178 ; P8-NEXT:    addi 1, 1, 112
179 ; P8-NEXT:    ld 0, 16(1)
180 ; P8-NEXT:    mtlr 0
181 ; P8-NEXT:    blr
183 ; P9-LABEL: test_choice3:
184 ; P9:       # %bb.0: # %entry
185 ; P9-NEXT:    mflr 0
186 ; P9-NEXT:    stdu 1, -112(1)
187 ; P9-NEXT:    std 0, 128(1)
188 ; P9-NEXT:    xscmpuqp 0, 2, 3
189 ; P9-NEXT:    bge 0, .LBB2_2
190 ; P9-NEXT:    b .LBB2_1
191 ; P9-NEXT:  .LBB2_1: # %if.true
192 ; P9-NEXT:    bl foo
193 ; P9-NEXT:    nop
194 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
195 ; P9-NEXT:    b .LBB2_3
196 ; P9-NEXT:  .LBB2_2: # %if.false
197 ; P9-NEXT:    bl bar
198 ; P9-NEXT:    nop
199 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
200 ; P9-NEXT:  .LBB2_3: # %final
201 ; P9-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
202 ; P9-NEXT:    clrldi 3, 3, 32
203 ; P9-NEXT:    addi 1, 1, 112
204 ; P9-NEXT:    ld 0, 16(1)
205 ; P9-NEXT:    mtlr 0
206 ; P9-NEXT:    blr
207 entry:
208   %cmp = fcmp olt fp128 %a, %b
209   br i1 %cmp, label %if.true, label %if.false
211 if.true:
212   %res1 = call i32 @foo()
213   br label %final
215 if.false:
216   %res2 = call i32 @bar()
217   br label %final
219 final:
220   %result = phi i32 [%res1, %if.true], [%res2, %if.false]
221   ret i32 %result
224 define i32 @test_choice4(fp128 %a, fp128 %b) #0 {
225 ; P8-LABEL: test_choice4:
226 ; P8:       # %bb.0: # %entry
227 ; P8-NEXT:    mflr 0
228 ; P8-NEXT:    stdu 1, -112(1)
229 ; P8-NEXT:    std 0, 128(1)
230 ; P8-NEXT:    bl __eqkf2
231 ; P8-NEXT:    nop
232 ; P8-NEXT:    # kill: def $r3 killed $r3 killed $x3
233 ; P8-NEXT:    cmplwi 3, 0
234 ; P8-NEXT:    beq 0, .LBB3_2
235 ; P8-NEXT:    b .LBB3_1
236 ; P8-NEXT:  .LBB3_1: # %if.true
237 ; P8-NEXT:    bl foo
238 ; P8-NEXT:    nop
239 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
240 ; P8-NEXT:    b .LBB3_3
241 ; P8-NEXT:  .LBB3_2: # %if.false
242 ; P8-NEXT:    bl bar
243 ; P8-NEXT:    nop
244 ; P8-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
245 ; P8-NEXT:  .LBB3_3: # %final
246 ; P8-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
247 ; P8-NEXT:    clrldi 3, 3, 32
248 ; P8-NEXT:    addi 1, 1, 112
249 ; P8-NEXT:    ld 0, 16(1)
250 ; P8-NEXT:    mtlr 0
251 ; P8-NEXT:    blr
253 ; P9-LABEL: test_choice4:
254 ; P9:       # %bb.0: # %entry
255 ; P9-NEXT:    mflr 0
256 ; P9-NEXT:    stdu 1, -112(1)
257 ; P9-NEXT:    std 0, 128(1)
258 ; P9-NEXT:    xscmpuqp 0, 2, 3
259 ; P9-NEXT:    beq 0, .LBB3_2
260 ; P9-NEXT:    b .LBB3_1
261 ; P9-NEXT:  .LBB3_1: # %if.true
262 ; P9-NEXT:    bl foo
263 ; P9-NEXT:    nop
264 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
265 ; P9-NEXT:    b .LBB3_3
266 ; P9-NEXT:  .LBB3_2: # %if.false
267 ; P9-NEXT:    bl bar
268 ; P9-NEXT:    nop
269 ; P9-NEXT:    stw 3, 108(1) # 4-byte Folded Spill
270 ; P9-NEXT:  .LBB3_3: # %final
271 ; P9-NEXT:    lwz 3, 108(1) # 4-byte Folded Reload
272 ; P9-NEXT:    clrldi 3, 3, 32
273 ; P9-NEXT:    addi 1, 1, 112
274 ; P9-NEXT:    ld 0, 16(1)
275 ; P9-NEXT:    mtlr 0
276 ; P9-NEXT:    blr
277 entry:
278   %cmp = fcmp une fp128 %a, %b
279   br i1 %cmp, label %if.true, label %if.false
281 if.true:
282   %res1 = call i32 @foo()
283   br label %final
285  if.false:
286   %res2 = call i32 @bar()
287   br label %final
289 final:
290   %result = phi i32 [%res1, %if.true], [%res2, %if.false]
291   ret i32 %result
294 attributes #0 = { nounwind }
296 declare i32 @foo()
297 declare i32 @bar()