brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · e5c6df8 Raw
201 lines · plain
1; Test replications of a scalar register value, represented as splats.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5; Test v16i8 splat of the first element.6define <16 x i8> @f1(i8 %scalar) {7; CHECK-LABEL: f1:8; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r29; CHECK: vrepb %v24, [[REG]], 710; CHECK: br %r1411  %val = insertelement <16 x i8> undef, i8 %scalar, i32 012  %ret = shufflevector <16 x i8> %val, <16 x i8> undef,13                       <16 x i32> zeroinitializer14  ret <16 x i8> %ret15}16 17; Test v16i8 splat of the last element.18define <16 x i8> @f2(i8 %scalar) {19; CHECK-LABEL: f2:20; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r221; CHECK: vrepb %v24, [[REG]], 722; CHECK: br %r1423  %val = insertelement <16 x i8> undef, i8 %scalar, i32 1524  %ret = shufflevector <16 x i8> %val, <16 x i8> undef,25                       <16 x i32> <i32 15, i32 15, i32 15, i32 15,26                                   i32 15, i32 15, i32 15, i32 15,27                                   i32 15, i32 15, i32 15, i32 15,28                                   i32 15, i32 15, i32 15, i32 15>29  ret <16 x i8> %ret30}31 32; Test v16i8 splat of an arbitrary element, using the second operand of33; the shufflevector.34define <16 x i8> @f3(i8 %scalar) {35; CHECK-LABEL: f3:36; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r237; CHECK: vrepb %v24, [[REG]], 738; CHECK: br %r1439  %val = insertelement <16 x i8> undef, i8 %scalar, i32 440  %ret = shufflevector <16 x i8> undef, <16 x i8> %val,41                       <16 x i32> <i32 20, i32 20, i32 20, i32 20,42                                   i32 20, i32 20, i32 20, i32 20,43                                   i32 20, i32 20, i32 20, i32 20,44                                   i32 20, i32 20, i32 20, i32 20>45  ret <16 x i8> %ret46}47 48; Test v8i16 splat of the first element.49define <8 x i16> @f4(i16 %scalar) {50; CHECK-LABEL: f4:51; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r252; CHECK: vreph %v24, [[REG]], 353; CHECK: br %r1454  %val = insertelement <8 x i16> undef, i16 %scalar, i32 055  %ret = shufflevector <8 x i16> %val, <8 x i16> undef,56                       <8 x i32> zeroinitializer57  ret <8 x i16> %ret58}59 60; Test v8i16 splat of the last element.61define <8 x i16> @f5(i16 %scalar) {62; CHECK-LABEL: f5:63; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r264; CHECK: vreph %v24, [[REG]], 365; CHECK: br %r1466  %val = insertelement <8 x i16> undef, i16 %scalar, i32 767  %ret = shufflevector <8 x i16> %val, <8 x i16> undef,68                       <8 x i32> <i32 7, i32 7, i32 7, i32 7,69                                  i32 7, i32 7, i32 7, i32 7>70  ret <8 x i16> %ret71}72 73; Test v8i16 splat of an arbitrary element, using the second operand of74; the shufflevector.75define <8 x i16> @f6(i16 %scalar) {76; CHECK-LABEL: f6:77; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r278; CHECK: vreph %v24, [[REG]], 379; CHECK: br %r1480  %val = insertelement <8 x i16> undef, i16 %scalar, i32 281  %ret = shufflevector <8 x i16> undef, <8 x i16> %val,82                       <8 x i32> <i32 10, i32 10, i32 10, i32 10,83                                  i32 10, i32 10, i32 10, i32 10>84  ret <8 x i16> %ret85}86 87; Test v4i32 splat of the first element.88define <4 x i32> @f7(i32 %scalar) {89; CHECK-LABEL: f7:90; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r291; CHECK: vrepf %v24, [[REG]], 192; CHECK: br %r1493  %val = insertelement <4 x i32> undef, i32 %scalar, i32 094  %ret = shufflevector <4 x i32> %val, <4 x i32> undef,95                       <4 x i32> zeroinitializer96  ret <4 x i32> %ret97}98 99; Test v4i32 splat of the last element.100define <4 x i32> @f8(i32 %scalar) {101; CHECK-LABEL: f8:102; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r2103; CHECK: vrepf %v24, [[REG]], 1104; CHECK: br %r14105  %val = insertelement <4 x i32> undef, i32 %scalar, i32 3106  %ret = shufflevector <4 x i32> %val, <4 x i32> undef,107                       <4 x i32> <i32 3, i32 3, i32 3, i32 3>108  ret <4 x i32> %ret109}110 111; Test v4i32 splat of an arbitrary element, using the second operand of112; the shufflevector.113define <4 x i32> @f9(i32 %scalar) {114; CHECK-LABEL: f9:115; CHECK: vlvgp [[REG:%v[0-9]+]], %r2, %r2116; CHECK: vrepf %v24, [[REG]], 1117; CHECK: br %r14118  %val = insertelement <4 x i32> undef, i32 %scalar, i32 1119  %ret = shufflevector <4 x i32> undef, <4 x i32> %val,120                       <4 x i32> <i32 5, i32 5, i32 5, i32 5>121  ret <4 x i32> %ret122}123 124; Test v2i64 splat of the first element.125define <2 x i64> @f10(i64 %scalar) {126; CHECK-LABEL: f10:127; CHECK: vlvgp %v24, %r2, %r2128; CHECK: br %r14129  %val = insertelement <2 x i64> undef, i64 %scalar, i32 0130  %ret = shufflevector <2 x i64> %val, <2 x i64> undef,131                       <2 x i32> zeroinitializer132  ret <2 x i64> %ret133}134 135; Test v2i64 splat of the last element.136define <2 x i64> @f11(i64 %scalar) {137; CHECK-LABEL: f11:138; CHECK: vlvgp %v24, %r2, %r2139; CHECK: br %r14140  %val = insertelement <2 x i64> undef, i64 %scalar, i32 1141  %ret = shufflevector <2 x i64> %val, <2 x i64> undef,142                       <2 x i32> <i32 1, i32 1>143  ret <2 x i64> %ret144}145 146; Test v4f32 splat of the first element.147define <4 x float> @f12(float %scalar) {148; CHECK-LABEL: f12:149; CHECK: vrepf %v24, %v0, 0150; CHECK: br %r14151  %val = insertelement <4 x float> undef, float %scalar, i32 0152  %ret = shufflevector <4 x float> %val, <4 x float> undef,153                       <4 x i32> zeroinitializer154  ret <4 x float> %ret155}156 157; Test v4f32 splat of the last element.158define <4 x float> @f13(float %scalar) {159; CHECK-LABEL: f13:160; CHECK: vrepf %v24, %v0, 0161; CHECK: br %r14162  %val = insertelement <4 x float> undef, float %scalar, i32 3163  %ret = shufflevector <4 x float> %val, <4 x float> undef,164                       <4 x i32> <i32 3, i32 3, i32 3, i32 3>165  ret <4 x float> %ret166}167 168; Test v4f32 splat of an arbitrary element, using the second operand of169; the shufflevector.170define <4 x float> @f14(float %scalar) {171; CHECK-LABEL: f14:172; CHECK: vrepf %v24, %v0, 0173; CHECK: br %r14174  %val = insertelement <4 x float> undef, float %scalar, i32 1175  %ret = shufflevector <4 x float> undef, <4 x float> %val,176                       <4 x i32> <i32 5, i32 5, i32 5, i32 5>177  ret <4 x float> %ret178}179 180; Test v2f64 splat of the first element.181define <2 x double> @f15(double %scalar) {182; CHECK-LABEL: f15:183; CHECK: vrepg %v24, %v0, 0184; CHECK: br %r14185  %val = insertelement <2 x double> undef, double %scalar, i32 0186  %ret = shufflevector <2 x double> %val, <2 x double> undef,187                       <2 x i32> zeroinitializer188  ret <2 x double> %ret189}190 191; Test v2f64 splat of the last element.192define <2 x double> @f16(double %scalar) {193; CHECK-LABEL: f16:194; CHECK: vrepg %v24, %v0, 0195; CHECK: br %r14196  %val = insertelement <2 x double> undef, double %scalar, i32 1197  %ret = shufflevector <2 x double> %val, <2 x double> undef,198                       <2 x i32> <i32 1, i32 1>199  ret <2 x double> %ret200}201