249 lines · plain
1; Test usage of VBLEND on z17.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z17 | FileCheck %s4 5define <16 x i8> @f1(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3) {6; CHECK-LABEL: f1:7; CHECK: vblendb %v24, %v26, %v28, %v248; CHECK-NEXT: br %r149 %cmp = icmp slt <16 x i8> %val1, zeroinitializer10 %ret = select <16 x i1> %cmp, <16 x i8> %val2, <16 x i8> %val311 ret <16 x i8> %ret12}13 14define <16 x i8> @f2(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3) {15; CHECK-LABEL: f2:16; CHECK: vblendb %v24, %v28, %v26, %v2417; CHECK-NEXT: br %r1418 %cmp = icmp sge <16 x i8> %val1, zeroinitializer19 %ret = select <16 x i1> %cmp, <16 x i8> %val2, <16 x i8> %val320 ret <16 x i8> %ret21}22 23define <16 x i8> @f3(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3) {24; CHECK-LABEL: f3:25; CHECK: vblendb %v24, %v26, %v28, %v2426; CHECK-NEXT: br %r1427 %mask = and <16 x i8> %val1, <i8 128, i8 128, i8 128, i8 128,28 i8 128, i8 128, i8 128, i8 128,29 i8 128, i8 128, i8 128, i8 128,30 i8 128, i8 128, i8 128, i8 128>;31 %cmp = icmp ne <16 x i8> %mask, zeroinitializer32 %ret = select <16 x i1> %cmp, <16 x i8> %val2, <16 x i8> %val333 ret <16 x i8> %ret34}35 36define <16 x i8> @f4(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3) {37; CHECK-LABEL: f4:38; CHECK: vblendb %v24, %v28, %v26, %v2439; CHECK-NEXT: br %r1440 %mask = and <16 x i8> %val1, <i8 128, i8 128, i8 128, i8 128,41 i8 128, i8 128, i8 128, i8 128,42 i8 128, i8 128, i8 128, i8 128,43 i8 128, i8 128, i8 128, i8 128>;44 %cmp = icmp eq <16 x i8> %mask, zeroinitializer45 %ret = select <16 x i1> %cmp, <16 x i8> %val2, <16 x i8> %val346 ret <16 x i8> %ret47}48 49define <8 x i16> @f5(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3) {50; CHECK-LABEL: f5:51; CHECK: vblendh %v24, %v26, %v28, %v2452; CHECK-NEXT: br %r1453 %cmp = icmp slt <8 x i16> %val1, zeroinitializer54 %ret = select <8 x i1> %cmp, <8 x i16> %val2, <8 x i16> %val355 ret <8 x i16> %ret56}57 58define <8 x i16> @f6(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3) {59; CHECK-LABEL: f6:60; CHECK: vblendh %v24, %v28, %v26, %v2461; CHECK-NEXT: br %r1462 %cmp = icmp sge <8 x i16> %val1, zeroinitializer63 %ret = select <8 x i1> %cmp, <8 x i16> %val2, <8 x i16> %val364 ret <8 x i16> %ret65}66 67define <8 x i16> @f7(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3) {68; CHECK-LABEL: f7:69; CHECK: vblendh %v24, %v26, %v28, %v2470; CHECK-NEXT: br %r1471 %mask = and <8 x i16> %val1, <i16 32768, i16 32768, i16 32768, i16 32768,72 i16 32768, i16 32768, i16 32768, i16 32768>;73 %cmp = icmp ne <8 x i16> %mask, zeroinitializer74 %ret = select <8 x i1> %cmp, <8 x i16> %val2, <8 x i16> %val375 ret <8 x i16> %ret76}77 78define <8 x i16> @f8(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3) {79; CHECK-LABEL: f8:80; CHECK: vblendh %v24, %v28, %v26, %v2481; CHECK-NEXT: br %r1482 %mask = and <8 x i16> %val1, <i16 32768, i16 32768, i16 32768, i16 32768,83 i16 32768, i16 32768, i16 32768, i16 32768>;84 %cmp = icmp eq <8 x i16> %mask, zeroinitializer85 %ret = select <8 x i1> %cmp, <8 x i16> %val2, <8 x i16> %val386 ret <8 x i16> %ret87}88 89define <4 x i32> @f9(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3) {90; CHECK-LABEL: f9:91; CHECK: vblendf %v24, %v26, %v28, %v2492; CHECK-NEXT: br %r1493 %cmp = icmp slt <4 x i32> %val1, zeroinitializer94 %ret = select <4 x i1> %cmp, <4 x i32> %val2, <4 x i32> %val395 ret <4 x i32> %ret96}97 98define <4 x i32> @f10(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3) {99; CHECK-LABEL: f10:100; CHECK: vblendf %v24, %v28, %v26, %v24101; CHECK-NEXT: br %r14102 %cmp = icmp sge <4 x i32> %val1, zeroinitializer103 %ret = select <4 x i1> %cmp, <4 x i32> %val2, <4 x i32> %val3104 ret <4 x i32> %ret105}106 107define <4 x i32> @f11(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3) {108; CHECK-LABEL: f11:109; CHECK: vblendf %v24, %v26, %v28, %v24110; CHECK-NEXT: br %r14111 %mask = and <4 x i32> %val1, <i32 2147483648, i32 2147483648,112 i32 2147483648, i32 2147483648>;113 %cmp = icmp ne <4 x i32> %mask, zeroinitializer114 %ret = select <4 x i1> %cmp, <4 x i32> %val2, <4 x i32> %val3115 ret <4 x i32> %ret116}117 118define <4 x i32> @f12(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3) {119; CHECK-LABEL: f12:120; CHECK: vblendf %v24, %v28, %v26, %v24121; CHECK-NEXT: br %r14122 %mask = and <4 x i32> %val1, <i32 2147483648, i32 2147483648,123 i32 2147483648, i32 2147483648>;124 %cmp = icmp eq <4 x i32> %mask, zeroinitializer125 %ret = select <4 x i1> %cmp, <4 x i32> %val2, <4 x i32> %val3126 ret <4 x i32> %ret127}128 129define <2 x i64> @f13(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3) {130; CHECK-LABEL: f13:131; CHECK: vblendg %v24, %v26, %v28, %v24132; CHECK-NEXT: br %r14133 %cmp = icmp slt <2 x i64> %val1, zeroinitializer134 %ret = select <2 x i1> %cmp, <2 x i64> %val2, <2 x i64> %val3135 ret <2 x i64> %ret136}137 138define <2 x i64> @f14(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3) {139; CHECK-LABEL: f14:140; CHECK: vblendg %v24, %v28, %v26, %v24141; CHECK-NEXT: br %r14142 %cmp = icmp sge <2 x i64> %val1, zeroinitializer143 %ret = select <2 x i1> %cmp, <2 x i64> %val2, <2 x i64> %val3144 ret <2 x i64> %ret145}146 147define <2 x i64> @f15(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3) {148; CHECK-LABEL: f15:149; CHECK: vblendg %v24, %v26, %v28, %v24150; CHECK-NEXT: br %r14151 %mask = and <2 x i64> %val1, <i64 9223372036854775808,152 i64 9223372036854775808>;153 %cmp = icmp ne <2 x i64> %mask, zeroinitializer154 %ret = select <2 x i1> %cmp, <2 x i64> %val2, <2 x i64> %val3155 ret <2 x i64> %ret156}157 158define <2 x i64> @f16(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3) {159; CHECK-LABEL: f16:160; CHECK: vblendg %v24, %v28, %v26, %v24161; CHECK-NEXT: br %r14162 %mask = and <2 x i64> %val1, <i64 9223372036854775808,163 i64 9223372036854775808>;164 %cmp = icmp eq <2 x i64> %mask, zeroinitializer165 %ret = select <2 x i1> %cmp, <2 x i64> %val2, <2 x i64> %val3166 ret <2 x i64> %ret167}168 169define <4 x float> @f17(<4 x i32> %val1, <4 x float> %val2, <4 x float> %val3) {170; CHECK-LABEL: f17:171; CHECK: vblendf %v24, %v26, %v28, %v24172; CHECK-NEXT: br %r14173 %cmp = icmp slt <4 x i32> %val1, zeroinitializer174 %ret = select <4 x i1> %cmp, <4 x float> %val2, <4 x float> %val3175 ret <4 x float> %ret176}177 178define <4 x float> @f18(<4 x i32> %val1, <4 x float> %val2, <4 x float> %val3) {179; CHECK-LABEL: f18:180; CHECK: vblendf %v24, %v28, %v26, %v24181; CHECK-NEXT: br %r14182 %cmp = icmp sge <4 x i32> %val1, zeroinitializer183 %ret = select <4 x i1> %cmp, <4 x float> %val2, <4 x float> %val3184 ret <4 x float> %ret185}186 187define <4 x float> @f19(<4 x i32> %val1, <4 x float> %val2, <4 x float> %val3) {188; CHECK-LABEL: f19:189; CHECK: vblendf %v24, %v26, %v28, %v24190; CHECK-NEXT: br %r14191 %mask = and <4 x i32> %val1, <i32 2147483648, i32 2147483648,192 i32 2147483648, i32 2147483648>;193 %cmp = icmp ne <4 x i32> %mask, zeroinitializer194 %ret = select <4 x i1> %cmp, <4 x float> %val2, <4 x float> %val3195 ret <4 x float> %ret196}197 198define <4 x float> @f20(<4 x i32> %val1, <4 x float> %val2, <4 x float> %val3) {199; CHECK-LABEL: f20:200; CHECK: vblendf %v24, %v28, %v26, %v24201; CHECK-NEXT: br %r14202 %mask = and <4 x i32> %val1, <i32 2147483648, i32 2147483648,203 i32 2147483648, i32 2147483648>;204 %cmp = icmp eq <4 x i32> %mask, zeroinitializer205 %ret = select <4 x i1> %cmp, <4 x float> %val2, <4 x float> %val3206 ret <4 x float> %ret207}208 209define <2 x double> @f21(<2 x i64> %val1, <2 x double> %val2, <2 x double> %val3) {210; CHECK-LABEL: f21:211; CHECK: vblendg %v24, %v26, %v28, %v24212; CHECK-NEXT: br %r14213 %cmp = icmp slt <2 x i64> %val1, zeroinitializer214 %ret = select <2 x i1> %cmp, <2 x double> %val2, <2 x double> %val3215 ret <2 x double> %ret216}217 218define <2 x double> @f22(<2 x i64> %val1, <2 x double> %val2, <2 x double> %val3) {219; CHECK-LABEL: f22:220; CHECK: vblendg %v24, %v28, %v26, %v24221; CHECK-NEXT: br %r14222 %cmp = icmp sge <2 x i64> %val1, zeroinitializer223 %ret = select <2 x i1> %cmp, <2 x double> %val2, <2 x double> %val3224 ret <2 x double> %ret225}226 227define <2 x double> @f23(<2 x i64> %val1, <2 x double> %val2, <2 x double> %val3) {228; CHECK-LABEL: f23:229; CHECK: vblendg %v24, %v26, %v28, %v24230; CHECK-NEXT: br %r14231 %mask = and <2 x i64> %val1, <i64 9223372036854775808,232 i64 9223372036854775808>;233 %cmp = icmp ne <2 x i64> %mask, zeroinitializer234 %ret = select <2 x i1> %cmp, <2 x double> %val2, <2 x double> %val3235 ret <2 x double> %ret236}237 238define <2 x double> @f24(<2 x i64> %val1, <2 x double> %val2, <2 x double> %val3) {239; CHECK-LABEL: f24:240; CHECK: vblendg %v24, %v28, %v26, %v24241; CHECK-NEXT: br %r14242 %mask = and <2 x i64> %val1, <i64 9223372036854775808,243 i64 9223372036854775808>;244 %cmp = icmp eq <2 x i64> %mask, zeroinitializer245 %ret = select <2 x i1> %cmp, <2 x double> %val2, <2 x double> %val3246 ret <2 x double> %ret247}248 249