brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.1 KiB · 831bc97 Raw
340 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -ppc-gpr-icmps=all -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2 -mattr=-crbits -disable-ppc-cmp-opt=0 | FileCheck %s3; RUN: llc -ppc-gpr-icmps=all -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2 -mattr=-crbits -disable-ppc-cmp-opt=0 -mattr=-isel | FileCheck --check-prefix=CHECK-NO-ISEL %s4 5target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"6target triple = "powerpc64-unknown-linux-gnu"7 8define signext i32 @foo(i32 signext %a, i32 signext %b, ptr nocapture %c) #0 {9; CHECK-LABEL: foo:10; CHECK:       # %bb.0: # %entry11; CHECK-NEXT:    cmpw 3, 412; CHECK-NEXT:    sub 6, 3, 413; CHECK-NEXT:    iselgt 3, 3, 414; CHECK-NEXT:    stw 6, 0(5)15; CHECK-NEXT:    blr16;17; CHECK-NO-ISEL-LABEL: foo:18; CHECK-NO-ISEL:       # %bb.0: # %entry19; CHECK-NO-ISEL-NEXT:    sub 6, 3, 420; CHECK-NO-ISEL-NEXT:    cmpw 3, 421; CHECK-NO-ISEL-NEXT:    stw 6, 0(5)22; CHECK-NO-ISEL-NEXT:    bgtlr 023; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry24; CHECK-NO-ISEL-NEXT:    mr 3, 425; CHECK-NO-ISEL-NEXT:    blr26entry:27  %sub = sub nsw i32 %a, %b28  store i32 %sub, ptr %c, align 429  %cmp = icmp sgt i32 %a, %b30  %cond = select i1 %cmp, i32 %a, i32 %b31  ret i32 %cond32}33 34define signext i32 @foo2(i32 signext %a, i32 signext %b, ptr nocapture %c) #0 {35; CHECK-LABEL: foo2:36; CHECK:       # %bb.0: # %entry37; CHECK-NEXT:    slw 4, 3, 438; CHECK-NEXT:    li 6, 039; CHECK-NEXT:    li 3, 140; CHECK-NEXT:    cmpwi 4, 041; CHECK-NEXT:    stw 4, 0(5)42; CHECK-NEXT:    iselgt 3, 3, 643; CHECK-NEXT:    blr44;45; CHECK-NO-ISEL-LABEL: foo2:46; CHECK-NO-ISEL:       # %bb.0: # %entry47; CHECK-NO-ISEL-NEXT:    mr 6, 348; CHECK-NO-ISEL-NEXT:    li 3, 149; CHECK-NO-ISEL-NEXT:    slw 4, 6, 450; CHECK-NO-ISEL-NEXT:    cmpwi 4, 051; CHECK-NO-ISEL-NEXT:    stw 4, 0(5)52; CHECK-NO-ISEL-NEXT:    bgtlr 053; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry54; CHECK-NO-ISEL-NEXT:    li 3, 055; CHECK-NO-ISEL-NEXT:    blr56entry:57  %shl = shl i32 %a, %b58  store i32 %shl, ptr %c, align 459  %cmp = icmp sgt i32 %shl, 060  %conv = zext i1 %cmp to i3261  ret i32 %conv62}63 64define i64 @fool(i64 %a, i64 %b, ptr nocapture %c) #0 {65; CHECK-LABEL: fool:66; CHECK:       # %bb.0: # %entry67; CHECK-NEXT:    sub. 6, 3, 468; CHECK-NEXT:    iselgt 3, 3, 469; CHECK-NEXT:    std 6, 0(5)70; CHECK-NEXT:    blr71;72; CHECK-NO-ISEL-LABEL: fool:73; CHECK-NO-ISEL:       # %bb.0: # %entry74; CHECK-NO-ISEL-NEXT:    sub. 6, 3, 475; CHECK-NO-ISEL-NEXT:    std 6, 0(5)76; CHECK-NO-ISEL-NEXT:    bgtlr 077; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry78; CHECK-NO-ISEL-NEXT:    mr 3, 479; CHECK-NO-ISEL-NEXT:    blr80entry:81  %sub = sub nsw i64 %a, %b82  store i64 %sub, ptr %c, align 883  %cmp = icmp sgt i64 %a, %b84  %cond = select i1 %cmp, i64 %a, i64 %b85  ret i64 %cond86}87 88define i64 @foolb(i64 %a, i64 %b, ptr nocapture %c) #0 {89; CHECK-LABEL: foolb:90; CHECK:       # %bb.0: # %entry91; CHECK-NEXT:    sub. 6, 3, 492; CHECK-NEXT:    iselgt 3, 4, 393; CHECK-NEXT:    std 6, 0(5)94; CHECK-NEXT:    blr95;96; CHECK-NO-ISEL-LABEL: foolb:97; CHECK-NO-ISEL:       # %bb.0: # %entry98; CHECK-NO-ISEL-NEXT:    sub. 6, 3, 499; CHECK-NO-ISEL-NEXT:    std 6, 0(5)100; CHECK-NO-ISEL-NEXT:    blelr 0101; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry102; CHECK-NO-ISEL-NEXT:    mr 3, 4103; CHECK-NO-ISEL-NEXT:    blr104entry:105  %sub = sub nsw i64 %a, %b106  store i64 %sub, ptr %c, align 8107  %cmp = icmp sle i64 %a, %b108  %cond = select i1 %cmp, i64 %a, i64 %b109  ret i64 %cond110}111 112define i64 @foolc(i64 %a, i64 %b, ptr nocapture %c) #0 {113; CHECK-LABEL: foolc:114; CHECK:       # %bb.0: # %entry115; CHECK-NEXT:    sub. 6, 4, 3116; CHECK-NEXT:    isellt 3, 3, 4117; CHECK-NEXT:    std 6, 0(5)118; CHECK-NEXT:    blr119;120; CHECK-NO-ISEL-LABEL: foolc:121; CHECK-NO-ISEL:       # %bb.0: # %entry122; CHECK-NO-ISEL-NEXT:    sub. 6, 4, 3123; CHECK-NO-ISEL-NEXT:    std 6, 0(5)124; CHECK-NO-ISEL-NEXT:    bltlr 0125; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry126; CHECK-NO-ISEL-NEXT:    mr 3, 4127; CHECK-NO-ISEL-NEXT:    blr128entry:129  %sub = sub nsw i64 %b, %a130  store i64 %sub, ptr %c, align 8131  %cmp = icmp sgt i64 %a, %b132  %cond = select i1 %cmp, i64 %a, i64 %b133  ret i64 %cond134}135 136define i64 @foold(i64 %a, i64 %b, ptr nocapture %c) #0 {137; CHECK-LABEL: foold:138; CHECK:       # %bb.0: # %entry139; CHECK-NEXT:    sub. 6, 4, 3140; CHECK-NEXT:    iselgt 3, 3, 4141; CHECK-NEXT:    std 6, 0(5)142; CHECK-NEXT:    blr143;144; CHECK-NO-ISEL-LABEL: foold:145; CHECK-NO-ISEL:       # %bb.0: # %entry146; CHECK-NO-ISEL-NEXT:    sub. 6, 4, 3147; CHECK-NO-ISEL-NEXT:    std 6, 0(5)148; CHECK-NO-ISEL-NEXT:    bgtlr 0149; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry150; CHECK-NO-ISEL-NEXT:    mr 3, 4151; CHECK-NO-ISEL-NEXT:    blr152entry:153  %sub = sub nsw i64 %b, %a154  store i64 %sub, ptr %c, align 8155  %cmp = icmp slt i64 %a, %b156  %cond = select i1 %cmp, i64 %a, i64 %b157  ret i64 %cond158}159 160define i64 @foold2(i64 %a, i64 %b, ptr nocapture %c) #0 {161; CHECK-LABEL: foold2:162; CHECK:       # %bb.0: # %entry163; CHECK-NEXT:    sub. 6, 3, 4164; CHECK-NEXT:    isellt 3, 3, 4165; CHECK-NEXT:    std 6, 0(5)166; CHECK-NEXT:    blr167;168; CHECK-NO-ISEL-LABEL: foold2:169; CHECK-NO-ISEL:       # %bb.0: # %entry170; CHECK-NO-ISEL-NEXT:    sub. 6, 3, 4171; CHECK-NO-ISEL-NEXT:    std 6, 0(5)172; CHECK-NO-ISEL-NEXT:    bltlr 0173; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry174; CHECK-NO-ISEL-NEXT:    mr 3, 4175; CHECK-NO-ISEL-NEXT:    blr176entry:177  %sub = sub nsw i64 %a, %b178  store i64 %sub, ptr %c, align 8179  %cmp = icmp slt i64 %a, %b180  %cond = select i1 %cmp, i64 %a, i64 %b181  ret i64 %cond182}183 184define i64 @foo2l(i64 %a, i64 %b, ptr nocapture %c) #0 {185; CHECK-LABEL: foo2l:186; CHECK:       # %bb.0: # %entry187; CHECK-NEXT:    sld 4, 3, 4188; CHECK-NEXT:    addi 3, 4, -1189; CHECK-NEXT:    std 4, 0(5)190; CHECK-NEXT:    nor 3, 3, 4191; CHECK-NEXT:    rldicl 3, 3, 1, 63192; CHECK-NEXT:    blr193;194; CHECK-NO-ISEL-LABEL: foo2l:195; CHECK-NO-ISEL:       # %bb.0: # %entry196; CHECK-NO-ISEL-NEXT:    sld 4, 3, 4197; CHECK-NO-ISEL-NEXT:    addi 3, 4, -1198; CHECK-NO-ISEL-NEXT:    std 4, 0(5)199; CHECK-NO-ISEL-NEXT:    nor 3, 3, 4200; CHECK-NO-ISEL-NEXT:    rldicl 3, 3, 1, 63201; CHECK-NO-ISEL-NEXT:    blr202entry:203  %shl = shl i64 %a, %b204  store i64 %shl, ptr %c, align 8205  %cmp = icmp sgt i64 %shl, 0206  %conv1 = zext i1 %cmp to i64207  ret i64 %conv1208}209 210define double @food(double %a, double %b, ptr nocapture %c) #0 {211; CHECK-LABEL: food:212; CHECK:       # %bb.0: # %entry213; CHECK-NEXT:    fsub 0, 1, 2214; CHECK-NEXT:    fcmpu 0, 1, 2215; CHECK-NEXT:    stfd 0, 0(5)216; CHECK-NEXT:    bgtlr 0217; CHECK-NEXT:  # %bb.1: # %entry218; CHECK-NEXT:    fmr 1, 2219; CHECK-NEXT:    blr220;221; CHECK-NO-ISEL-LABEL: food:222; CHECK-NO-ISEL:       # %bb.0: # %entry223; CHECK-NO-ISEL-NEXT:    fsub 0, 1, 2224; CHECK-NO-ISEL-NEXT:    fcmpu 0, 1, 2225; CHECK-NO-ISEL-NEXT:    stfd 0, 0(5)226; CHECK-NO-ISEL-NEXT:    bgtlr 0227; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry228; CHECK-NO-ISEL-NEXT:    fmr 1, 2229; CHECK-NO-ISEL-NEXT:    blr230entry:231  %sub = fsub double %a, %b232  store double %sub, ptr %c, align 8233  %cmp = fcmp ogt double %a, %b234  %cond = select i1 %cmp, double %a, double %b235  ret double %cond236}237 238define float @foof(float %a, float %b, ptr nocapture %c) #0 {239; CHECK-LABEL: foof:240; CHECK:       # %bb.0: # %entry241; CHECK-NEXT:    fsubs 0, 1, 2242; CHECK-NEXT:    fcmpu 0, 1, 2243; CHECK-NEXT:    stfs 0, 0(5)244; CHECK-NEXT:    bgtlr 0245; CHECK-NEXT:  # %bb.1: # %entry246; CHECK-NEXT:    fmr 1, 2247; CHECK-NEXT:    blr248;249; CHECK-NO-ISEL-LABEL: foof:250; CHECK-NO-ISEL:       # %bb.0: # %entry251; CHECK-NO-ISEL-NEXT:    fsubs 0, 1, 2252; CHECK-NO-ISEL-NEXT:    fcmpu 0, 1, 2253; CHECK-NO-ISEL-NEXT:    stfs 0, 0(5)254; CHECK-NO-ISEL-NEXT:    bgtlr 0255; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry256; CHECK-NO-ISEL-NEXT:    fmr 1, 2257; CHECK-NO-ISEL-NEXT:    blr258entry:259  %sub = fsub float %a, %b260  store float %sub, ptr %c, align 4261  %cmp = fcmp ogt float %a, %b262  %cond = select i1 %cmp, float %a, float %b263  ret float %cond264}265 266declare i64 @llvm.ctpop.i64(i64);267 268define signext i64 @fooct(i64 signext %a, i64 signext %b, ptr nocapture %c) #0 {269; CHECK-LABEL: fooct:270; CHECK:       # %bb.0: # %entry271; CHECK-NEXT:    lis 6, 21845272; CHECK-NEXT:    sub 7, 3, 4273; CHECK-NEXT:    ori 6, 6, 21845274; CHECK-NEXT:    lis 9, 13107275; CHECK-NEXT:    rotldi 8, 7, 63276; CHECK-NEXT:    rldimi 6, 6, 32, 0277; CHECK-NEXT:    and 6, 8, 6278; CHECK-NEXT:    ori 8, 9, 13107279; CHECK-NEXT:    sub 6, 7, 6280; CHECK-NEXT:    rldimi 8, 8, 32, 0281; CHECK-NEXT:    lis 9, 257282; CHECK-NEXT:    rotldi 7, 6, 62283; CHECK-NEXT:    and 6, 6, 8284; CHECK-NEXT:    ori 9, 9, 257285; CHECK-NEXT:    and 7, 7, 8286; CHECK-NEXT:    lis 8, 3855287; CHECK-NEXT:    add 6, 6, 7288; CHECK-NEXT:    ori 7, 8, 3855289; CHECK-NEXT:    rldicl 8, 6, 60, 4290; CHECK-NEXT:    rldimi 7, 7, 32, 0291; CHECK-NEXT:    rldimi 9, 9, 32, 0292; CHECK-NEXT:    add 6, 6, 8293; CHECK-NEXT:    and 6, 6, 7294; CHECK-NEXT:    mulld 6, 6, 9295; CHECK-NEXT:    rldicl. 6, 6, 8, 56296; CHECK-NEXT:    iselgt 3, 3, 4297; CHECK-NEXT:    std 6, 0(5)298; CHECK-NEXT:    blr299;300; CHECK-NO-ISEL-LABEL: fooct:301; CHECK-NO-ISEL:       # %bb.0: # %entry302; CHECK-NO-ISEL-NEXT:    lis 6, 21845303; CHECK-NO-ISEL-NEXT:    sub 7, 3, 4304; CHECK-NO-ISEL-NEXT:    ori 6, 6, 21845305; CHECK-NO-ISEL-NEXT:    lis 9, 13107306; CHECK-NO-ISEL-NEXT:    rotldi 8, 7, 63307; CHECK-NO-ISEL-NEXT:    rldimi 6, 6, 32, 0308; CHECK-NO-ISEL-NEXT:    and 6, 8, 6309; CHECK-NO-ISEL-NEXT:    ori 8, 9, 13107310; CHECK-NO-ISEL-NEXT:    sub 6, 7, 6311; CHECK-NO-ISEL-NEXT:    rldimi 8, 8, 32, 0312; CHECK-NO-ISEL-NEXT:    lis 9, 257313; CHECK-NO-ISEL-NEXT:    rotldi 7, 6, 62314; CHECK-NO-ISEL-NEXT:    and 6, 6, 8315; CHECK-NO-ISEL-NEXT:    ori 9, 9, 257316; CHECK-NO-ISEL-NEXT:    and 7, 7, 8317; CHECK-NO-ISEL-NEXT:    lis 8, 3855318; CHECK-NO-ISEL-NEXT:    add 6, 6, 7319; CHECK-NO-ISEL-NEXT:    ori 7, 8, 3855320; CHECK-NO-ISEL-NEXT:    rldicl 8, 6, 60, 4321; CHECK-NO-ISEL-NEXT:    rldimi 7, 7, 32, 0322; CHECK-NO-ISEL-NEXT:    rldimi 9, 9, 32, 0323; CHECK-NO-ISEL-NEXT:    add 6, 6, 8324; CHECK-NO-ISEL-NEXT:    and 6, 6, 7325; CHECK-NO-ISEL-NEXT:    mulld 6, 6, 9326; CHECK-NO-ISEL-NEXT:    rldicl. 6, 6, 8, 56327; CHECK-NO-ISEL-NEXT:    std 6, 0(5)328; CHECK-NO-ISEL-NEXT:    bgtlr 0329; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry330; CHECK-NO-ISEL-NEXT:    mr 3, 4331; CHECK-NO-ISEL-NEXT:    blr332entry:333  %sub = sub nsw i64 %a, %b334  %subc = call i64 @llvm.ctpop.i64(i64 %sub)335  store i64 %subc, ptr %c, align 4336  %cmp = icmp sgt i64 %subc, 0337  %cond = select i1 %cmp, i64 %a, i64 %b338  ret i64 %cond339}340