brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.4 KiB · f7e72b2 Raw
467 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=hexagon -mattr=+hvxv69,+hvx-length128b,+hvx-qfloat < %s | FileCheck %s3; RUN: llc -mtriple=hexagon -mattr=+hvxv69,+hvx-length128b,+hvx-ieee-fp < %s | FileCheck %s4 5; --- Half6 7define <64 x half> @test_00(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {8; CHECK-LABEL: test_00:9; CHECK:       // %bb.0:10; CHECK-NEXT:    {11; CHECK-NEXT:     q0 = vcmp.eq(v0.h,v1.h)12; CHECK-NEXT:    }13; CHECK-NEXT:    {14; CHECK-NEXT:     v0 = vmux(q0,v1,v2)15; CHECK-NEXT:     jumpr r3116; CHECK-NEXT:    }17  %t0 = fcmp oeq <64 x half> %v0, %v118  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v219  ret <64 x half> %t120}21 22define <64 x half> @test_01(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {23; CHECK-LABEL: test_01:24; CHECK:       // %bb.0:25; CHECK-NEXT:    {26; CHECK-NEXT:     q0 = vcmp.eq(v0.h,v1.h)27; CHECK-NEXT:    }28; CHECK-NEXT:    {29; CHECK-NEXT:     v0 = vmux(q0,v2,v1)30; CHECK-NEXT:     jumpr r3131; CHECK-NEXT:    }32  %t0 = fcmp one <64 x half> %v0, %v133  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v234  ret <64 x half> %t135}36 37define <64 x half> @test_02(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {38; CHECK-LABEL: test_02:39; CHECK:       // %bb.0:40; CHECK-NEXT:    {41; CHECK-NEXT:     q0 = vcmp.gt(v1.hf,v0.hf)42; CHECK-NEXT:    }43; CHECK-NEXT:    {44; CHECK-NEXT:     v0 = vmux(q0,v1,v2)45; CHECK-NEXT:     jumpr r3146; CHECK-NEXT:    }47  %t0 = fcmp olt <64 x half> %v0, %v148  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v249  ret <64 x half> %t150}51 52define <64 x half> @test_03(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {53; CHECK-LABEL: test_03:54; CHECK:       // %bb.0:55; CHECK-NEXT:    {56; CHECK-NEXT:     q0 = vcmp.gt(v0.hf,v1.hf)57; CHECK-NEXT:    }58; CHECK-NEXT:    {59; CHECK-NEXT:     v0 = vmux(q0,v2,v1)60; CHECK-NEXT:     jumpr r3161; CHECK-NEXT:    }62  %t0 = fcmp ole <64 x half> %v0, %v163  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v264  ret <64 x half> %t165}66 67define <64 x half> @test_04(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {68; CHECK-LABEL: test_04:69; CHECK:       // %bb.0:70; CHECK-NEXT:    {71; CHECK-NEXT:     q0 = vcmp.gt(v0.hf,v1.hf)72; CHECK-NEXT:    }73; CHECK-NEXT:    {74; CHECK-NEXT:     v0 = vmux(q0,v1,v2)75; CHECK-NEXT:     jumpr r3176; CHECK-NEXT:    }77  %t0 = fcmp ogt <64 x half> %v0, %v178  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v279  ret <64 x half> %t180}81 82define <64 x half> @test_05(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {83; CHECK-LABEL: test_05:84; CHECK:       // %bb.0:85; CHECK-NEXT:    {86; CHECK-NEXT:     q0 = vcmp.gt(v1.hf,v0.hf)87; CHECK-NEXT:    }88; CHECK-NEXT:    {89; CHECK-NEXT:     v0 = vmux(q0,v2,v1)90; CHECK-NEXT:     jumpr r3191; CHECK-NEXT:    }92  %t0 = fcmp oge <64 x half> %v0, %v193  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v294  ret <64 x half> %t195}96 97define <64 x half> @test_0a(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {98; CHECK-LABEL: test_0a:99; CHECK:       // %bb.0:100; CHECK-NEXT:    {101; CHECK-NEXT:     r0 = ##16843009102; CHECK-NEXT:    }103; CHECK-NEXT:    {104; CHECK-NEXT:     q0 = vand(v2,r0)105; CHECK-NEXT:    }106; CHECK-NEXT:    {107; CHECK-NEXT:     q0 &= vcmp.eq(v0.h,v1.h)108; CHECK-NEXT:    }109; CHECK-NEXT:    {110; CHECK-NEXT:     v0 = vmux(q0,v0,v1)111; CHECK-NEXT:     jumpr r31112; CHECK-NEXT:    }113  %q0 = fcmp oeq <64 x half> %v0, %v1114  %q1 = trunc <64 x i16> %v2 to <64 x i1>115  %q2 = and <64 x i1> %q0, %q1116  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1117  ret <64 x half> %t1118}119 120define <64 x half> @test_0b(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {121; CHECK-LABEL: test_0b:122; CHECK:       // %bb.0:123; CHECK-NEXT:    {124; CHECK-NEXT:     r0 = ##16843009125; CHECK-NEXT:    }126; CHECK-NEXT:    {127; CHECK-NEXT:     q0 = vand(v2,r0)128; CHECK-NEXT:    }129; CHECK-NEXT:    {130; CHECK-NEXT:     q0 |= vcmp.eq(v0.h,v1.h)131; CHECK-NEXT:    }132; CHECK-NEXT:    {133; CHECK-NEXT:     v0 = vmux(q0,v0,v1)134; CHECK-NEXT:     jumpr r31135; CHECK-NEXT:    }136  %q0 = fcmp oeq <64 x half> %v0, %v1137  %q1 = trunc <64 x i16> %v2 to <64 x i1>138  %q2 = or <64 x i1> %q0, %q1139  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1140  ret <64 x half> %t1141}142 143define <64 x half> @test_0c(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {144; CHECK-LABEL: test_0c:145; CHECK:       // %bb.0:146; CHECK-NEXT:    {147; CHECK-NEXT:     r0 = ##16843009148; CHECK-NEXT:    }149; CHECK-NEXT:    {150; CHECK-NEXT:     q0 = vand(v2,r0)151; CHECK-NEXT:    }152; CHECK-NEXT:    {153; CHECK-NEXT:     q0 ^= vcmp.eq(v0.h,v1.h)154; CHECK-NEXT:    }155; CHECK-NEXT:    {156; CHECK-NEXT:     v0 = vmux(q0,v0,v1)157; CHECK-NEXT:     jumpr r31158; CHECK-NEXT:    }159  %q0 = fcmp oeq <64 x half> %v0, %v1160  %q1 = trunc <64 x i16> %v2 to <64 x i1>161  %q2 = xor <64 x i1> %q0, %q1162  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1163  ret <64 x half> %t1164}165 166define <64 x half> @test_0d(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {167; CHECK-LABEL: test_0d:168; CHECK:       // %bb.0:169; CHECK-NEXT:    {170; CHECK-NEXT:     r0 = ##16843009171; CHECK-NEXT:    }172; CHECK-NEXT:    {173; CHECK-NEXT:     q0 = vand(v2,r0)174; CHECK-NEXT:    }175; CHECK-NEXT:    {176; CHECK-NEXT:     q0 &= vcmp.gt(v0.hf,v1.hf)177; CHECK-NEXT:    }178; CHECK-NEXT:    {179; CHECK-NEXT:     v0 = vmux(q0,v0,v1)180; CHECK-NEXT:     jumpr r31181; CHECK-NEXT:    }182  %q0 = fcmp ogt <64 x half> %v0, %v1183  %q1 = trunc <64 x i16> %v2 to <64 x i1>184  %q2 = and <64 x i1> %q0, %q1185  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1186  ret <64 x half> %t1187}188 189define <64 x half> @test_0e(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {190; CHECK-LABEL: test_0e:191; CHECK:       // %bb.0:192; CHECK-NEXT:    {193; CHECK-NEXT:     r0 = ##16843009194; CHECK-NEXT:    }195; CHECK-NEXT:    {196; CHECK-NEXT:     q0 = vand(v2,r0)197; CHECK-NEXT:    }198; CHECK-NEXT:    {199; CHECK-NEXT:     q0 |= vcmp.gt(v0.hf,v1.hf)200; CHECK-NEXT:    }201; CHECK-NEXT:    {202; CHECK-NEXT:     v0 = vmux(q0,v0,v1)203; CHECK-NEXT:     jumpr r31204; CHECK-NEXT:    }205  %q0 = fcmp ogt <64 x half> %v0, %v1206  %q1 = trunc <64 x i16> %v2 to <64 x i1>207  %q2 = or <64 x i1> %q0, %q1208  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1209  ret <64 x half> %t1210}211 212define <64 x half> @test_0f(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {213; CHECK-LABEL: test_0f:214; CHECK:       // %bb.0:215; CHECK-NEXT:    {216; CHECK-NEXT:     r0 = ##16843009217; CHECK-NEXT:    }218; CHECK-NEXT:    {219; CHECK-NEXT:     q0 = vand(v2,r0)220; CHECK-NEXT:    }221; CHECK-NEXT:    {222; CHECK-NEXT:     q0 ^= vcmp.gt(v0.hf,v1.hf)223; CHECK-NEXT:    }224; CHECK-NEXT:    {225; CHECK-NEXT:     v0 = vmux(q0,v0,v1)226; CHECK-NEXT:     jumpr r31227; CHECK-NEXT:    }228  %q0 = fcmp ogt <64 x half> %v0, %v1229  %q1 = trunc <64 x i16> %v2 to <64 x i1>230  %q2 = xor <64 x i1> %q0, %q1231  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1232  ret <64 x half> %t1233}234 235 236; --- Single237 238define <32 x float> @test_10(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {239; CHECK-LABEL: test_10:240; CHECK:       // %bb.0:241; CHECK-NEXT:    {242; CHECK-NEXT:     q0 = vcmp.eq(v0.w,v1.w)243; CHECK-NEXT:    }244; CHECK-NEXT:    {245; CHECK-NEXT:     v0 = vmux(q0,v1,v2)246; CHECK-NEXT:     jumpr r31247; CHECK-NEXT:    }248  %t0 = fcmp oeq <32 x float> %v0, %v1249  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2250  ret <32 x float> %t1251}252 253define <32 x float> @test_11(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {254; CHECK-LABEL: test_11:255; CHECK:       // %bb.0:256; CHECK-NEXT:    {257; CHECK-NEXT:     q0 = vcmp.eq(v0.w,v1.w)258; CHECK-NEXT:    }259; CHECK-NEXT:    {260; CHECK-NEXT:     v0 = vmux(q0,v2,v1)261; CHECK-NEXT:     jumpr r31262; CHECK-NEXT:    }263  %t0 = fcmp one <32 x float> %v0, %v1264  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2265  ret <32 x float> %t1266}267 268define <32 x float> @test_12(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {269; CHECK-LABEL: test_12:270; CHECK:       // %bb.0:271; CHECK-NEXT:    {272; CHECK-NEXT:     q0 = vcmp.gt(v1.sf,v0.sf)273; CHECK-NEXT:    }274; CHECK-NEXT:    {275; CHECK-NEXT:     v0 = vmux(q0,v1,v2)276; CHECK-NEXT:     jumpr r31277; CHECK-NEXT:    }278  %t0 = fcmp olt <32 x float> %v0, %v1279  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2280  ret <32 x float> %t1281}282 283define <32 x float> @test_13(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {284; CHECK-LABEL: test_13:285; CHECK:       // %bb.0:286; CHECK-NEXT:    {287; CHECK-NEXT:     q0 = vcmp.gt(v0.sf,v1.sf)288; CHECK-NEXT:    }289; CHECK-NEXT:    {290; CHECK-NEXT:     v0 = vmux(q0,v2,v1)291; CHECK-NEXT:     jumpr r31292; CHECK-NEXT:    }293  %t0 = fcmp ole <32 x float> %v0, %v1294  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2295  ret <32 x float> %t1296}297 298define <32 x float> @test_14(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {299; CHECK-LABEL: test_14:300; CHECK:       // %bb.0:301; CHECK-NEXT:    {302; CHECK-NEXT:     q0 = vcmp.gt(v0.sf,v1.sf)303; CHECK-NEXT:    }304; CHECK-NEXT:    {305; CHECK-NEXT:     v0 = vmux(q0,v1,v2)306; CHECK-NEXT:     jumpr r31307; CHECK-NEXT:    }308  %t0 = fcmp ogt <32 x float> %v0, %v1309  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2310  ret <32 x float> %t1311}312 313define <32 x float> @test_15(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {314; CHECK-LABEL: test_15:315; CHECK:       // %bb.0:316; CHECK-NEXT:    {317; CHECK-NEXT:     q0 = vcmp.gt(v1.sf,v0.sf)318; CHECK-NEXT:    }319; CHECK-NEXT:    {320; CHECK-NEXT:     v0 = vmux(q0,v2,v1)321; CHECK-NEXT:     jumpr r31322; CHECK-NEXT:    }323  %t0 = fcmp oge <32 x float> %v0, %v1324  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2325  ret <32 x float> %t1326}327 328define <32 x float> @test_1a(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {329; CHECK-LABEL: test_1a:330; CHECK:       // %bb.0:331; CHECK-NEXT:    {332; CHECK-NEXT:     r0 = ##16843009333; CHECK-NEXT:    }334; CHECK-NEXT:    {335; CHECK-NEXT:     q0 = vand(v2,r0)336; CHECK-NEXT:    }337; CHECK-NEXT:    {338; CHECK-NEXT:     q0 &= vcmp.eq(v0.w,v1.w)339; CHECK-NEXT:    }340; CHECK-NEXT:    {341; CHECK-NEXT:     v0 = vmux(q0,v0,v1)342; CHECK-NEXT:     jumpr r31343; CHECK-NEXT:    }344  %q0 = fcmp oeq <32 x float> %v0, %v1345  %q1 = trunc <32 x i32> %v2 to <32 x i1>346  %q2 = and <32 x i1> %q0, %q1347  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1348  ret <32 x float> %t1349}350 351define <32 x float> @test_1b(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {352; CHECK-LABEL: test_1b:353; CHECK:       // %bb.0:354; CHECK-NEXT:    {355; CHECK-NEXT:     r0 = ##16843009356; CHECK-NEXT:    }357; CHECK-NEXT:    {358; CHECK-NEXT:     q0 = vand(v2,r0)359; CHECK-NEXT:    }360; CHECK-NEXT:    {361; CHECK-NEXT:     q0 |= vcmp.eq(v0.w,v1.w)362; CHECK-NEXT:    }363; CHECK-NEXT:    {364; CHECK-NEXT:     v0 = vmux(q0,v0,v1)365; CHECK-NEXT:     jumpr r31366; CHECK-NEXT:    }367  %q0 = fcmp oeq <32 x float> %v0, %v1368  %q1 = trunc <32 x i32> %v2 to <32 x i1>369  %q2 = or <32 x i1> %q0, %q1370  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1371  ret <32 x float> %t1372}373 374define <32 x float> @test_1c(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {375; CHECK-LABEL: test_1c:376; CHECK:       // %bb.0:377; CHECK-NEXT:    {378; CHECK-NEXT:     r0 = ##16843009379; CHECK-NEXT:    }380; CHECK-NEXT:    {381; CHECK-NEXT:     q0 = vand(v2,r0)382; CHECK-NEXT:    }383; CHECK-NEXT:    {384; CHECK-NEXT:     q0 ^= vcmp.eq(v0.w,v1.w)385; CHECK-NEXT:    }386; CHECK-NEXT:    {387; CHECK-NEXT:     v0 = vmux(q0,v0,v1)388; CHECK-NEXT:     jumpr r31389; CHECK-NEXT:    }390  %q0 = fcmp oeq <32 x float> %v0, %v1391  %q1 = trunc <32 x i32> %v2 to <32 x i1>392  %q2 = xor <32 x i1> %q0, %q1393  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1394  ret <32 x float> %t1395}396 397define <32 x float> @test_1d(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {398; CHECK-LABEL: test_1d:399; CHECK:       // %bb.0:400; CHECK-NEXT:    {401; CHECK-NEXT:     r0 = ##16843009402; CHECK-NEXT:    }403; CHECK-NEXT:    {404; CHECK-NEXT:     q0 = vand(v2,r0)405; CHECK-NEXT:    }406; CHECK-NEXT:    {407; CHECK-NEXT:     q0 &= vcmp.gt(v0.sf,v1.sf)408; CHECK-NEXT:    }409; CHECK-NEXT:    {410; CHECK-NEXT:     v0 = vmux(q0,v0,v1)411; CHECK-NEXT:     jumpr r31412; CHECK-NEXT:    }413  %q0 = fcmp ogt <32 x float> %v0, %v1414  %q1 = trunc <32 x i32> %v2 to <32 x i1>415  %q2 = and <32 x i1> %q0, %q1416  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1417  ret <32 x float> %t1418}419 420define <32 x float> @test_1e(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {421; CHECK-LABEL: test_1e:422; CHECK:       // %bb.0:423; CHECK-NEXT:    {424; CHECK-NEXT:     r0 = ##16843009425; CHECK-NEXT:    }426; CHECK-NEXT:    {427; CHECK-NEXT:     q0 = vand(v2,r0)428; CHECK-NEXT:    }429; CHECK-NEXT:    {430; CHECK-NEXT:     q0 |= vcmp.gt(v0.sf,v1.sf)431; CHECK-NEXT:    }432; CHECK-NEXT:    {433; CHECK-NEXT:     v0 = vmux(q0,v0,v1)434; CHECK-NEXT:     jumpr r31435; CHECK-NEXT:    }436  %q0 = fcmp ogt <32 x float> %v0, %v1437  %q1 = trunc <32 x i32> %v2 to <32 x i1>438  %q2 = or <32 x i1> %q0, %q1439  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1440  ret <32 x float> %t1441}442 443define <32 x float> @test_1f(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {444; CHECK-LABEL: test_1f:445; CHECK:       // %bb.0:446; CHECK-NEXT:    {447; CHECK-NEXT:     r0 = ##16843009448; CHECK-NEXT:    }449; CHECK-NEXT:    {450; CHECK-NEXT:     q0 = vand(v2,r0)451; CHECK-NEXT:    }452; CHECK-NEXT:    {453; CHECK-NEXT:     q0 ^= vcmp.gt(v0.sf,v1.sf)454; CHECK-NEXT:    }455; CHECK-NEXT:    {456; CHECK-NEXT:     v0 = vmux(q0,v0,v1)457; CHECK-NEXT:     jumpr r31458; CHECK-NEXT:    }459  %q0 = fcmp ogt <32 x float> %v0, %v1460  %q1 = trunc <32 x i32> %v2 to <32 x i1>461  %q2 = xor <32 x i1> %q0, %q1462  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1463  ret <32 x float> %t1464}465 466attributes #0 = { nounwind readnone "target-cpu"="hexagonv69" }467