xref: /llvm-project/llvm/test/CodeGen/PowerPC/f128-branch-cond.ll (revision eb7d16ea25649909373e324e6ebf36774cabdbfa)
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
6
7define 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
35;
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
60entry:
61  %cmp = fcmp oeq fp128 %a, %b
62  br i1 %cmp, label %if.true, label %if.false
63
64if.true:
65  %res1 = call i32 @foo()
66  br label %final
67
68if.false:
69  %res2 = call i32 @bar()
70  br label %final
71
72final:
73  %result = phi i32 [%res1, %if.true], [%res2, %if.false]
74  ret i32 %result
75}
76
77define 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
105;
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
137entry:
138  %cmp = fcmp ugt fp128 %a, %b
139  br i1 %cmp, label %if.true, label %if.false
140
141if.true:
142  %res1 = call i32 @foo()
143  br label %final
144
145if.false:
146  %res2 = call i32 @bar()
147  br label %final
148
149final:
150  %result = phi i32 [%res1, %if.true], [%res2, %if.false]
151  ret i32 %result
152}
153
154define 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
182;
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
207entry:
208  %cmp = fcmp olt fp128 %a, %b
209  br i1 %cmp, label %if.true, label %if.false
210
211if.true:
212  %res1 = call i32 @foo()
213  br label %final
214
215if.false:
216  %res2 = call i32 @bar()
217  br label %final
218
219final:
220  %result = phi i32 [%res1, %if.true], [%res2, %if.false]
221  ret i32 %result
222}
223
224define 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
252;
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
277entry:
278  %cmp = fcmp une fp128 %a, %b
279  br i1 %cmp, label %if.true, label %if.false
280
281if.true:
282  %res1 = call i32 @foo()
283  br label %final
284
285 if.false:
286  %res2 = call i32 @bar()
287  br label %final
288
289final:
290  %result = phi i32 [%res1, %if.true], [%res2, %if.false]
291  ret i32 %result
292}
293
294attributes #0 = { nounwind }
295
296declare i32 @foo()
297declare i32 @bar()
298