brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.4 KiB · 1066103 Raw
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