brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · aa18923 Raw
252 lines · plain
1; Test replications of a scalar memory value, represented as splats.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5; Test a v16i8 replicating load with no offset.6define <16 x i8> @f1(ptr %ptr) {7; CHECK-LABEL: f1:8; CHECK: vlrepb %v24, 0(%r2)9; CHECK: br %r1410  %scalar = load i8, ptr %ptr11  %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 a v16i8 replicating load with the maximum in-range offset.18define <16 x i8> @f2(ptr %base) {19; CHECK-LABEL: f2:20; CHECK: vlrepb %v24, 4095(%r2)21; CHECK: br %r1422  %ptr = getelementptr i8, ptr %base, i64 409523  %scalar = load i8, ptr %ptr24  %val = insertelement <16 x i8> undef, i8 %scalar, i32 025  %ret = shufflevector <16 x i8> %val, <16 x i8> undef,26                       <16 x i32> zeroinitializer27  ret <16 x i8> %ret28}29 30; Test a v16i8 replicating load with the first out-of-range offset.31define <16 x i8> @f3(ptr %base) {32; CHECK-LABEL: f3:33; CHECK: aghi %r2, 409634; CHECK: vlrepb %v24, 0(%r2)35; CHECK: br %r1436  %ptr = getelementptr i8, ptr %base, i64 409637  %scalar = load i8, ptr %ptr38  %val = insertelement <16 x i8> undef, i8 %scalar, i32 039  %ret = shufflevector <16 x i8> %val, <16 x i8> undef,40                       <16 x i32> zeroinitializer41  ret <16 x i8> %ret42}43 44; Test a v8i16 replicating load with no offset.45define <8 x i16> @f4(ptr %ptr) {46; CHECK-LABEL: f4:47; CHECK: vlreph %v24, 0(%r2)48; CHECK: br %r1449  %scalar = load i16, ptr %ptr50  %val = insertelement <8 x i16> undef, i16 %scalar, i32 051  %ret = shufflevector <8 x i16> %val, <8 x i16> undef,52                       <8 x i32> zeroinitializer53  ret <8 x i16> %ret54}55 56; Test a v8i16 replicating load with the maximum in-range offset.57define <8 x i16> @f5(ptr %base) {58; CHECK-LABEL: f5:59; CHECK: vlreph %v24, 4094(%r2)60; CHECK: br %r1461  %ptr = getelementptr i16, ptr %base, i64 204762  %scalar = load i16, ptr %ptr63  %val = insertelement <8 x i16> undef, i16 %scalar, i32 064  %ret = shufflevector <8 x i16> %val, <8 x i16> undef,65                       <8 x i32> zeroinitializer66  ret <8 x i16> %ret67}68 69; Test a v8i16 replicating load with the first out-of-range offset.70define <8 x i16> @f6(ptr %base) {71; CHECK-LABEL: f6:72; CHECK: aghi %r2, 409673; CHECK: vlreph %v24, 0(%r2)74; CHECK: br %r1475  %ptr = getelementptr i16, ptr %base, i64 204876  %scalar = load i16, ptr %ptr77  %val = insertelement <8 x i16> undef, i16 %scalar, i32 078  %ret = shufflevector <8 x i16> %val, <8 x i16> undef,79                       <8 x i32> zeroinitializer80  ret <8 x i16> %ret81}82 83; Test a v4i32 replicating load with no offset.84define <4 x i32> @f7(ptr %ptr) {85; CHECK-LABEL: f7:86; CHECK: vlrepf %v24, 0(%r2)87; CHECK: br %r1488  %scalar = load i32, ptr %ptr89  %val = insertelement <4 x i32> undef, i32 %scalar, i32 090  %ret = shufflevector <4 x i32> %val, <4 x i32> undef,91                       <4 x i32> zeroinitializer92  ret <4 x i32> %ret93}94 95; Test a v4i32 replicating load with the maximum in-range offset.96define <4 x i32> @f8(ptr %base) {97; CHECK-LABEL: f8:98; CHECK: vlrepf %v24, 4092(%r2)99; CHECK: br %r14100  %ptr = getelementptr i32, ptr %base, i64 1023101  %scalar = load i32, ptr %ptr102  %val = insertelement <4 x i32> undef, i32 %scalar, i32 0103  %ret = shufflevector <4 x i32> %val, <4 x i32> undef,104                       <4 x i32> zeroinitializer105  ret <4 x i32> %ret106}107 108; Test a v4i32 replicating load with the first out-of-range offset.109define <4 x i32> @f9(ptr %base) {110; CHECK-LABEL: f9:111; CHECK: aghi %r2, 4096112; CHECK: vlrepf %v24, 0(%r2)113; CHECK: br %r14114  %ptr = getelementptr i32, ptr %base, i64 1024115  %scalar = load i32, ptr %ptr116  %val = insertelement <4 x i32> undef, i32 %scalar, i32 0117  %ret = shufflevector <4 x i32> %val, <4 x i32> undef,118                       <4 x i32> zeroinitializer119  ret <4 x i32> %ret120}121 122; Test a v2i64 replicating load with no offset.123define <2 x i64> @f10(ptr %ptr) {124; CHECK-LABEL: f10:125; CHECK: vlrepg %v24, 0(%r2)126; CHECK: br %r14127  %scalar = load i64, ptr %ptr128  %val = insertelement <2 x i64> undef, i64 %scalar, i32 0129  %ret = shufflevector <2 x i64> %val, <2 x i64> undef,130                       <2 x i32> zeroinitializer131  ret <2 x i64> %ret132}133 134; Test a v2i64 replicating load with the maximum in-range offset.135define <2 x i64> @f11(ptr %base) {136; CHECK-LABEL: f11:137; CHECK: vlrepg %v24, 4088(%r2)138; CHECK: br %r14139  %ptr = getelementptr i64, ptr %base, i32 511140  %scalar = load i64, ptr %ptr141  %val = insertelement <2 x i64> undef, i64 %scalar, i32 0142  %ret = shufflevector <2 x i64> %val, <2 x i64> undef,143                       <2 x i32> zeroinitializer144  ret <2 x i64> %ret145}146 147; Test a v2i64 replicating load with the first out-of-range offset.148define <2 x i64> @f12(ptr %base) {149; CHECK-LABEL: f12:150; CHECK: aghi %r2, 4096151; CHECK: vlrepg %v24, 0(%r2)152; CHECK: br %r14153  %ptr = getelementptr i64, ptr %base, i32 512154  %scalar = load i64, ptr %ptr155  %val = insertelement <2 x i64> undef, i64 %scalar, i32 0156  %ret = shufflevector <2 x i64> %val, <2 x i64> undef,157                       <2 x i32> zeroinitializer158  ret <2 x i64> %ret159}160 161; Test a v4f32 replicating load with no offset.162define <4 x float> @f13(ptr %ptr) {163; CHECK-LABEL: f13:164; CHECK: vlrepf %v24, 0(%r2)165; CHECK: br %r14166  %scalar = load float, ptr %ptr167  %val = insertelement <4 x float> undef, float %scalar, i32 0168  %ret = shufflevector <4 x float> %val, <4 x float> undef,169                       <4 x i32> zeroinitializer170  ret <4 x float> %ret171}172 173; Test a v4f32 replicating load with the maximum in-range offset.174define <4 x float> @f14(ptr %base) {175; CHECK-LABEL: f14:176; CHECK: vlrepf %v24, 4092(%r2)177; CHECK: br %r14178  %ptr = getelementptr float, ptr %base, i64 1023179  %scalar = load float, ptr %ptr180  %val = insertelement <4 x float> undef, float %scalar, i32 0181  %ret = shufflevector <4 x float> %val, <4 x float> undef,182                       <4 x i32> zeroinitializer183  ret <4 x float> %ret184}185 186; Test a v4f32 replicating load with the first out-of-range offset.187define <4 x float> @f15(ptr %base) {188; CHECK-LABEL: f15:189; CHECK: aghi %r2, 4096190; CHECK: vlrepf %v24, 0(%r2)191; CHECK: br %r14192  %ptr = getelementptr float, ptr %base, i64 1024193  %scalar = load float, ptr %ptr194  %val = insertelement <4 x float> undef, float %scalar, i32 0195  %ret = shufflevector <4 x float> %val, <4 x float> undef,196                       <4 x i32> zeroinitializer197  ret <4 x float> %ret198}199 200; Test a v2f64 replicating load with no offset.201define <2 x double> @f16(ptr %ptr) {202; CHECK-LABEL: f16:203; CHECK: vlrepg %v24, 0(%r2)204; CHECK: br %r14205  %scalar = load double, ptr %ptr206  %val = insertelement <2 x double> undef, double %scalar, i32 0207  %ret = shufflevector <2 x double> %val, <2 x double> undef,208                       <2 x i32> zeroinitializer209  ret <2 x double> %ret210}211 212; Test a v2f64 replicating load with the maximum in-range offset.213define <2 x double> @f17(ptr %base) {214; CHECK-LABEL: f17:215; CHECK: vlrepg %v24, 4088(%r2)216; CHECK: br %r14217  %ptr = getelementptr double, ptr %base, i32 511218  %scalar = load double, ptr %ptr219  %val = insertelement <2 x double> undef, double %scalar, i32 0220  %ret = shufflevector <2 x double> %val, <2 x double> undef,221                       <2 x i32> zeroinitializer222  ret <2 x double> %ret223}224 225; Test a v2f64 replicating load with the first out-of-range offset.226define <2 x double> @f18(ptr %base) {227; CHECK-LABEL: f18:228; CHECK: aghi %r2, 4096229; CHECK: vlrepg %v24, 0(%r2)230; CHECK: br %r14231  %ptr = getelementptr double, ptr %base, i32 512232  %scalar = load double, ptr %ptr233  %val = insertelement <2 x double> undef, double %scalar, i32 0234  %ret = shufflevector <2 x double> %val, <2 x double> undef,235                       <2 x i32> zeroinitializer236  ret <2 x double> %ret237}238 239; Test a v16i8 replicating load with an index.240define <16 x i8> @f19(ptr %base, i64 %index) {241; CHECK-LABEL: f19:242; CHECK: vlrepb %v24, 1023(%r3,%r2)243; CHECK: br %r14244  %ptr1 = getelementptr i8, ptr %base, i64 %index245  %ptr = getelementptr i8, ptr %ptr1, i64 1023246  %scalar = load i8, ptr %ptr247  %val = insertelement <16 x i8> undef, i8 %scalar, i32 0248  %ret = shufflevector <16 x i8> %val, <16 x i8> undef,249                       <16 x i32> zeroinitializer250  ret <16 x i8> %ret251}252