1*9880d681SAndroid Build Coastguard Worker; Test vector loads. 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 loads. 6*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f1(<16 x i8> *%ptr) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: vl %v24, 0(%r2) 9*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 10*9880d681SAndroid Build Coastguard Worker %ret = load <16 x i8>, <16 x i8> *%ptr 11*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; Test v8i16 loads. 15*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @f2(<8 x i16> *%ptr) { 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 17*9880d681SAndroid Build Coastguard Worker; CHECK: vl %v24, 0(%r2) 18*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 19*9880d681SAndroid Build Coastguard Worker %ret = load <8 x i16>, <8 x i16> *%ptr 20*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %ret 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; Test v4i32 loads. 24*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @f3(<4 x i32> *%ptr) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 26*9880d681SAndroid Build Coastguard Worker; CHECK: vl %v24, 0(%r2) 27*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 28*9880d681SAndroid Build Coastguard Worker %ret = load <4 x i32>, <4 x i32> *%ptr 29*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %ret 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; Test v2i64 loads. 33*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f4(<2 x i64> *%ptr) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 35*9880d681SAndroid Build Coastguard Worker; CHECK: vl %v24, 0(%r2) 36*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 37*9880d681SAndroid Build Coastguard Worker %ret = load <2 x i64>, <2 x i64> *%ptr 38*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; Test v4f32 loads. 42*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @f5(<4 x float> *%ptr) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 44*9880d681SAndroid Build Coastguard Worker; CHECK: vl %v24, 0(%r2) 45*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 46*9880d681SAndroid Build Coastguard Worker %ret = load <4 x float>, <4 x float> *%ptr 47*9880d681SAndroid Build Coastguard Worker ret <4 x float> %ret 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; Test v2f64 loads. 51*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f6(<2 x double> *%ptr) { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 53*9880d681SAndroid Build Coastguard Worker; CHECK: vl %v24, 0(%r2) 54*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 55*9880d681SAndroid Build Coastguard Worker %ret = load <2 x double>, <2 x double> *%ptr 56*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 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 <16 x i8> @f7(<16 x i8> *%base) { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 62*9880d681SAndroid Build Coastguard Worker; CHECK: vl %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 %ret = load <16 x i8>, <16 x i8> *%ptr 66*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 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 <16 x i8> @f8(i8 *%base) { 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 72*9880d681SAndroid Build Coastguard Worker; CHECK: vl %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 %ret = load <16 x i8>, <16 x i8> *%ptr, align 1 77*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 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 <16 x i8> @f9(<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: vl %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 %ret = load <16 x i8>, <16 x i8> *%ptr 88*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 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 <16 x i8> @f10(<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: vl %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 %ret = load <16 x i8>, <16 x i8> *%ptr 99*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 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 <16 x i8> @f11(i8 *%base, i64 %index) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 105*9880d681SAndroid Build Coastguard Worker; CHECK: vl %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 %ret = load <16 x i8>, <16 x i8> *%ptr, align 1 110*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; Test v2i8 loads. 114*9880d681SAndroid Build Coastguard Workerdefine <2 x i8> @f12(<2 x i8> *%ptr) { 115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 116*9880d681SAndroid Build Coastguard Worker; CHECK: vlreph %v24, 0(%r2) 117*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 118*9880d681SAndroid Build Coastguard Worker %ret = load <2 x i8>, <2 x i8> *%ptr 119*9880d681SAndroid Build Coastguard Worker ret <2 x i8> %ret 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; Test v4i8 loads. 123*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @f13(<4 x i8> *%ptr) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 125*9880d681SAndroid Build Coastguard Worker; CHECK: vlrepf %v24, 0(%r2) 126*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 127*9880d681SAndroid Build Coastguard Worker %ret = load <4 x i8>, <4 x i8> *%ptr 128*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %ret 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; Test v8i8 loads. 132*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @f14(<8 x i8> *%ptr) { 133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 134*9880d681SAndroid Build Coastguard Worker; CHECK: vlrepg %v24, 0(%r2) 135*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 136*9880d681SAndroid Build Coastguard Worker %ret = load <8 x i8>, <8 x i8> *%ptr 137*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %ret 138*9880d681SAndroid Build Coastguard Worker} 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker; Test v2i16 loads. 141*9880d681SAndroid Build Coastguard Workerdefine <2 x i16> @f15(<2 x i16> *%ptr) { 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 143*9880d681SAndroid Build Coastguard Worker; CHECK: vlrepf %v24, 0(%r2) 144*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 145*9880d681SAndroid Build Coastguard Worker %ret = load <2 x i16>, <2 x i16> *%ptr 146*9880d681SAndroid Build Coastguard Worker ret <2 x i16> %ret 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker; Test v4i16 loads. 150*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @f16(<4 x i16> *%ptr) { 151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 152*9880d681SAndroid Build Coastguard Worker; CHECK: vlrepg %v24, 0(%r2) 153*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 154*9880d681SAndroid Build Coastguard Worker %ret = load <4 x i16>, <4 x i16> *%ptr 155*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %ret 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; Test v2i32 loads. 159*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @f17(<2 x i32> *%ptr) { 160*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 161*9880d681SAndroid Build Coastguard Worker; CHECK: vlrepg %v24, 0(%r2) 162*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 163*9880d681SAndroid Build Coastguard Worker %ret = load <2 x i32>, <2 x i32> *%ptr 164*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %ret 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker; Test v2f32 loads. 168*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @f18(<2 x float> *%ptr) { 169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18: 170*9880d681SAndroid Build Coastguard Worker; CHECK: vlrepg %v24, 0(%r2) 171*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 172*9880d681SAndroid Build Coastguard Worker %ret = load <2 x float>, <2 x float> *%ptr 173*9880d681SAndroid Build Coastguard Worker ret <2 x float> %ret 174*9880d681SAndroid Build Coastguard Worker} 175