323 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -ppc-asm-full-reg-names -verify-machineinstrs \3; RUN: -mtriple=powerpc64le-linux-gnu < %s | FileCheck \4; RUN: -check-prefix=CHECK-LE %s5; RUN: llc -ppc-asm-full-reg-names -verify-machineinstrs \6; RUN: -mtriple=powerpc-linux-gnu < %s | FileCheck \7; RUN: -check-prefix=CHECK-32 %s8 9define i64 @f0(i64 %x) {10; CHECK-LE-LABEL: f0:11; CHECK-LE: # %bb.0:12; CHECK-LE-NEXT: cmpdi r3, 013; CHECK-LE-NEXT: li r3, 12514; CHECK-LE-NEXT: li r4, -315; CHECK-LE-NEXT: isellt r3, r4, r316; CHECK-LE-NEXT: blr17;18; CHECK-32-LABEL: f0:19; CHECK-32: # %bb.0:20; CHECK-32-NEXT: cmpwi r3, 021; CHECK-32-NEXT: li r4, -322; CHECK-32-NEXT: blt cr0, .LBB0_223; CHECK-32-NEXT: # %bb.1:24; CHECK-32-NEXT: li r4, 12525; CHECK-32-NEXT: .LBB0_2:26; CHECK-32-NEXT: srawi r3, r3, 3127; CHECK-32-NEXT: blr28 %c = icmp slt i64 %x, 029 %r = select i1 %c, i64 -3, i64 12530 ret i64 %r31}32 33define i64 @f1(i64 %x) {34; CHECK-LE-LABEL: f1:35; CHECK-LE: # %bb.0:36; CHECK-LE-NEXT: cmpdi r3, 037; CHECK-LE-NEXT: li r3, 51238; CHECK-LE-NEXT: li r4, 6439; CHECK-LE-NEXT: isellt r3, r4, r340; CHECK-LE-NEXT: blr41;42; CHECK-32-LABEL: f1:43; CHECK-32: # %bb.0:44; CHECK-32-NEXT: cmpwi r3, 045; CHECK-32-NEXT: li r4, 6446; CHECK-32-NEXT: blt cr0, .LBB1_247; CHECK-32-NEXT: # %bb.1:48; CHECK-32-NEXT: li r4, 51249; CHECK-32-NEXT: .LBB1_2:50; CHECK-32-NEXT: li r3, 051; CHECK-32-NEXT: blr52 %c = icmp slt i64 %x, 053 %r = select i1 %c, i64 64, i64 51254 ret i64 %r55}56 57define i64 @f2(i64 %x) {58; CHECK-LE-LABEL: f2:59; CHECK-LE: # %bb.0:60; CHECK-LE-NEXT: cmpdi r3, 061; CHECK-LE-NEXT: li r3, 102462; CHECK-LE-NEXT: iseleq r3, 0, r363; CHECK-LE-NEXT: blr64;65; CHECK-32-LABEL: f2:66; CHECK-32: # %bb.0:67; CHECK-32-NEXT: or. r3, r4, r368; CHECK-32-NEXT: li r4, 069; CHECK-32-NEXT: bc 12, eq, .LBB2_270; CHECK-32-NEXT: # %bb.1:71; CHECK-32-NEXT: li r4, 102472; CHECK-32-NEXT: .LBB2_2:73; CHECK-32-NEXT: li r3, 074; CHECK-32-NEXT: blr75 %c = icmp eq i64 %x, 076 %r = select i1 %c, i64 0, i64 102477 ret i64 %r78}79 80define i64 @f3(i64 %x, i64 %y) {81; CHECK-LE-LABEL: f3:82; CHECK-LE: # %bb.0:83; CHECK-LE-NEXT: cmpldi r3, 084; CHECK-LE-NEXT: iseleq r3, 0, r485; CHECK-LE-NEXT: blr86;87; CHECK-32-LABEL: f3:88; CHECK-32: # %bb.0:89; CHECK-32-NEXT: mr r7, r490; CHECK-32-NEXT: or. r3, r7, r391; CHECK-32-NEXT: li r4, 092; CHECK-32-NEXT: li r3, 093; CHECK-32-NEXT: beq cr0, .LBB3_294; CHECK-32-NEXT: # %bb.1:95; CHECK-32-NEXT: mr r3, r596; CHECK-32-NEXT: .LBB3_2:97; CHECK-32-NEXT: beqlr cr098; CHECK-32-NEXT: # %bb.3:99; CHECK-32-NEXT: mr r4, r6100; CHECK-32-NEXT: blr101 %c = icmp eq i64 %x, 0102 %r = select i1 %c, i64 0, i64 %y103 ret i64 %r104}105 106define i64 @f4(i64 %x) {107; CHECK-LE-LABEL: f4:108; CHECK-LE: # %bb.0:109; CHECK-LE-NEXT: sradi r4, r3, 63110; CHECK-LE-NEXT: xor r3, r3, r4111; CHECK-LE-NEXT: sub r3, r4, r3112; CHECK-LE-NEXT: blr113;114; CHECK-32-LABEL: f4:115; CHECK-32: # %bb.0:116; CHECK-32-NEXT: srawi r5, r3, 31117; CHECK-32-NEXT: xor r4, r4, r5118; CHECK-32-NEXT: xor r3, r3, r5119; CHECK-32-NEXT: subc r4, r5, r4120; CHECK-32-NEXT: subfe r3, r3, r5121; CHECK-32-NEXT: blr122 %c = icmp sgt i64 %x, 0123 %x.neg = sub i64 0, %x124 %r = select i1 %c, i64 %x.neg, i64 %x125 ret i64 %r126}127 128define i64 @f4_sge_0(i64 %x) {129; CHECK-LE-LABEL: f4_sge_0:130; CHECK-LE: # %bb.0:131; CHECK-LE-NEXT: cmpdi r3, -1132; CHECK-LE-NEXT: neg r4, r3133; CHECK-LE-NEXT: iselgt r3, r4, r3134; CHECK-LE-NEXT: blr135;136; CHECK-32-LABEL: f4_sge_0:137; CHECK-32: # %bb.0:138; CHECK-32-NEXT: mr r6, r4139; CHECK-32-NEXT: subfic r4, r4, 0140; CHECK-32-NEXT: cmpwi r3, -1141; CHECK-32-NEXT: subfze r5, r3142; CHECK-32-NEXT: ble cr0, .LBB5_3143; CHECK-32-NEXT: # %bb.1:144; CHECK-32-NEXT: ble cr0, .LBB5_4145; CHECK-32-NEXT: .LBB5_2:146; CHECK-32-NEXT: mr r3, r5147; CHECK-32-NEXT: blr148; CHECK-32-NEXT: .LBB5_3:149; CHECK-32-NEXT: mr r4, r6150; CHECK-32-NEXT: bgt cr0, .LBB5_2151; CHECK-32-NEXT: .LBB5_4:152; CHECK-32-NEXT: mr r5, r3153; CHECK-32-NEXT: mr r3, r5154; CHECK-32-NEXT: blr155 %c = icmp sge i64 %x, 0156 %x.neg = sub i64 0, %x157 %r = select i1 %c, i64 %x.neg, i64 %x158 ret i64 %r159}160 161define i64 @f4_slt_0(i64 %x) {162; CHECK-LE-LABEL: f4_slt_0:163; CHECK-LE: # %bb.0:164; CHECK-LE-NEXT: sradi r4, r3, 63165; CHECK-LE-NEXT: xor r3, r3, r4166; CHECK-LE-NEXT: sub r3, r4, r3167; CHECK-LE-NEXT: blr168;169; CHECK-32-LABEL: f4_slt_0:170; CHECK-32: # %bb.0:171; CHECK-32-NEXT: srawi r5, r3, 31172; CHECK-32-NEXT: xor r4, r4, r5173; CHECK-32-NEXT: xor r3, r3, r5174; CHECK-32-NEXT: subc r4, r5, r4175; CHECK-32-NEXT: subfe r3, r3, r5176; CHECK-32-NEXT: blr177 %c = icmp slt i64 %x, 0178 %x.neg = sub i64 0, %x179 %r = select i1 %c, i64 %x, i64 %x.neg180 ret i64 %r181}182 183define i64 @f4_sle_0(i64 %x) {184; CHECK-LE-LABEL: f4_sle_0:185; CHECK-LE: # %bb.0:186; CHECK-LE-NEXT: cmpdi r3, 1187; CHECK-LE-NEXT: neg r4, r3188; CHECK-LE-NEXT: isellt r3, r3, r4189; CHECK-LE-NEXT: blr190;191; CHECK-32-LABEL: f4_sle_0:192; CHECK-32: # %bb.0:193; CHECK-32-NEXT: cmplwi r3, 0194; CHECK-32-NEXT: cmpwi cr1, r3, 0195; CHECK-32-NEXT: crandc 4*cr5+lt, 4*cr1+lt, eq196; CHECK-32-NEXT: cmpwi cr1, r4, 0197; CHECK-32-NEXT: crand 4*cr5+gt, eq, 4*cr1+eq198; CHECK-32-NEXT: subfic r5, r4, 0199; CHECK-32-NEXT: cror 4*cr5+lt, 4*cr5+gt, 4*cr5+lt200; CHECK-32-NEXT: subfze r6, r3201; CHECK-32-NEXT: bc 12, 4*cr5+lt, .LBB7_2202; CHECK-32-NEXT: # %bb.1:203; CHECK-32-NEXT: mr r3, r6204; CHECK-32-NEXT: .LBB7_2:205; CHECK-32-NEXT: bclr 12, 4*cr5+lt, 0206; CHECK-32-NEXT: # %bb.3:207; CHECK-32-NEXT: mr r4, r5208; CHECK-32-NEXT: blr209 %c = icmp sle i64 %x, 0210 %x.neg = sub i64 0, %x211 %r = select i1 %c, i64 %x, i64 %x.neg212 ret i64 %r213}214 215define i64 @f4_sgt_m1(i64 %x) {216; CHECK-LE-LABEL: f4_sgt_m1:217; CHECK-LE: # %bb.0:218; CHECK-LE-NEXT: sradi r4, r3, 63219; CHECK-LE-NEXT: xor r3, r3, r4220; CHECK-LE-NEXT: sub r3, r4, r3221; CHECK-LE-NEXT: blr222;223; CHECK-32-LABEL: f4_sgt_m1:224; CHECK-32: # %bb.0:225; CHECK-32-NEXT: srawi r5, r3, 31226; CHECK-32-NEXT: xor r4, r4, r5227; CHECK-32-NEXT: xor r3, r3, r5228; CHECK-32-NEXT: subc r4, r5, r4229; CHECK-32-NEXT: subfe r3, r3, r5230; CHECK-32-NEXT: blr231 %c = icmp sgt i64 %x, -1232 %x.neg = sub i64 0, %x233 %r = select i1 %c, i64 %x.neg, i64 %x234 ret i64 %r235}236 237define i64 @f5(i64 %x, i64 %y) {238; CHECK-LE-LABEL: f5:239; CHECK-LE: # %bb.0:240; CHECK-LE-NEXT: cmpldi r3, 0241; CHECK-LE-NEXT: li r3, 0242; CHECK-LE-NEXT: iseleq r3, r4, r3243; CHECK-LE-NEXT: blr244;245; CHECK-32-LABEL: f5:246; CHECK-32: # %bb.0:247; CHECK-32-NEXT: or. r3, r4, r3248; CHECK-32-NEXT: mr r3, r5249; CHECK-32-NEXT: bne cr0, .LBB9_3250; CHECK-32-NEXT: # %bb.1:251; CHECK-32-NEXT: bne cr0, .LBB9_4252; CHECK-32-NEXT: .LBB9_2:253; CHECK-32-NEXT: mr r4, r6254; CHECK-32-NEXT: blr255; CHECK-32-NEXT: .LBB9_3:256; CHECK-32-NEXT: li r3, 0257; CHECK-32-NEXT: beq cr0, .LBB9_2258; CHECK-32-NEXT: .LBB9_4:259; CHECK-32-NEXT: li r6, 0260; CHECK-32-NEXT: mr r4, r6261; CHECK-32-NEXT: blr262 %c = icmp eq i64 %x, 0263 %r = select i1 %c, i64 %y, i64 0264 ret i64 %r265}266 267define i32 @f5_i32(i32 %x, i32 %y) {268; CHECK-LE-LABEL: f5_i32:269; CHECK-LE: # %bb.0:270; CHECK-LE-NEXT: cmplwi r3, 0271; CHECK-LE-NEXT: li r3, 0272; CHECK-LE-NEXT: iseleq r3, r4, r3273; CHECK-LE-NEXT: blr274;275; CHECK-32-LABEL: f5_i32:276; CHECK-32: # %bb.0:277; CHECK-32-NEXT: cmplwi r3, 0278; CHECK-32-NEXT: mr r3, r4279; CHECK-32-NEXT: beqlr cr0280; CHECK-32-NEXT: # %bb.1:281; CHECK-32-NEXT: li r3, 0282; CHECK-32-NEXT: blr283 %c = icmp eq i32 %x, 0284 %r = select i1 %c, i32 %y, i32 0285 ret i32 %r286}287 288define i64 @f6(i64 %x) {289; CHECK-LE-LABEL: f6:290; CHECK-LE: # %bb.0:291; CHECK-LE-NEXT: cntlzd r3, r3292; CHECK-LE-NEXT: rldicl r3, r3, 58, 63293; CHECK-LE-NEXT: blr294;295; CHECK-32-LABEL: f6:296; CHECK-32: # %bb.0:297; CHECK-32-NEXT: or r3, r4, r3298; CHECK-32-NEXT: cntlzw r3, r3299; CHECK-32-NEXT: rlwinm r4, r3, 27, 31, 31300; CHECK-32-NEXT: li r3, 0301; CHECK-32-NEXT: blr302 %c = icmp ne i64 %x, 0303 %r = select i1 %c, i64 0, i64 1304 ret i64 %r305}306 307define i32 @f6_i32(i32 %x) {308; CHECK-LE-LABEL: f6_i32:309; CHECK-LE: # %bb.0:310; CHECK-LE-NEXT: cntlzw r3, r3311; CHECK-LE-NEXT: srwi r3, r3, 5312; CHECK-LE-NEXT: blr313;314; CHECK-32-LABEL: f6_i32:315; CHECK-32: # %bb.0:316; CHECK-32-NEXT: cntlzw r3, r3317; CHECK-32-NEXT: rlwinm r3, r3, 27, 31, 31318; CHECK-32-NEXT: blr319 %c = icmp ne i32 %x, 0320 %r = select i1 %c, i32 0, i32 1321 ret i32 %r322}323