1*9880d681SAndroid Build Coastguard Worker; Test vector stores. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Test v16i8 stores. 6*9880d681SAndroid Build Coastguard Workerdefine void @f1(<16 x i8> %val, <16 x i8> *%ptr) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 9*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 10*9880d681SAndroid Build Coastguard Worker store <16 x i8> %val, <16 x i8> *%ptr 11*9880d681SAndroid Build Coastguard Worker ret void 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; Test v8i16 stores. 15*9880d681SAndroid Build Coastguard Workerdefine void @f2(<8 x i16> %val, <8 x i16> *%ptr) { 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 17*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 18*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 19*9880d681SAndroid Build Coastguard Worker store <8 x i16> %val, <8 x i16> *%ptr 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; Test v4i32 stores. 24*9880d681SAndroid Build Coastguard Workerdefine void @f3(<4 x i32> %val, <4 x i32> *%ptr) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 26*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 27*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 28*9880d681SAndroid Build Coastguard Worker store <4 x i32> %val, <4 x i32> *%ptr 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; Test v2i64 stores. 33*9880d681SAndroid Build Coastguard Workerdefine void @f4(<2 x i64> %val, <2 x i64> *%ptr) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 35*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 36*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 37*9880d681SAndroid Build Coastguard Worker store <2 x i64> %val, <2 x i64> *%ptr 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; Test v4f32 stores. 42*9880d681SAndroid Build Coastguard Workerdefine void @f5(<4 x float> %val, <4 x float> *%ptr) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 44*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 45*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 46*9880d681SAndroid Build Coastguard Worker store <4 x float> %val, <4 x float> *%ptr 47*9880d681SAndroid Build Coastguard Worker ret void 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; Test v2f64 stores. 51*9880d681SAndroid Build Coastguard Workerdefine void @f6(<2 x double> %val, <2 x double> *%ptr) { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 53*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 54*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 55*9880d681SAndroid Build Coastguard Worker store <2 x double> %val, <2 x double> *%ptr 56*9880d681SAndroid Build Coastguard Worker ret void 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; Test the highest aligned in-range offset. 60*9880d681SAndroid Build Coastguard Workerdefine void @f7(<16 x i8> %val, <16 x i8> *%base) { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 62*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 4080(%r2) 63*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 64*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr <16 x i8>, <16 x i8> *%base, i64 255 65*9880d681SAndroid Build Coastguard Worker store <16 x i8> %val, <16 x i8> *%ptr 66*9880d681SAndroid Build Coastguard Worker ret void 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; Test the highest unaligned in-range offset. 70*9880d681SAndroid Build Coastguard Workerdefine void @f8(<16 x i8> %val, i8 *%base) { 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 72*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 4095(%r2) 73*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 74*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i8, i8 *%base, i64 4095 75*9880d681SAndroid Build Coastguard Worker %ptr = bitcast i8 *%addr to <16 x i8> * 76*9880d681SAndroid Build Coastguard Worker store <16 x i8> %val, <16 x i8> *%ptr, align 1 77*9880d681SAndroid Build Coastguard Worker ret void 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; Test the next offset up, which requires separate address logic, 81*9880d681SAndroid Build Coastguard Workerdefine void @f9(<16 x i8> %val, <16 x i8> *%base) { 82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 83*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r2, 4096 84*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 85*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 86*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr <16 x i8>, <16 x i8> *%base, i64 256 87*9880d681SAndroid Build Coastguard Worker store <16 x i8> %val, <16 x i8> *%ptr 88*9880d681SAndroid Build Coastguard Worker ret void 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker; Test negative offsets, which also require separate address logic, 92*9880d681SAndroid Build Coastguard Workerdefine void @f10(<16 x i8> %val, <16 x i8> *%base) { 93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 94*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r2, -16 95*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r2) 96*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 97*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr <16 x i8>, <16 x i8> *%base, i64 -1 98*9880d681SAndroid Build Coastguard Worker store <16 x i8> %val, <16 x i8> *%ptr 99*9880d681SAndroid Build Coastguard Worker ret void 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker; Check that indexes are allowed. 103*9880d681SAndroid Build Coastguard Workerdefine void @f11(<16 x i8> %val, i8 *%base, i64 %index) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 105*9880d681SAndroid Build Coastguard Worker; CHECK: vst %v24, 0(%r3,%r2) 106*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 107*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i8, i8 *%base, i64 %index 108*9880d681SAndroid Build Coastguard Worker %ptr = bitcast i8 *%addr to <16 x i8> * 109*9880d681SAndroid Build Coastguard Worker store <16 x i8> %val, <16 x i8> *%ptr, align 1 110*9880d681SAndroid Build Coastguard Worker ret void 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; Test v2i8 stores. 114*9880d681SAndroid Build Coastguard Workerdefine void @f12(<2 x i8> %val, <2 x i8> *%ptr) { 115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 116*9880d681SAndroid Build Coastguard Worker; CHECK: vsteh %v24, 0(%r2), 0 117*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 118*9880d681SAndroid Build Coastguard Worker store <2 x i8> %val, <2 x i8> *%ptr 119*9880d681SAndroid Build Coastguard Worker ret void 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; Test v4i8 stores. 123*9880d681SAndroid Build Coastguard Workerdefine void @f13(<4 x i8> %val, <4 x i8> *%ptr) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 125*9880d681SAndroid Build Coastguard Worker; CHECK: vstef %v24, 0(%r2) 126*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 127*9880d681SAndroid Build Coastguard Worker store <4 x i8> %val, <4 x i8> *%ptr 128*9880d681SAndroid Build Coastguard Worker ret void 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; Test v8i8 stores. 132*9880d681SAndroid Build Coastguard Workerdefine void @f14(<8 x i8> %val, <8 x i8> *%ptr) { 133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 134*9880d681SAndroid Build Coastguard Worker; CHECK: vsteg %v24, 0(%r2) 135*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 136*9880d681SAndroid Build Coastguard Worker store <8 x i8> %val, <8 x i8> *%ptr 137*9880d681SAndroid Build Coastguard Worker ret void 138*9880d681SAndroid Build Coastguard Worker} 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker; Test v2i16 stores. 141*9880d681SAndroid Build Coastguard Workerdefine void @f15(<2 x i16> %val, <2 x i16> *%ptr) { 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 143*9880d681SAndroid Build Coastguard Worker; CHECK: vstef %v24, 0(%r2), 0 144*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 145*9880d681SAndroid Build Coastguard Worker store <2 x i16> %val, <2 x i16> *%ptr 146*9880d681SAndroid Build Coastguard Worker ret void 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker; Test v4i16 stores. 150*9880d681SAndroid Build Coastguard Workerdefine void @f16(<4 x i16> %val, <4 x i16> *%ptr) { 151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 152*9880d681SAndroid Build Coastguard Worker; CHECK: vsteg %v24, 0(%r2) 153*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 154*9880d681SAndroid Build Coastguard Worker store <4 x i16> %val, <4 x i16> *%ptr 155*9880d681SAndroid Build Coastguard Worker ret void 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; Test v2i32 stores. 159*9880d681SAndroid Build Coastguard Workerdefine void @f17(<2 x i32> %val, <2 x i32> *%ptr) { 160*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 161*9880d681SAndroid Build Coastguard Worker; CHECK: vsteg %v24, 0(%r2), 0 162*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 163*9880d681SAndroid Build Coastguard Worker store <2 x i32> %val, <2 x i32> *%ptr 164*9880d681SAndroid Build Coastguard Worker ret void 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker; Test v2f32 stores. 168*9880d681SAndroid Build Coastguard Workerdefine void @f18(<2 x float> %val, <2 x float> *%ptr) { 169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18: 170*9880d681SAndroid Build Coastguard Worker; CHECK: vsteg %v24, 0(%r2), 0 171*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 172*9880d681SAndroid Build Coastguard Worker store <2 x float> %val, <2 x float> *%ptr 173*9880d681SAndroid Build Coastguard Worker ret void 174*9880d681SAndroid Build Coastguard Worker} 175