578 lines · plain
1; RUN: llc -mtriple=hexagon < %s | FileCheck %s2 3; --- Byte4 5; CHECK-LABEL: test_00:6; CHECK: q[[Q000:[0-3]]] = vcmp.eq(v0.b,v1.b)7; CHECK: v0 = vmux(q[[Q000]],v1,v2)8define <64 x i8> @test_00(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {9 %t0 = icmp eq <64 x i8> %v0, %v110 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v211 ret <64 x i8> %t112}13 14; CHECK-LABEL: test_01:15; CHECK: q[[Q010:[0-3]]] = vcmp.eq(v0.b,v1.b)16; CHECK: v0 = vmux(q[[Q010]],v2,v1)17define <64 x i8> @test_01(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {18 %t0 = icmp ne <64 x i8> %v0, %v119 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v220 ret <64 x i8> %t121}22 23; CHECK-LABEL: test_02:24; CHECK: q[[Q020:[0-3]]] = vcmp.gt(v1.b,v0.b)25; CHECK: v0 = vmux(q[[Q020]],v1,v2)26define <64 x i8> @test_02(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {27 %t0 = icmp slt <64 x i8> %v0, %v128 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v229 ret <64 x i8> %t130}31 32; CHECK-LABEL: test_03:33; CHECK: q[[Q030:[0-3]]] = vcmp.gt(v0.b,v1.b)34; CHECK: v0 = vmux(q[[Q030]],v2,v1)35define <64 x i8> @test_03(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {36 %t0 = icmp sle <64 x i8> %v0, %v137 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v238 ret <64 x i8> %t139}40 41; CHECK-LABEL: test_04:42; CHECK: q[[Q040:[0-3]]] = vcmp.gt(v0.b,v1.b)43; CHECK: v0 = vmux(q[[Q040]],v1,v2)44define <64 x i8> @test_04(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {45 %t0 = icmp sgt <64 x i8> %v0, %v146 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v247 ret <64 x i8> %t148}49 50; CHECK-LABEL: test_05:51; CHECK: q[[Q050:[0-3]]] = vcmp.gt(v1.b,v0.b)52; CHECK: v0 = vmux(q[[Q050]],v2,v1)53define <64 x i8> @test_05(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {54 %t0 = icmp sge <64 x i8> %v0, %v155 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v256 ret <64 x i8> %t157}58 59; CHECK-LABEL: test_06:60; CHECK: q[[Q060:[0-3]]] = vcmp.gt(v1.ub,v0.ub)61; CHECK: v0 = vmux(q[[Q060]],v1,v2)62define <64 x i8> @test_06(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {63 %t0 = icmp ult <64 x i8> %v0, %v164 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v265 ret <64 x i8> %t166}67 68; CHECK-LABEL: test_07:69; CHECK: q[[Q070:[0-3]]] = vcmp.gt(v0.ub,v1.ub)70; CHECK: v0 = vmux(q[[Q070]],v2,v1)71define <64 x i8> @test_07(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {72 %t0 = icmp ule <64 x i8> %v0, %v173 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v274 ret <64 x i8> %t175}76 77; CHECK-LABEL: test_08:78; CHECK: q[[Q080:[0-3]]] = vcmp.gt(v0.ub,v1.ub)79; CHECK: v0 = vmux(q[[Q080]],v1,v2)80define <64 x i8> @test_08(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {81 %t0 = icmp ugt <64 x i8> %v0, %v182 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v283 ret <64 x i8> %t184}85 86; CHECK-LABEL: test_09:87; CHECK: q[[Q090:[0-3]]] = vcmp.gt(v1.ub,v0.ub)88; CHECK: v0 = vmux(q[[Q090]],v2,v1)89define <64 x i8> @test_09(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {90 %t0 = icmp uge <64 x i8> %v0, %v191 %t1 = select <64 x i1> %t0, <64 x i8> %v1, <64 x i8> %v292 ret <64 x i8> %t193}94 95; CHECK-LABEL: test_0a:96; CHECK: q[[Q0A0:[0-3]]] &= vcmp.eq(v0.b,v1.b)97; CHECK: v0 = vmux(q[[Q0A0]],v0,v1)98define <64 x i8> @test_0a(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {99 %q0 = icmp eq <64 x i8> %v0, %v1100 %q1 = trunc <64 x i8> %v2 to <64 x i1>101 %q2 = and <64 x i1> %q0, %q1102 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1103 ret <64 x i8> %t1104}105 106; CHECK-LABEL: test_0b:107; CHECK: q[[Q0B0:[0-3]]] |= vcmp.eq(v0.b,v1.b)108; CHECK: v0 = vmux(q[[Q0B0]],v0,v1)109define <64 x i8> @test_0b(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {110 %q0 = icmp eq <64 x i8> %v0, %v1111 %q1 = trunc <64 x i8> %v2 to <64 x i1>112 %q2 = or <64 x i1> %q0, %q1113 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1114 ret <64 x i8> %t1115}116 117; CHECK-LABEL: test_0c:118; CHECK: q[[Q0C0:[0-3]]] ^= vcmp.eq(v0.b,v1.b)119; CHECK: v0 = vmux(q[[Q0C0]],v0,v1)120define <64 x i8> @test_0c(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {121 %q0 = icmp eq <64 x i8> %v0, %v1122 %q1 = trunc <64 x i8> %v2 to <64 x i1>123 %q2 = xor <64 x i1> %q0, %q1124 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1125 ret <64 x i8> %t1126}127 128; CHECK-LABEL: test_0d:129; CHECK: q[[Q0D0:[0-3]]] &= vcmp.gt(v0.b,v1.b)130; CHECK: v0 = vmux(q[[Q0D0]],v0,v1)131define <64 x i8> @test_0d(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {132 %q0 = icmp sgt <64 x i8> %v0, %v1133 %q1 = trunc <64 x i8> %v2 to <64 x i1>134 %q2 = and <64 x i1> %q0, %q1135 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1136 ret <64 x i8> %t1137}138 139; CHECK-LABEL: test_0e:140; CHECK: q[[Q0E0:[0-3]]] |= vcmp.gt(v0.b,v1.b)141; CHECK: v0 = vmux(q[[Q0E0]],v0,v1)142define <64 x i8> @test_0e(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {143 %q0 = icmp sgt <64 x i8> %v0, %v1144 %q1 = trunc <64 x i8> %v2 to <64 x i1>145 %q2 = or <64 x i1> %q0, %q1146 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1147 ret <64 x i8> %t1148}149 150; CHECK-LABEL: test_0f:151; CHECK: q[[Q0F0:[0-3]]] ^= vcmp.gt(v0.b,v1.b)152; CHECK: v0 = vmux(q[[Q0F0]],v0,v1)153define <64 x i8> @test_0f(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {154 %q0 = icmp sgt <64 x i8> %v0, %v1155 %q1 = trunc <64 x i8> %v2 to <64 x i1>156 %q2 = xor <64 x i1> %q0, %q1157 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1158 ret <64 x i8> %t1159}160 161; CHECK-LABEL: test_0g:162; CHECK: q[[Q0G0:[0-3]]] &= vcmp.gt(v0.ub,v1.ub)163; CHECK: v0 = vmux(q[[Q0G0]],v0,v1)164define <64 x i8> @test_0g(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {165 %q0 = icmp ugt <64 x i8> %v0, %v1166 %q1 = trunc <64 x i8> %v2 to <64 x i1>167 %q2 = and <64 x i1> %q0, %q1168 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1169 ret <64 x i8> %t1170}171 172; CHECK-LABEL: test_0h:173; CHECK: q[[Q0H0:[0-3]]] |= vcmp.gt(v0.ub,v1.ub)174; CHECK: v0 = vmux(q[[Q0H0]],v0,v1)175define <64 x i8> @test_0h(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {176 %q0 = icmp ugt <64 x i8> %v0, %v1177 %q1 = trunc <64 x i8> %v2 to <64 x i1>178 %q2 = or <64 x i1> %q0, %q1179 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1180 ret <64 x i8> %t1181}182 183; CHECK-LABEL: test_0i:184; CHECK: q[[Q0I0:[0-3]]] ^= vcmp.gt(v0.ub,v1.ub)185; CHECK: v0 = vmux(q[[Q0I0]],v0,v1)186define <64 x i8> @test_0i(<64 x i8> %v0, <64 x i8> %v1, <64 x i8> %v2) #0 {187 %q0 = icmp ugt <64 x i8> %v0, %v1188 %q1 = trunc <64 x i8> %v2 to <64 x i1>189 %q2 = xor <64 x i1> %q0, %q1190 %t1 = select <64 x i1> %q2, <64 x i8> %v0, <64 x i8> %v1191 ret <64 x i8> %t1192}193 194 195; --- Half196 197; CHECK-LABEL: test_10:198; CHECK: q[[Q100:[0-3]]] = vcmp.eq(v0.h,v1.h)199; CHECK: v0 = vmux(q[[Q100]],v1,v2)200define <32 x i16> @test_10(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {201 %t0 = icmp eq <32 x i16> %v0, %v1202 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2203 ret <32 x i16> %t1204}205 206; CHECK-LABEL: test_11:207; CHECK: q[[Q110:[0-3]]] = vcmp.eq(v0.h,v1.h)208; CHECK: v0 = vmux(q[[Q110]],v2,v1)209define <32 x i16> @test_11(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {210 %t0 = icmp ne <32 x i16> %v0, %v1211 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2212 ret <32 x i16> %t1213}214 215; CHECK-LABEL: test_12:216; CHECK: q[[Q120:[0-3]]] = vcmp.gt(v1.h,v0.h)217; CHECK: v0 = vmux(q[[Q120]],v1,v2)218define <32 x i16> @test_12(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {219 %t0 = icmp slt <32 x i16> %v0, %v1220 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2221 ret <32 x i16> %t1222}223 224; CHECK-LABEL: test_13:225; CHECK: q[[Q130:[0-3]]] = vcmp.gt(v0.h,v1.h)226; CHECK: v0 = vmux(q[[Q130]],v2,v1)227define <32 x i16> @test_13(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {228 %t0 = icmp sle <32 x i16> %v0, %v1229 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2230 ret <32 x i16> %t1231}232 233; CHECK-LABEL: test_14:234; CHECK: q[[Q140:[0-3]]] = vcmp.gt(v0.h,v1.h)235; CHECK: v0 = vmux(q[[Q140]],v1,v2)236define <32 x i16> @test_14(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {237 %t0 = icmp sgt <32 x i16> %v0, %v1238 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2239 ret <32 x i16> %t1240}241 242; CHECK-LABEL: test_15:243; CHECK: q[[Q150:[0-3]]] = vcmp.gt(v1.h,v0.h)244; CHECK: v0 = vmux(q[[Q150]],v2,v1)245define <32 x i16> @test_15(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {246 %t0 = icmp sge <32 x i16> %v0, %v1247 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2248 ret <32 x i16> %t1249}250 251; CHECK-LABEL: test_16:252; CHECK: q[[Q160:[0-3]]] = vcmp.gt(v1.uh,v0.uh)253; CHECK: v0 = vmux(q[[Q160]],v1,v2)254define <32 x i16> @test_16(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {255 %t0 = icmp ult <32 x i16> %v0, %v1256 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2257 ret <32 x i16> %t1258}259 260; CHECK-LABEL: test_17:261; CHECK: q[[Q170:[0-3]]] = vcmp.gt(v0.uh,v1.uh)262; CHECK: v0 = vmux(q[[Q170]],v2,v1)263define <32 x i16> @test_17(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {264 %t0 = icmp ule <32 x i16> %v0, %v1265 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2266 ret <32 x i16> %t1267}268 269; CHECK-LABEL: test_18:270; CHECK: q[[Q180:[0-3]]] = vcmp.gt(v0.uh,v1.uh)271; CHECK: v0 = vmux(q[[Q180]],v1,v2)272define <32 x i16> @test_18(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {273 %t0 = icmp ugt <32 x i16> %v0, %v1274 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2275 ret <32 x i16> %t1276}277 278; CHECK-LABEL: test_19:279; CHECK: q[[Q190:[0-3]]] = vcmp.gt(v1.uh,v0.uh)280; CHECK: v0 = vmux(q[[Q190]],v2,v1)281define <32 x i16> @test_19(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {282 %t0 = icmp uge <32 x i16> %v0, %v1283 %t1 = select <32 x i1> %t0, <32 x i16> %v1, <32 x i16> %v2284 ret <32 x i16> %t1285}286 287; CHECK-LABEL: test_1a:288; CHECK: q[[Q1A0:[0-3]]] &= vcmp.eq(v0.h,v1.h)289; CHECK: v0 = vmux(q[[Q1A0]],v0,v1)290define <32 x i16> @test_1a(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {291 %q0 = icmp eq <32 x i16> %v0, %v1292 %q1 = trunc <32 x i16> %v2 to <32 x i1>293 %q2 = and <32 x i1> %q0, %q1294 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1295 ret <32 x i16> %t1296}297 298; CHECK-LABEL: test_1b:299; CHECK: q[[Q1B0:[0-3]]] |= vcmp.eq(v0.h,v1.h)300; CHECK: v0 = vmux(q[[Q1B0]],v0,v1)301define <32 x i16> @test_1b(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {302 %q0 = icmp eq <32 x i16> %v0, %v1303 %q1 = trunc <32 x i16> %v2 to <32 x i1>304 %q2 = or <32 x i1> %q0, %q1305 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1306 ret <32 x i16> %t1307}308 309; CHECK-LABEL: test_1c:310; CHECK: q[[Q1C0:[0-3]]] ^= vcmp.eq(v0.h,v1.h)311; CHECK: v0 = vmux(q[[Q1C0]],v0,v1)312define <32 x i16> @test_1c(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {313 %q0 = icmp eq <32 x i16> %v0, %v1314 %q1 = trunc <32 x i16> %v2 to <32 x i1>315 %q2 = xor <32 x i1> %q0, %q1316 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1317 ret <32 x i16> %t1318}319 320; CHECK-LABEL: test_1d:321; CHECK: q[[Q1D0:[0-3]]] &= vcmp.gt(v0.h,v1.h)322; CHECK: v0 = vmux(q[[Q1D0]],v0,v1)323define <32 x i16> @test_1d(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {324 %q0 = icmp sgt <32 x i16> %v0, %v1325 %q1 = trunc <32 x i16> %v2 to <32 x i1>326 %q2 = and <32 x i1> %q0, %q1327 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1328 ret <32 x i16> %t1329}330 331; CHECK-LABEL: test_1e:332; CHECK: q[[Q1E0:[0-3]]] |= vcmp.gt(v0.h,v1.h)333; CHECK: v0 = vmux(q[[Q1E0]],v0,v1)334define <32 x i16> @test_1e(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {335 %q0 = icmp sgt <32 x i16> %v0, %v1336 %q1 = trunc <32 x i16> %v2 to <32 x i1>337 %q2 = or <32 x i1> %q0, %q1338 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1339 ret <32 x i16> %t1340}341 342; CHECK-LABEL: test_1f:343; CHECK: q[[Q1F0:[0-3]]] ^= vcmp.gt(v0.h,v1.h)344; CHECK: v0 = vmux(q[[Q1F0]],v0,v1)345define <32 x i16> @test_1f(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {346 %q0 = icmp sgt <32 x i16> %v0, %v1347 %q1 = trunc <32 x i16> %v2 to <32 x i1>348 %q2 = xor <32 x i1> %q0, %q1349 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1350 ret <32 x i16> %t1351}352 353; CHECK-LABEL: test_1g:354; CHECK: q[[Q1G0:[0-3]]] &= vcmp.gt(v0.uh,v1.uh)355; CHECK: v0 = vmux(q[[Q1G0]],v0,v1)356define <32 x i16> @test_1g(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {357 %q0 = icmp ugt <32 x i16> %v0, %v1358 %q1 = trunc <32 x i16> %v2 to <32 x i1>359 %q2 = and <32 x i1> %q0, %q1360 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1361 ret <32 x i16> %t1362}363 364; CHECK-LABEL: test_1h:365; CHECK: q[[Q1H0:[0-3]]] |= vcmp.gt(v0.uh,v1.uh)366; CHECK: v0 = vmux(q[[Q1H0]],v0,v1)367define <32 x i16> @test_1h(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {368 %q0 = icmp ugt <32 x i16> %v0, %v1369 %q1 = trunc <32 x i16> %v2 to <32 x i1>370 %q2 = or <32 x i1> %q0, %q1371 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1372 ret <32 x i16> %t1373}374 375; CHECK-LABEL: test_1i:376; CHECK: q[[Q1I0:[0-3]]] ^= vcmp.gt(v0.uh,v1.uh)377; CHECK: v0 = vmux(q[[Q1I0]],v0,v1)378define <32 x i16> @test_1i(<32 x i16> %v0, <32 x i16> %v1, <32 x i16> %v2) #0 {379 %q0 = icmp ugt <32 x i16> %v0, %v1380 %q1 = trunc <32 x i16> %v2 to <32 x i1>381 %q2 = xor <32 x i1> %q0, %q1382 %t1 = select <32 x i1> %q2, <32 x i16> %v0, <32 x i16> %v1383 ret <32 x i16> %t1384}385 386; --- Word387 388; CHECK-LABEL: test_20:389; CHECK: q[[Q200:[0-3]]] = vcmp.eq(v0.w,v1.w)390; CHECK: v0 = vmux(q[[Q200]],v1,v2)391define <16 x i32> @test_20(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {392 %t0 = icmp eq <16 x i32> %v0, %v1393 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2394 ret <16 x i32> %t1395}396 397; CHECK-LABEL: test_21:398; CHECK: q[[Q210:[0-3]]] = vcmp.eq(v0.w,v1.w)399; CHECK: v0 = vmux(q[[Q210]],v2,v1)400define <16 x i32> @test_21(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {401 %t0 = icmp ne <16 x i32> %v0, %v1402 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2403 ret <16 x i32> %t1404}405 406; CHECK-LABEL: test_22:407; CHECK: q[[Q220:[0-3]]] = vcmp.gt(v1.w,v0.w)408; CHECK: v0 = vmux(q[[Q220]],v1,v2)409define <16 x i32> @test_22(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {410 %t0 = icmp slt <16 x i32> %v0, %v1411 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2412 ret <16 x i32> %t1413}414 415; CHECK-LABEL: test_23:416; CHECK: q[[Q230:[0-3]]] = vcmp.gt(v0.w,v1.w)417; CHECK: v0 = vmux(q[[Q230]],v2,v1)418define <16 x i32> @test_23(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {419 %t0 = icmp sle <16 x i32> %v0, %v1420 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2421 ret <16 x i32> %t1422}423 424; CHECK-LABEL: test_24:425; CHECK: q[[Q240:[0-3]]] = vcmp.gt(v0.w,v1.w)426; CHECK: v0 = vmux(q[[Q240]],v1,v2)427define <16 x i32> @test_24(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {428 %t0 = icmp sgt <16 x i32> %v0, %v1429 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2430 ret <16 x i32> %t1431}432 433; CHECK-LABEL: test_25:434; CHECK: q[[Q250:[0-3]]] = vcmp.gt(v1.w,v0.w)435; CHECK: v0 = vmux(q[[Q250]],v2,v1)436define <16 x i32> @test_25(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {437 %t0 = icmp sge <16 x i32> %v0, %v1438 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2439 ret <16 x i32> %t1440}441 442; CHECK-LABEL: test_26:443; CHECK: q[[Q260:[0-3]]] = vcmp.gt(v1.uw,v0.uw)444; CHECK: v0 = vmux(q[[Q260]],v1,v2)445define <16 x i32> @test_26(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {446 %t0 = icmp ult <16 x i32> %v0, %v1447 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2448 ret <16 x i32> %t1449}450 451; CHECK-LABEL: test_27:452; CHECK: q[[Q270:[0-3]]] = vcmp.gt(v0.uw,v1.uw)453; CHECK: v0 = vmux(q[[Q270]],v2,v1)454define <16 x i32> @test_27(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {455 %t0 = icmp ule <16 x i32> %v0, %v1456 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2457 ret <16 x i32> %t1458}459 460; CHECK-LABEL: test_28:461; CHECK: q[[Q280:[0-3]]] = vcmp.gt(v0.uw,v1.uw)462; CHECK: v0 = vmux(q[[Q280]],v1,v2)463define <16 x i32> @test_28(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {464 %t0 = icmp ugt <16 x i32> %v0, %v1465 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2466 ret <16 x i32> %t1467}468 469; CHECK-LABEL: test_29:470; CHECK: q[[Q290:[0-3]]] = vcmp.gt(v1.uw,v0.uw)471; CHECK: v0 = vmux(q[[Q290]],v2,v1)472define <16 x i32> @test_29(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {473 %t0 = icmp uge <16 x i32> %v0, %v1474 %t1 = select <16 x i1> %t0, <16 x i32> %v1, <16 x i32> %v2475 ret <16 x i32> %t1476}477 478; CHECK-LABEL: test_2a:479; CHECK: q[[Q2A0:[0-3]]] &= vcmp.eq(v0.w,v1.w)480; CHECK: v0 = vmux(q[[Q2A0]],v0,v1)481define <16 x i32> @test_2a(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {482 %q0 = icmp eq <16 x i32> %v0, %v1483 %q1 = trunc <16 x i32> %v2 to <16 x i1>484 %q2 = and <16 x i1> %q0, %q1485 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1486 ret <16 x i32> %t1487}488 489; CHECK-LABEL: test_2b:490; CHECK: q[[Q2B0:[0-3]]] |= vcmp.eq(v0.w,v1.w)491; CHECK: v0 = vmux(q[[Q2B0]],v0,v1)492define <16 x i32> @test_2b(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {493 %q0 = icmp eq <16 x i32> %v0, %v1494 %q1 = trunc <16 x i32> %v2 to <16 x i1>495 %q2 = or <16 x i1> %q0, %q1496 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1497 ret <16 x i32> %t1498}499 500; CHECK-LABEL: test_2c:501; CHECK: q[[Q2C0:[0-3]]] ^= vcmp.eq(v0.w,v1.w)502; CHECK: v0 = vmux(q[[Q2C0]],v0,v1)503define <16 x i32> @test_2c(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {504 %q0 = icmp eq <16 x i32> %v0, %v1505 %q1 = trunc <16 x i32> %v2 to <16 x i1>506 %q2 = xor <16 x i1> %q0, %q1507 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1508 ret <16 x i32> %t1509}510 511; CHECK-LABEL: test_2d:512; CHECK: q[[Q2D0:[0-3]]] &= vcmp.gt(v0.w,v1.w)513; CHECK: v0 = vmux(q[[Q2D0]],v0,v1)514define <16 x i32> @test_2d(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {515 %q0 = icmp sgt <16 x i32> %v0, %v1516 %q1 = trunc <16 x i32> %v2 to <16 x i1>517 %q2 = and <16 x i1> %q0, %q1518 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1519 ret <16 x i32> %t1520}521 522; CHECK-LABEL: test_2e:523; CHECK: q[[Q2E0:[0-3]]] |= vcmp.gt(v0.w,v1.w)524; CHECK: v0 = vmux(q[[Q2E0]],v0,v1)525define <16 x i32> @test_2e(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {526 %q0 = icmp sgt <16 x i32> %v0, %v1527 %q1 = trunc <16 x i32> %v2 to <16 x i1>528 %q2 = or <16 x i1> %q0, %q1529 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1530 ret <16 x i32> %t1531}532 533; CHECK-LABEL: test_2f:534; CHECK: q[[Q2F0:[0-3]]] ^= vcmp.gt(v0.w,v1.w)535; CHECK: v0 = vmux(q[[Q2F0]],v0,v1)536define <16 x i32> @test_2f(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {537 %q0 = icmp sgt <16 x i32> %v0, %v1538 %q1 = trunc <16 x i32> %v2 to <16 x i1>539 %q2 = xor <16 x i1> %q0, %q1540 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1541 ret <16 x i32> %t1542}543 544; CHECK-LABEL: test_2g:545; CHECK: q[[Q2G0:[0-3]]] &= vcmp.gt(v0.uw,v1.uw)546; CHECK: v0 = vmux(q[[Q2G0]],v0,v1)547define <16 x i32> @test_2g(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {548 %q0 = icmp ugt <16 x i32> %v0, %v1549 %q1 = trunc <16 x i32> %v2 to <16 x i1>550 %q2 = and <16 x i1> %q0, %q1551 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1552 ret <16 x i32> %t1553}554 555; CHECK-LABEL: test_2h:556; CHECK: q[[Q2H0:[0-3]]] |= vcmp.gt(v0.uw,v1.uw)557; CHECK: v0 = vmux(q[[Q2H0]],v0,v1)558define <16 x i32> @test_2h(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {559 %q0 = icmp ugt <16 x i32> %v0, %v1560 %q1 = trunc <16 x i32> %v2 to <16 x i1>561 %q2 = or <16 x i1> %q0, %q1562 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1563 ret <16 x i32> %t1564}565 566; CHECK-LABEL: test_2i:567; CHECK: q[[Q2I0:[0-3]]] ^= vcmp.gt(v0.uw,v1.uw)568; CHECK: v0 = vmux(q[[Q2I0]],v0,v1)569define <16 x i32> @test_2i(<16 x i32> %v0, <16 x i32> %v1, <16 x i32> %v2) #0 {570 %q0 = icmp ugt <16 x i32> %v0, %v1571 %q1 = trunc <16 x i32> %v2 to <16 x i1>572 %q2 = xor <16 x i1> %q0, %q1573 %t1 = select <16 x i1> %q2, <16 x i32> %v0, <16 x i32> %v1574 ret <16 x i32> %t1575}576 577attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length64b" }578