brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · fb8da37 Raw
263 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+fullfp16 %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-THUMB3; RUN: llc -mtriple=armv8.2a-arm-none-eabi -mattr=+fullfp16 %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-ARM4 5define i32 @test_ne(i32 %x, i32 %y, i32 %a, i32 %b) {6; CHECK-LABEL: test_ne:7; CHECK:       @ %bb.0: @ %entry8; CHECK-NEXT:    vmov s0, r09; CHECK-NEXT:    cmp r2, r310; CHECK-NEXT:    vmov s2, r111; CHECK-NEXT:    vcvt.f16.u32 s0, s012; CHECK-NEXT:    vcvt.f16.u32 s2, s213; CHECK-NEXT:    vseleq.f16 s0, s2, s014; CHECK-NEXT:    vmov.f16 r0, s015; CHECK-NEXT:    bx lr16entry:17  %x.half = uitofp i32 %x to half18  %y.half = uitofp i32 %y to half19  %cmp = icmp ne i32 %a, %b20  %cond = select i1 %cmp, half %x.half, half %y.half21  %0 = bitcast half %cond to i1622  %1 = zext i16 %0 to i3223  ret i32 %124}25 26define i32 @test_eq(i32 %x, i32 %y, i32 %a, i32 %b) {27; CHECK-LABEL: test_eq:28; CHECK:       @ %bb.0: @ %entry29; CHECK-NEXT:    vmov s0, r130; CHECK-NEXT:    cmp r2, r331; CHECK-NEXT:    vmov s2, r032; CHECK-NEXT:    vcvt.f16.u32 s0, s033; CHECK-NEXT:    vcvt.f16.u32 s2, s234; CHECK-NEXT:    vseleq.f16 s0, s2, s035; CHECK-NEXT:    vmov.f16 r0, s036; CHECK-NEXT:    bx lr37entry:38  %x.half = uitofp i32 %x to half39  %y.half = uitofp i32 %y to half40  %cmp = icmp eq i32 %a, %b41  %cond = select i1 %cmp, half %x.half, half %y.half42  %0 = bitcast half %cond to i1643  %1 = zext i16 %0 to i3244  ret i32 %145}46 47define i32 @test_gt(i32 %x, i32 %y, i32 %a, i32 %b) {48; CHECK-LABEL: test_gt:49; CHECK:       @ %bb.0: @ %entry50; CHECK-NEXT:    vmov s0, r151; CHECK-NEXT:    cmp r2, r352; CHECK-NEXT:    vmov s2, r053; CHECK-NEXT:    vcvt.f16.u32 s0, s054; CHECK-NEXT:    vcvt.f16.u32 s2, s255; CHECK-NEXT:    vselgt.f16 s0, s2, s056; CHECK-NEXT:    vmov.f16 r0, s057; CHECK-NEXT:    bx lr58entry:59  %x.half = uitofp i32 %x to half60  %y.half = uitofp i32 %y to half61  %cmp = icmp sgt i32 %a, %b62  %cond = select i1 %cmp, half %x.half, half %y.half63  %0 = bitcast half %cond to i1664  %1 = zext i16 %0 to i3265  ret i32 %166}67 68define i32 @test_ge(i32 %x, i32 %y, i32 %a, i32 %b) {69; CHECK-LABEL: test_ge:70; CHECK:       @ %bb.0: @ %entry71; CHECK-NEXT:    vmov s0, r172; CHECK-NEXT:    cmp r2, r373; CHECK-NEXT:    vmov s2, r074; CHECK-NEXT:    vcvt.f16.u32 s0, s075; CHECK-NEXT:    vcvt.f16.u32 s2, s276; CHECK-NEXT:    vselge.f16 s0, s2, s077; CHECK-NEXT:    vmov.f16 r0, s078; CHECK-NEXT:    bx lr79entry:80  %x.half = uitofp i32 %x to half81  %y.half = uitofp i32 %y to half82  %cmp = icmp sge i32 %a, %b83  %cond = select i1 %cmp, half %x.half, half %y.half84  %0 = bitcast half %cond to i1685  %1 = zext i16 %0 to i3286  ret i32 %187}88 89define i32 @test_lt(i32 %x, i32 %y, i32 %a, i32 %b) {90; CHECK-LABEL: test_lt:91; CHECK:       @ %bb.0: @ %entry92; CHECK-NEXT:    vmov s0, r093; CHECK-NEXT:    cmp r2, r394; CHECK-NEXT:    vmov s2, r195; CHECK-NEXT:    vcvt.f16.u32 s0, s096; CHECK-NEXT:    vcvt.f16.u32 s2, s297; CHECK-NEXT:    vselge.f16 s0, s2, s098; CHECK-NEXT:    vmov.f16 r0, s099; CHECK-NEXT:    bx lr100entry:101  %x.half = uitofp i32 %x to half102  %y.half = uitofp i32 %y to half103  %cmp = icmp slt i32 %a, %b104  %cond = select i1 %cmp, half %x.half, half %y.half105  %0 = bitcast half %cond to i16106  %1 = zext i16 %0 to i32107  ret i32 %1108}109 110define i32 @test_le(i32 %x, i32 %y, i32 %a, i32 %b) {111; CHECK-LABEL: test_le:112; CHECK:       @ %bb.0: @ %entry113; CHECK-NEXT:    vmov s0, r0114; CHECK-NEXT:    cmp r2, r3115; CHECK-NEXT:    vmov s2, r1116; CHECK-NEXT:    vcvt.f16.u32 s0, s0117; CHECK-NEXT:    vcvt.f16.u32 s2, s2118; CHECK-NEXT:    vselgt.f16 s0, s2, s0119; CHECK-NEXT:    vmov.f16 r0, s0120; CHECK-NEXT:    bx lr121entry:122  %x.half = uitofp i32 %x to half123  %y.half = uitofp i32 %y to half124  %cmp = icmp sle i32 %a, %b125  %cond = select i1 %cmp, half %x.half, half %y.half126  %0 = bitcast half %cond to i16127  %1 = zext i16 %0 to i32128  ret i32 %1129}130 131define i32 @test_hi(i32 %x, i32 %y, i32 %a, i32 %b) {132; CHECK-THUMB-LABEL: test_hi:133; CHECK-THUMB:       @ %bb.0: @ %entry134; CHECK-THUMB-NEXT:    vmov s2, r1135; CHECK-THUMB-NEXT:    cmp r2, r3136; CHECK-THUMB-NEXT:    vmov s0, r0137; CHECK-THUMB-NEXT:    vcvt.f16.u32 s2, s2138; CHECK-THUMB-NEXT:    vcvt.f16.u32 s0, s0139; CHECK-THUMB-NEXT:    it hi140; CHECK-THUMB-NEXT:    vmovhi.f32 s2, s0141; CHECK-THUMB-NEXT:    vmov.f16 r0, s2142; CHECK-THUMB-NEXT:    bx lr143;144; CHECK-ARM-LABEL: test_hi:145; CHECK-ARM:       @ %bb.0: @ %entry146; CHECK-ARM-NEXT:    vmov s0, r0147; CHECK-ARM-NEXT:    cmp r2, r3148; CHECK-ARM-NEXT:    vmov s2, r1149; CHECK-ARM-NEXT:    vcvt.f16.u32 s0, s0150; CHECK-ARM-NEXT:    vcvt.f16.u32 s2, s2151; CHECK-ARM-NEXT:    vmovhi.f32 s2, s0152; CHECK-ARM-NEXT:    vmov.f16 r0, s2153; CHECK-ARM-NEXT:    bx lr154entry:155  %x.half = uitofp i32 %x to half156  %y.half = uitofp i32 %y to half157  %cmp = icmp ugt i32 %a, %b158  %cond = select i1 %cmp, half %x.half, half %y.half159  %0 = bitcast half %cond to i16160  %1 = zext i16 %0 to i32161  ret i32 %1162}163 164define i32 @test_hs(i32 %x, i32 %y, i32 %a, i32 %b) {165; CHECK-THUMB-LABEL: test_hs:166; CHECK-THUMB:       @ %bb.0: @ %entry167; CHECK-THUMB-NEXT:    vmov s2, r1168; CHECK-THUMB-NEXT:    cmp r2, r3169; CHECK-THUMB-NEXT:    vmov s0, r0170; CHECK-THUMB-NEXT:    vcvt.f16.u32 s2, s2171; CHECK-THUMB-NEXT:    vcvt.f16.u32 s0, s0172; CHECK-THUMB-NEXT:    it hs173; CHECK-THUMB-NEXT:    vmovhs.f32 s2, s0174; CHECK-THUMB-NEXT:    vmov.f16 r0, s2175; CHECK-THUMB-NEXT:    bx lr176;177; CHECK-ARM-LABEL: test_hs:178; CHECK-ARM:       @ %bb.0: @ %entry179; CHECK-ARM-NEXT:    vmov s0, r0180; CHECK-ARM-NEXT:    cmp r2, r3181; CHECK-ARM-NEXT:    vmov s2, r1182; CHECK-ARM-NEXT:    vcvt.f16.u32 s0, s0183; CHECK-ARM-NEXT:    vcvt.f16.u32 s2, s2184; CHECK-ARM-NEXT:    vmovhs.f32 s2, s0185; CHECK-ARM-NEXT:    vmov.f16 r0, s2186; CHECK-ARM-NEXT:    bx lr187entry:188  %x.half = uitofp i32 %x to half189  %y.half = uitofp i32 %y to half190  %cmp = icmp uge i32 %a, %b191  %cond = select i1 %cmp, half %x.half, half %y.half192  %0 = bitcast half %cond to i16193  %1 = zext i16 %0 to i32194  ret i32 %1195}196 197define i32 @test_lo(i32 %x, i32 %y, i32 %a, i32 %b) {198; CHECK-THUMB-LABEL: test_lo:199; CHECK-THUMB:       @ %bb.0: @ %entry200; CHECK-THUMB-NEXT:    vmov s2, r1201; CHECK-THUMB-NEXT:    cmp r2, r3202; CHECK-THUMB-NEXT:    vmov s0, r0203; CHECK-THUMB-NEXT:    vcvt.f16.u32 s2, s2204; CHECK-THUMB-NEXT:    vcvt.f16.u32 s0, s0205; CHECK-THUMB-NEXT:    it lo206; CHECK-THUMB-NEXT:    vmovlo.f32 s2, s0207; CHECK-THUMB-NEXT:    vmov.f16 r0, s2208; CHECK-THUMB-NEXT:    bx lr209;210; CHECK-ARM-LABEL: test_lo:211; CHECK-ARM:       @ %bb.0: @ %entry212; CHECK-ARM-NEXT:    vmov s0, r0213; CHECK-ARM-NEXT:    cmp r2, r3214; CHECK-ARM-NEXT:    vmov s2, r1215; CHECK-ARM-NEXT:    vcvt.f16.u32 s0, s0216; CHECK-ARM-NEXT:    vcvt.f16.u32 s2, s2217; CHECK-ARM-NEXT:    vmovlo.f32 s2, s0218; CHECK-ARM-NEXT:    vmov.f16 r0, s2219; CHECK-ARM-NEXT:    bx lr220entry:221  %x.half = uitofp i32 %x to half222  %y.half = uitofp i32 %y to half223  %cmp = icmp ult i32 %a, %b224  %cond = select i1 %cmp, half %x.half, half %y.half225  %0 = bitcast half %cond to i16226  %1 = zext i16 %0 to i32227  ret i32 %1228}229 230define i32 @test_ls(i32 %x, i32 %y, i32 %a, i32 %b) {231; CHECK-THUMB-LABEL: test_ls:232; CHECK-THUMB:       @ %bb.0: @ %entry233; CHECK-THUMB-NEXT:    vmov s2, r1234; CHECK-THUMB-NEXT:    cmp r2, r3235; CHECK-THUMB-NEXT:    vmov s0, r0236; CHECK-THUMB-NEXT:    vcvt.f16.u32 s2, s2237; CHECK-THUMB-NEXT:    vcvt.f16.u32 s0, s0238; CHECK-THUMB-NEXT:    it ls239; CHECK-THUMB-NEXT:    vmovls.f32 s2, s0240; CHECK-THUMB-NEXT:    vmov.f16 r0, s2241; CHECK-THUMB-NEXT:    bx lr242;243; CHECK-ARM-LABEL: test_ls:244; CHECK-ARM:       @ %bb.0: @ %entry245; CHECK-ARM-NEXT:    vmov s0, r0246; CHECK-ARM-NEXT:    cmp r2, r3247; CHECK-ARM-NEXT:    vmov s2, r1248; CHECK-ARM-NEXT:    vcvt.f16.u32 s0, s0249; CHECK-ARM-NEXT:    vcvt.f16.u32 s2, s2250; CHECK-ARM-NEXT:    vmovls.f32 s2, s0251; CHECK-ARM-NEXT:    vmov.f16 r0, s2252; CHECK-ARM-NEXT:    bx lr253entry:254  %x.half = uitofp i32 %x to half255  %y.half = uitofp i32 %y to half256  %cmp = icmp ule i32 %a, %b257  %cond = select i1 %cmp, half %x.half, half %y.half258  %0 = bitcast half %cond to i16259  %1 = zext i16 %0 to i32260  ret i32 %1261}262 263