298 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64le-unknown-linux -mcpu=pwr8 -O0 < %s | \3; RUN: FileCheck %s -check-prefix=P84; RUN: llc -mtriple=powerpc64le-unknown-linux -mcpu=pwr9 -O0 < %s | \5; RUN: FileCheck %s -check-prefix=P96 7define i32 @test_choice1(fp128 %a, fp128 %b) #0 {8; P8-LABEL: test_choice1:9; P8: # %bb.0: # %entry10; P8-NEXT: mflr 011; P8-NEXT: stdu 1, -112(1)12; P8-NEXT: std 0, 128(1)13; P8-NEXT: bl __nekf214; P8-NEXT: nop15; P8-NEXT: # kill: def $r3 killed $r3 killed $x316; P8-NEXT: cmplwi 3, 017; P8-NEXT: bne 0, .LBB0_218; P8-NEXT: b .LBB0_119; P8-NEXT: .LBB0_1: # %if.true20; P8-NEXT: bl foo21; P8-NEXT: nop22; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill23; P8-NEXT: b .LBB0_324; P8-NEXT: .LBB0_2: # %if.false25; P8-NEXT: bl bar26; P8-NEXT: nop27; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill28; P8-NEXT: .LBB0_3: # %final29; P8-NEXT: lwz 3, 108(1) # 4-byte Folded Reload30; P8-NEXT: clrldi 3, 3, 3231; P8-NEXT: addi 1, 1, 11232; P8-NEXT: ld 0, 16(1)33; P8-NEXT: mtlr 034; P8-NEXT: blr35;36; P9-LABEL: test_choice1:37; P9: # %bb.0: # %entry38; P9-NEXT: mflr 039; P9-NEXT: stdu 1, -112(1)40; P9-NEXT: std 0, 128(1)41; P9-NEXT: xscmpuqp 0, 2, 342; P9-NEXT: bne 0, .LBB0_243; P9-NEXT: b .LBB0_144; P9-NEXT: .LBB0_1: # %if.true45; P9-NEXT: bl foo46; P9-NEXT: nop47; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill48; P9-NEXT: b .LBB0_349; P9-NEXT: .LBB0_2: # %if.false50; P9-NEXT: bl bar51; P9-NEXT: nop52; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill53; P9-NEXT: .LBB0_3: # %final54; P9-NEXT: lwz 3, 108(1) # 4-byte Folded Reload55; P9-NEXT: clrldi 3, 3, 3256; P9-NEXT: addi 1, 1, 11257; P9-NEXT: ld 0, 16(1)58; P9-NEXT: mtlr 059; P9-NEXT: blr60entry:61 %cmp = fcmp oeq fp128 %a, %b62 br i1 %cmp, label %if.true, label %if.false63 64if.true:65 %res1 = call i32 @foo()66 br label %final67 68if.false:69 %res2 = call i32 @bar()70 br label %final71 72final:73 %result = phi i32 [%res1, %if.true], [%res2, %if.false]74 ret i32 %result75}76 77define i32 @test_choice2(fp128 %a, fp128 %b) #0 {78; P8-LABEL: test_choice2:79; P8: # %bb.0: # %entry80; P8-NEXT: mflr 081; P8-NEXT: stdu 1, -112(1)82; P8-NEXT: std 0, 128(1)83; P8-NEXT: bl __lekf284; P8-NEXT: nop85; P8-NEXT: # kill: def $r3 killed $r3 killed $x386; P8-NEXT: cmpwi 3, 187; P8-NEXT: blt 0, .LBB1_288; P8-NEXT: b .LBB1_189; P8-NEXT: .LBB1_1: # %if.true90; P8-NEXT: bl foo91; P8-NEXT: nop92; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill93; P8-NEXT: b .LBB1_394; P8-NEXT: .LBB1_2: # %if.false95; P8-NEXT: bl bar96; P8-NEXT: nop97; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill98; P8-NEXT: .LBB1_3: # %final99; P8-NEXT: lwz 3, 108(1) # 4-byte Folded Reload100; P8-NEXT: clrldi 3, 3, 32101; P8-NEXT: addi 1, 1, 112102; P8-NEXT: ld 0, 16(1)103; P8-NEXT: mtlr 0104; P8-NEXT: blr105;106; P9-LABEL: test_choice2:107; P9: # %bb.0: # %entry108; P9-NEXT: mflr 0109; P9-NEXT: stdu 1, -112(1)110; P9-NEXT: std 0, 128(1)111; P9-NEXT: xscmpuqp 0, 2, 3112; P9-NEXT: crmove 20, 3113; P9-NEXT: crnot 21, 20114; P9-NEXT: crmove 20, 1115; P9-NEXT: crnot 20, 20116; P9-NEXT: crand 20, 20, 21117; P9-NEXT: crxor 21, 21, 21118; P9-NEXT: crxor 20, 20, 21119; P9-NEXT: bc 12, 20, .LBB1_2120; P9-NEXT: b .LBB1_1121; P9-NEXT: .LBB1_1: # %if.true122; P9-NEXT: bl foo123; P9-NEXT: nop124; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill125; P9-NEXT: b .LBB1_3126; P9-NEXT: .LBB1_2: # %if.false127; P9-NEXT: bl bar128; P9-NEXT: nop129; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill130; P9-NEXT: .LBB1_3: # %final131; P9-NEXT: lwz 3, 108(1) # 4-byte Folded Reload132; P9-NEXT: clrldi 3, 3, 32133; P9-NEXT: addi 1, 1, 112134; P9-NEXT: ld 0, 16(1)135; P9-NEXT: mtlr 0136; P9-NEXT: blr137entry:138 %cmp = fcmp ugt fp128 %a, %b139 br i1 %cmp, label %if.true, label %if.false140 141if.true:142 %res1 = call i32 @foo()143 br label %final144 145if.false:146 %res2 = call i32 @bar()147 br label %final148 149final:150 %result = phi i32 [%res1, %if.true], [%res2, %if.false]151 ret i32 %result152}153 154define i32 @test_choice3(fp128 %a, fp128 %b) #0 {155; P8-LABEL: test_choice3:156; P8: # %bb.0: # %entry157; P8-NEXT: mflr 0158; P8-NEXT: stdu 1, -112(1)159; P8-NEXT: std 0, 128(1)160; P8-NEXT: bl __ltkf2161; P8-NEXT: nop162; P8-NEXT: # kill: def $r3 killed $r3 killed $x3163; P8-NEXT: cmpwi 3, -1164; P8-NEXT: bgt 0, .LBB2_2165; P8-NEXT: b .LBB2_1166; P8-NEXT: .LBB2_1: # %if.true167; P8-NEXT: bl foo168; P8-NEXT: nop169; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill170; P8-NEXT: b .LBB2_3171; P8-NEXT: .LBB2_2: # %if.false172; P8-NEXT: bl bar173; P8-NEXT: nop174; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill175; P8-NEXT: .LBB2_3: # %final176; P8-NEXT: lwz 3, 108(1) # 4-byte Folded Reload177; P8-NEXT: clrldi 3, 3, 32178; P8-NEXT: addi 1, 1, 112179; P8-NEXT: ld 0, 16(1)180; P8-NEXT: mtlr 0181; P8-NEXT: blr182;183; P9-LABEL: test_choice3:184; P9: # %bb.0: # %entry185; P9-NEXT: mflr 0186; P9-NEXT: stdu 1, -112(1)187; P9-NEXT: std 0, 128(1)188; P9-NEXT: xscmpuqp 0, 2, 3189; P9-NEXT: bge 0, .LBB2_2190; P9-NEXT: b .LBB2_1191; P9-NEXT: .LBB2_1: # %if.true192; P9-NEXT: bl foo193; P9-NEXT: nop194; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill195; P9-NEXT: b .LBB2_3196; P9-NEXT: .LBB2_2: # %if.false197; P9-NEXT: bl bar198; P9-NEXT: nop199; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill200; P9-NEXT: .LBB2_3: # %final201; P9-NEXT: lwz 3, 108(1) # 4-byte Folded Reload202; P9-NEXT: clrldi 3, 3, 32203; P9-NEXT: addi 1, 1, 112204; P9-NEXT: ld 0, 16(1)205; P9-NEXT: mtlr 0206; P9-NEXT: blr207entry:208 %cmp = fcmp olt fp128 %a, %b209 br i1 %cmp, label %if.true, label %if.false210 211if.true:212 %res1 = call i32 @foo()213 br label %final214 215if.false:216 %res2 = call i32 @bar()217 br label %final218 219final:220 %result = phi i32 [%res1, %if.true], [%res2, %if.false]221 ret i32 %result222}223 224define i32 @test_choice4(fp128 %a, fp128 %b) #0 {225; P8-LABEL: test_choice4:226; P8: # %bb.0: # %entry227; P8-NEXT: mflr 0228; P8-NEXT: stdu 1, -112(1)229; P8-NEXT: std 0, 128(1)230; P8-NEXT: bl __eqkf2231; P8-NEXT: nop232; P8-NEXT: # kill: def $r3 killed $r3 killed $x3233; P8-NEXT: cmplwi 3, 0234; P8-NEXT: beq 0, .LBB3_2235; P8-NEXT: b .LBB3_1236; P8-NEXT: .LBB3_1: # %if.true237; P8-NEXT: bl foo238; P8-NEXT: nop239; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill240; P8-NEXT: b .LBB3_3241; P8-NEXT: .LBB3_2: # %if.false242; P8-NEXT: bl bar243; P8-NEXT: nop244; P8-NEXT: stw 3, 108(1) # 4-byte Folded Spill245; P8-NEXT: .LBB3_3: # %final246; P8-NEXT: lwz 3, 108(1) # 4-byte Folded Reload247; P8-NEXT: clrldi 3, 3, 32248; P8-NEXT: addi 1, 1, 112249; P8-NEXT: ld 0, 16(1)250; P8-NEXT: mtlr 0251; P8-NEXT: blr252;253; P9-LABEL: test_choice4:254; P9: # %bb.0: # %entry255; P9-NEXT: mflr 0256; P9-NEXT: stdu 1, -112(1)257; P9-NEXT: std 0, 128(1)258; P9-NEXT: xscmpuqp 0, 2, 3259; P9-NEXT: beq 0, .LBB3_2260; P9-NEXT: b .LBB3_1261; P9-NEXT: .LBB3_1: # %if.true262; P9-NEXT: bl foo263; P9-NEXT: nop264; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill265; P9-NEXT: b .LBB3_3266; P9-NEXT: .LBB3_2: # %if.false267; P9-NEXT: bl bar268; P9-NEXT: nop269; P9-NEXT: stw 3, 108(1) # 4-byte Folded Spill270; P9-NEXT: .LBB3_3: # %final271; P9-NEXT: lwz 3, 108(1) # 4-byte Folded Reload272; P9-NEXT: clrldi 3, 3, 32273; P9-NEXT: addi 1, 1, 112274; P9-NEXT: ld 0, 16(1)275; P9-NEXT: mtlr 0276; P9-NEXT: blr277entry:278 %cmp = fcmp une fp128 %a, %b279 br i1 %cmp, label %if.true, label %if.false280 281if.true:282 %res1 = call i32 @foo()283 br label %final284 285 if.false:286 %res2 = call i32 @bar()287 br label %final288 289final:290 %result = phi i32 [%res1, %if.true], [%res2, %if.false]291 ret i32 %result292}293 294attributes #0 = { nounwind }295 296declare i32 @foo()297declare i32 @bar()298