577 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 <128 x i8> @test_00(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {9 %t0 = icmp eq <128 x i8> %v0, %v110 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v211 ret <128 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 <128 x i8> @test_01(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {18 %t0 = icmp ne <128 x i8> %v0, %v119 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v220 ret <128 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 <128 x i8> @test_02(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {27 %t0 = icmp slt <128 x i8> %v0, %v128 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v229 ret <128 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 <128 x i8> @test_03(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {36 %t0 = icmp sle <128 x i8> %v0, %v137 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v238 ret <128 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 <128 x i8> @test_04(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {45 %t0 = icmp sgt <128 x i8> %v0, %v146 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v247 ret <128 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 <128 x i8> @test_05(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {54 %t0 = icmp sge <128 x i8> %v0, %v155 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v256 ret <128 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 <128 x i8> @test_06(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {63 %t0 = icmp ult <128 x i8> %v0, %v164 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v265 ret <128 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 <128 x i8> @test_07(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {72 %t0 = icmp ule <128 x i8> %v0, %v173 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v274 ret <128 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 <128 x i8> @test_08(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {81 %t0 = icmp ugt <128 x i8> %v0, %v182 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v283 ret <128 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 <128 x i8> @test_09(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {90 %t0 = icmp uge <128 x i8> %v0, %v191 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v292 ret <128 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 <128 x i8> @test_0a(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {99 %q0 = icmp eq <128 x i8> %v0, %v1100 %q1 = trunc <128 x i8> %v2 to <128 x i1>101 %q2 = and <128 x i1> %q0, %q1102 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1103 ret <128 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 <128 x i8> @test_0b(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {110 %q0 = icmp eq <128 x i8> %v0, %v1111 %q1 = trunc <128 x i8> %v2 to <128 x i1>112 %q2 = or <128 x i1> %q0, %q1113 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1114 ret <128 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 <128 x i8> @test_0c(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {121 %q0 = icmp eq <128 x i8> %v0, %v1122 %q1 = trunc <128 x i8> %v2 to <128 x i1>123 %q2 = xor <128 x i1> %q0, %q1124 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1125 ret <128 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 <128 x i8> @test_0d(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {132 %q0 = icmp sgt <128 x i8> %v0, %v1133 %q1 = trunc <128 x i8> %v2 to <128 x i1>134 %q2 = and <128 x i1> %q0, %q1135 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1136 ret <128 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 <128 x i8> @test_0e(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {143 %q0 = icmp sgt <128 x i8> %v0, %v1144 %q1 = trunc <128 x i8> %v2 to <128 x i1>145 %q2 = or <128 x i1> %q0, %q1146 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1147 ret <128 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 <128 x i8> @test_0f(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {154 %q0 = icmp sgt <128 x i8> %v0, %v1155 %q1 = trunc <128 x i8> %v2 to <128 x i1>156 %q2 = xor <128 x i1> %q0, %q1157 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1158 ret <128 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 <128 x i8> @test_0g(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {165 %q0 = icmp ugt <128 x i8> %v0, %v1166 %q1 = trunc <128 x i8> %v2 to <128 x i1>167 %q2 = and <128 x i1> %q0, %q1168 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1169 ret <128 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 <128 x i8> @test_0h(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {176 %q0 = icmp ugt <128 x i8> %v0, %v1177 %q1 = trunc <128 x i8> %v2 to <128 x i1>178 %q2 = or <128 x i1> %q0, %q1179 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1180 ret <128 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 <128 x i8> @test_0i(<128 x i8> %v0, <128 x i8> %v1, <128 x i8> %v2) #0 {187 %q0 = icmp ugt <128 x i8> %v0, %v1188 %q1 = trunc <128 x i8> %v2 to <128 x i1>189 %q2 = xor <128 x i1> %q0, %q1190 %t1 = select <128 x i1> %q2, <128 x i8> %v0, <128 x i8> %v1191 ret <128 x i8> %t1192}193 194; --- Half195 196; CHECK-LABEL: test_10:197; CHECK: q[[Q100:[0-3]]] = vcmp.eq(v0.h,v1.h)198; CHECK: v0 = vmux(q[[Q100]],v1,v2)199define <64 x i16> @test_10(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {200 %t0 = icmp eq <64 x i16> %v0, %v1201 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2202 ret <64 x i16> %t1203}204 205; CHECK-LABEL: test_11:206; CHECK: q[[Q110:[0-3]]] = vcmp.eq(v0.h,v1.h)207; CHECK: v0 = vmux(q[[Q110]],v2,v1)208define <64 x i16> @test_11(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {209 %t0 = icmp ne <64 x i16> %v0, %v1210 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2211 ret <64 x i16> %t1212}213 214; CHECK-LABEL: test_12:215; CHECK: q[[Q120:[0-3]]] = vcmp.gt(v1.h,v0.h)216; CHECK: v0 = vmux(q[[Q120]],v1,v2)217define <64 x i16> @test_12(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {218 %t0 = icmp slt <64 x i16> %v0, %v1219 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2220 ret <64 x i16> %t1221}222 223; CHECK-LABEL: test_13:224; CHECK: q[[Q130:[0-3]]] = vcmp.gt(v0.h,v1.h)225; CHECK: v0 = vmux(q[[Q130]],v2,v1)226define <64 x i16> @test_13(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {227 %t0 = icmp sle <64 x i16> %v0, %v1228 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2229 ret <64 x i16> %t1230}231 232; CHECK-LABEL: test_14:233; CHECK: q[[Q140:[0-3]]] = vcmp.gt(v0.h,v1.h)234; CHECK: v0 = vmux(q[[Q140]],v1,v2)235define <64 x i16> @test_14(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {236 %t0 = icmp sgt <64 x i16> %v0, %v1237 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2238 ret <64 x i16> %t1239}240 241; CHECK-LABEL: test_15:242; CHECK: q[[Q150:[0-3]]] = vcmp.gt(v1.h,v0.h)243; CHECK: v0 = vmux(q[[Q150]],v2,v1)244define <64 x i16> @test_15(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {245 %t0 = icmp sge <64 x i16> %v0, %v1246 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2247 ret <64 x i16> %t1248}249 250; CHECK-LABEL: test_16:251; CHECK: q[[Q160:[0-3]]] = vcmp.gt(v1.uh,v0.uh)252; CHECK: v0 = vmux(q[[Q160]],v1,v2)253define <64 x i16> @test_16(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {254 %t0 = icmp ult <64 x i16> %v0, %v1255 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2256 ret <64 x i16> %t1257}258 259; CHECK-LABEL: test_17:260; CHECK: q[[Q170:[0-3]]] = vcmp.gt(v0.uh,v1.uh)261; CHECK: v0 = vmux(q[[Q170]],v2,v1)262define <64 x i16> @test_17(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {263 %t0 = icmp ule <64 x i16> %v0, %v1264 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2265 ret <64 x i16> %t1266}267 268; CHECK-LABEL: test_18:269; CHECK: q[[Q180:[0-3]]] = vcmp.gt(v0.uh,v1.uh)270; CHECK: v0 = vmux(q[[Q180]],v1,v2)271define <64 x i16> @test_18(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {272 %t0 = icmp ugt <64 x i16> %v0, %v1273 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2274 ret <64 x i16> %t1275}276 277; CHECK-LABEL: test_19:278; CHECK: q[[Q190:[0-3]]] = vcmp.gt(v1.uh,v0.uh)279; CHECK: v0 = vmux(q[[Q190]],v2,v1)280define <64 x i16> @test_19(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {281 %t0 = icmp uge <64 x i16> %v0, %v1282 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v2283 ret <64 x i16> %t1284}285 286; CHECK-LABEL: test_1a:287; CHECK: q[[Q1A0:[0-3]]] &= vcmp.eq(v0.h,v1.h)288; CHECK: v0 = vmux(q[[Q1A0]],v0,v1)289define <64 x i16> @test_1a(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {290 %q0 = icmp eq <64 x i16> %v0, %v1291 %q1 = trunc <64 x i16> %v2 to <64 x i1>292 %q2 = and <64 x i1> %q0, %q1293 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1294 ret <64 x i16> %t1295}296 297; CHECK-LABEL: test_1b:298; CHECK: q[[Q1B0:[0-3]]] |= vcmp.eq(v0.h,v1.h)299; CHECK: v0 = vmux(q[[Q1B0]],v0,v1)300define <64 x i16> @test_1b(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {301 %q0 = icmp eq <64 x i16> %v0, %v1302 %q1 = trunc <64 x i16> %v2 to <64 x i1>303 %q2 = or <64 x i1> %q0, %q1304 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1305 ret <64 x i16> %t1306}307 308; CHECK-LABEL: test_1c:309; CHECK: q[[Q1C0:[0-3]]] ^= vcmp.eq(v0.h,v1.h)310; CHECK: v0 = vmux(q[[Q1C0]],v0,v1)311define <64 x i16> @test_1c(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {312 %q0 = icmp eq <64 x i16> %v0, %v1313 %q1 = trunc <64 x i16> %v2 to <64 x i1>314 %q2 = xor <64 x i1> %q0, %q1315 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1316 ret <64 x i16> %t1317}318 319; CHECK-LABEL: test_1d:320; CHECK: q[[Q1D0:[0-3]]] &= vcmp.gt(v0.h,v1.h)321; CHECK: v0 = vmux(q[[Q1D0]],v0,v1)322define <64 x i16> @test_1d(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {323 %q0 = icmp sgt <64 x i16> %v0, %v1324 %q1 = trunc <64 x i16> %v2 to <64 x i1>325 %q2 = and <64 x i1> %q0, %q1326 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1327 ret <64 x i16> %t1328}329 330; CHECK-LABEL: test_1e:331; CHECK: q[[Q1E0:[0-3]]] |= vcmp.gt(v0.h,v1.h)332; CHECK: v0 = vmux(q[[Q1E0]],v0,v1)333define <64 x i16> @test_1e(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {334 %q0 = icmp sgt <64 x i16> %v0, %v1335 %q1 = trunc <64 x i16> %v2 to <64 x i1>336 %q2 = or <64 x i1> %q0, %q1337 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1338 ret <64 x i16> %t1339}340 341; CHECK-LABEL: test_1f:342; CHECK: q[[Q1F0:[0-3]]] ^= vcmp.gt(v0.h,v1.h)343; CHECK: v0 = vmux(q[[Q1F0]],v0,v1)344define <64 x i16> @test_1f(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {345 %q0 = icmp sgt <64 x i16> %v0, %v1346 %q1 = trunc <64 x i16> %v2 to <64 x i1>347 %q2 = xor <64 x i1> %q0, %q1348 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1349 ret <64 x i16> %t1350}351 352; CHECK-LABEL: test_1g:353; CHECK: q[[Q1G0:[0-3]]] &= vcmp.gt(v0.uh,v1.uh)354; CHECK: v0 = vmux(q[[Q1G0]],v0,v1)355define <64 x i16> @test_1g(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {356 %q0 = icmp ugt <64 x i16> %v0, %v1357 %q1 = trunc <64 x i16> %v2 to <64 x i1>358 %q2 = and <64 x i1> %q0, %q1359 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1360 ret <64 x i16> %t1361}362 363; CHECK-LABEL: test_1h:364; CHECK: q[[Q1H0:[0-3]]] |= vcmp.gt(v0.uh,v1.uh)365; CHECK: v0 = vmux(q[[Q1H0]],v0,v1)366define <64 x i16> @test_1h(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {367 %q0 = icmp ugt <64 x i16> %v0, %v1368 %q1 = trunc <64 x i16> %v2 to <64 x i1>369 %q2 = or <64 x i1> %q0, %q1370 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1371 ret <64 x i16> %t1372}373 374; CHECK-LABEL: test_1i:375; CHECK: q[[Q1I0:[0-3]]] ^= vcmp.gt(v0.uh,v1.uh)376; CHECK: v0 = vmux(q[[Q1I0]],v0,v1)377define <64 x i16> @test_1i(<64 x i16> %v0, <64 x i16> %v1, <64 x i16> %v2) #0 {378 %q0 = icmp ugt <64 x i16> %v0, %v1379 %q1 = trunc <64 x i16> %v2 to <64 x i1>380 %q2 = xor <64 x i1> %q0, %q1381 %t1 = select <64 x i1> %q2, <64 x i16> %v0, <64 x i16> %v1382 ret <64 x i16> %t1383}384 385; --- Word386 387; CHECK-LABEL: test_20:388; CHECK: q[[Q200:[0-3]]] = vcmp.eq(v0.w,v1.w)389; CHECK: v0 = vmux(q[[Q200]],v1,v2)390define <32 x i32> @test_20(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {391 %t0 = icmp eq <32 x i32> %v0, %v1392 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2393 ret <32 x i32> %t1394}395 396; CHECK-LABEL: test_21:397; CHECK: q[[Q210:[0-3]]] = vcmp.eq(v0.w,v1.w)398; CHECK: v0 = vmux(q[[Q210]],v2,v1)399define <32 x i32> @test_21(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {400 %t0 = icmp ne <32 x i32> %v0, %v1401 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2402 ret <32 x i32> %t1403}404 405; CHECK-LABEL: test_22:406; CHECK: q[[Q220:[0-3]]] = vcmp.gt(v1.w,v0.w)407; CHECK: v0 = vmux(q[[Q220]],v1,v2)408define <32 x i32> @test_22(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {409 %t0 = icmp slt <32 x i32> %v0, %v1410 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2411 ret <32 x i32> %t1412}413 414; CHECK-LABEL: test_23:415; CHECK: q[[Q230:[0-3]]] = vcmp.gt(v0.w,v1.w)416; CHECK: v0 = vmux(q[[Q230]],v2,v1)417define <32 x i32> @test_23(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {418 %t0 = icmp sle <32 x i32> %v0, %v1419 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2420 ret <32 x i32> %t1421}422 423; CHECK-LABEL: test_24:424; CHECK: q[[Q240:[0-3]]] = vcmp.gt(v0.w,v1.w)425; CHECK: v0 = vmux(q[[Q240]],v1,v2)426define <32 x i32> @test_24(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {427 %t0 = icmp sgt <32 x i32> %v0, %v1428 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2429 ret <32 x i32> %t1430}431 432; CHECK-LABEL: test_25:433; CHECK: q[[Q250:[0-3]]] = vcmp.gt(v1.w,v0.w)434; CHECK: v0 = vmux(q[[Q250]],v2,v1)435define <32 x i32> @test_25(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {436 %t0 = icmp sge <32 x i32> %v0, %v1437 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2438 ret <32 x i32> %t1439}440 441; CHECK-LABEL: test_26:442; CHECK: q[[Q260:[0-3]]] = vcmp.gt(v1.uw,v0.uw)443; CHECK: v0 = vmux(q[[Q260]],v1,v2)444define <32 x i32> @test_26(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {445 %t0 = icmp ult <32 x i32> %v0, %v1446 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2447 ret <32 x i32> %t1448}449 450; CHECK-LABEL: test_27:451; CHECK: q[[Q270:[0-3]]] = vcmp.gt(v0.uw,v1.uw)452; CHECK: v0 = vmux(q[[Q270]],v2,v1)453define <32 x i32> @test_27(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {454 %t0 = icmp ule <32 x i32> %v0, %v1455 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2456 ret <32 x i32> %t1457}458 459; CHECK-LABEL: test_28:460; CHECK: q[[Q280:[0-3]]] = vcmp.gt(v0.uw,v1.uw)461; CHECK: v0 = vmux(q[[Q280]],v1,v2)462define <32 x i32> @test_28(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {463 %t0 = icmp ugt <32 x i32> %v0, %v1464 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2465 ret <32 x i32> %t1466}467 468; CHECK-LABEL: test_29:469; CHECK: q[[Q290:[0-3]]] = vcmp.gt(v1.uw,v0.uw)470; CHECK: v0 = vmux(q[[Q290]],v2,v1)471define <32 x i32> @test_29(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {472 %t0 = icmp uge <32 x i32> %v0, %v1473 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v2474 ret <32 x i32> %t1475}476 477; CHECK-LABEL: test_2a:478; CHECK: q[[Q2A0:[0-3]]] &= vcmp.eq(v0.w,v1.w)479; CHECK: v0 = vmux(q[[Q2A0]],v0,v1)480define <32 x i32> @test_2a(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {481 %q0 = icmp eq <32 x i32> %v0, %v1482 %q1 = trunc <32 x i32> %v2 to <32 x i1>483 %q2 = and <32 x i1> %q0, %q1484 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1485 ret <32 x i32> %t1486}487 488; CHECK-LABEL: test_2b:489; CHECK: q[[Q2B0:[0-3]]] |= vcmp.eq(v0.w,v1.w)490; CHECK: v0 = vmux(q[[Q2B0]],v0,v1)491define <32 x i32> @test_2b(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {492 %q0 = icmp eq <32 x i32> %v0, %v1493 %q1 = trunc <32 x i32> %v2 to <32 x i1>494 %q2 = or <32 x i1> %q0, %q1495 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1496 ret <32 x i32> %t1497}498 499; CHECK-LABEL: test_2c:500; CHECK: q[[Q2C0:[0-3]]] ^= vcmp.eq(v0.w,v1.w)501; CHECK: v0 = vmux(q[[Q2C0]],v0,v1)502define <32 x i32> @test_2c(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {503 %q0 = icmp eq <32 x i32> %v0, %v1504 %q1 = trunc <32 x i32> %v2 to <32 x i1>505 %q2 = xor <32 x i1> %q0, %q1506 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1507 ret <32 x i32> %t1508}509 510; CHECK-LABEL: test_2d:511; CHECK: q[[Q2D0:[0-3]]] &= vcmp.gt(v0.w,v1.w)512; CHECK: v0 = vmux(q[[Q2D0]],v0,v1)513define <32 x i32> @test_2d(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {514 %q0 = icmp sgt <32 x i32> %v0, %v1515 %q1 = trunc <32 x i32> %v2 to <32 x i1>516 %q2 = and <32 x i1> %q0, %q1517 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1518 ret <32 x i32> %t1519}520 521; CHECK-LABEL: test_2e:522; CHECK: q[[Q2E0:[0-3]]] |= vcmp.gt(v0.w,v1.w)523; CHECK: v0 = vmux(q[[Q2E0]],v0,v1)524define <32 x i32> @test_2e(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {525 %q0 = icmp sgt <32 x i32> %v0, %v1526 %q1 = trunc <32 x i32> %v2 to <32 x i1>527 %q2 = or <32 x i1> %q0, %q1528 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1529 ret <32 x i32> %t1530}531 532; CHECK-LABEL: test_2f:533; CHECK: q[[Q2F0:[0-3]]] ^= vcmp.gt(v0.w,v1.w)534; CHECK: v0 = vmux(q[[Q2F0]],v0,v1)535define <32 x i32> @test_2f(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {536 %q0 = icmp sgt <32 x i32> %v0, %v1537 %q1 = trunc <32 x i32> %v2 to <32 x i1>538 %q2 = xor <32 x i1> %q0, %q1539 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1540 ret <32 x i32> %t1541}542 543; CHECK-LABEL: test_2g:544; CHECK: q[[Q2G0:[0-3]]] &= vcmp.gt(v0.uw,v1.uw)545; CHECK: v0 = vmux(q[[Q2G0]],v0,v1)546define <32 x i32> @test_2g(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {547 %q0 = icmp ugt <32 x i32> %v0, %v1548 %q1 = trunc <32 x i32> %v2 to <32 x i1>549 %q2 = and <32 x i1> %q0, %q1550 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1551 ret <32 x i32> %t1552}553 554; CHECK-LABEL: test_2h:555; CHECK: q[[Q2H0:[0-3]]] |= vcmp.gt(v0.uw,v1.uw)556; CHECK: v0 = vmux(q[[Q2H0]],v0,v1)557define <32 x i32> @test_2h(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {558 %q0 = icmp ugt <32 x i32> %v0, %v1559 %q1 = trunc <32 x i32> %v2 to <32 x i1>560 %q2 = or <32 x i1> %q0, %q1561 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1562 ret <32 x i32> %t1563}564 565; CHECK-LABEL: test_2i:566; CHECK: q[[Q2I0:[0-3]]] ^= vcmp.gt(v0.uw,v1.uw)567; CHECK: v0 = vmux(q[[Q2I0]],v0,v1)568define <32 x i32> @test_2i(<32 x i32> %v0, <32 x i32> %v1, <32 x i32> %v2) #0 {569 %q0 = icmp ugt <32 x i32> %v0, %v1570 %q1 = trunc <32 x i32> %v2 to <32 x i1>571 %q2 = xor <32 x i1> %q0, %q1572 %t1 = select <32 x i1> %q2, <32 x i32> %v0, <32 x i32> %v1573 ret <32 x i32> %t1574}575 576attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length128b" }577