1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 4*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls8: 5*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8 6*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 7*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 8*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <8 x i8> %tmp1, %tmp2 9*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 13*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls16: 14*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16 15*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 16*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 17*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <4 x i16> %tmp1, %tmp2 18*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 22*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls32: 23*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32 24*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 25*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 26*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <2 x i32> %tmp1, %tmp2 27*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp3 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 31*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshls64: 32*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64 33*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %A 34*9880d681SAndroid Build Coastguard Worker %tmp2 = load <1 x i64>, <1 x i64>* %B 35*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <1 x i64> %tmp1, %tmp2 36*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp3 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vshli8(<8 x i8>* %A) nounwind { 40*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli8: 41*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i8 42*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 43*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 44*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vshli16(<4 x i16>* %A) nounwind { 48*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli16: 49*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i16 50*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 51*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 > 52*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vshli32(<2 x i32>* %A) nounwind { 56*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli32: 57*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i32 58*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 59*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <2 x i32> %tmp1, < i32 31, i32 31 > 60*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vshli64(<1 x i64>* %A) nounwind { 64*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshli64: 65*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i64 66*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %A 67*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <1 x i64> %tmp1, < i64 63 > 68*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp2 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 72*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs8: 73*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8 74*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 75*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 76*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <16 x i8> %tmp1, %tmp2 77*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 81*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs16: 82*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16 83*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 84*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 85*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <8 x i16> %tmp1, %tmp2 86*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp3 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 90*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs32: 91*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32 92*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 93*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 94*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <4 x i32> %tmp1, %tmp2 95*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp3 96*9880d681SAndroid Build Coastguard Worker} 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 99*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQs64: 100*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64 101*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 102*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %B 103*9880d681SAndroid Build Coastguard Worker %tmp3 = shl <2 x i64> %tmp1, %tmp2 104*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp3 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vshlQi8(<16 x i8>* %A) nounwind { 108*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi8: 109*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i8 110*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 111*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 112*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp2 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vshlQi16(<8 x i16>* %A) nounwind { 116*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi16: 117*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i16 118*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 119*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 > 120*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vshlQi32(<4 x i32>* %A) nounwind { 124*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi32: 125*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i32 126*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 127*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 > 128*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vshlQi64(<2 x i64>* %A) nounwind { 132*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vshlQi64: 133*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.i64 134*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 135*9880d681SAndroid Build Coastguard Worker %tmp2 = shl <2 x i64> %tmp1, < i64 63, i64 63 > 136*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vlshru8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 140*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru8: 141*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8 142*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8 143*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 144*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 145*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <8 x i8> %tmp1, %tmp2 146*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vlshru16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 150*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru16: 151*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16 152*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16 153*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 154*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 155*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <4 x i16> %tmp1, %tmp2 156*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vlshru32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 160*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru32: 161*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32 162*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32 163*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 164*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 165*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <2 x i32> %tmp1, %tmp2 166*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp3 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vlshru64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 170*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshru64: 171*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64 172*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64 173*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %A 174*9880d681SAndroid Build Coastguard Worker %tmp2 = load <1 x i64>, <1 x i64>* %B 175*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <1 x i64> %tmp1, %tmp2 176*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp3 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vlshri8(<8 x i8>* %A) nounwind { 180*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri8: 181*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u8 182*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 183*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 184*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vlshri16(<4 x i16>* %A) nounwind { 188*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri16: 189*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u16 190*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 191*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 > 192*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vlshri32(<2 x i32>* %A) nounwind { 196*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri32: 197*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u32 198*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 199*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <2 x i32> %tmp1, < i32 31, i32 31 > 200*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vlshri64(<1 x i64>* %A) nounwind { 204*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshri64: 205*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u64 206*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %A 207*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <1 x i64> %tmp1, < i64 63 > 208*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp2 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vlshrQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 212*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu8: 213*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8 214*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u8 215*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 216*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 217*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <16 x i8> %tmp1, %tmp2 218*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vlshrQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 222*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu16: 223*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16 224*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u16 225*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 226*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 227*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <8 x i16> %tmp1, %tmp2 228*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp3 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vlshrQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 232*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu32: 233*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32 234*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u32 235*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 236*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 237*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <4 x i32> %tmp1, %tmp2 238*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp3 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vlshrQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 242*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQu64: 243*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64 244*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.u64 245*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 246*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %B 247*9880d681SAndroid Build Coastguard Worker %tmp3 = lshr <2 x i64> %tmp1, %tmp2 248*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp3 249*9880d681SAndroid Build Coastguard Worker} 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vlshrQi8(<16 x i8>* %A) nounwind { 252*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi8: 253*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u8 254*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 255*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 256*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp2 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vlshrQi16(<8 x i16>* %A) nounwind { 260*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi16: 261*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u16 262*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 263*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 > 264*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vlshrQi32(<4 x i32>* %A) nounwind { 268*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi32: 269*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u32 270*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 271*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 > 272*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vlshrQi64(<2 x i64>* %A) nounwind { 276*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vlshrQi64: 277*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.u64 278*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 279*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <2 x i64> %tmp1, < i64 63, i64 63 > 280*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Worker; Example that requires splitting and expanding a vector shift. 284*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @update(<2 x i64> %val) nounwind readnone { 285*9880d681SAndroid Build Coastguard Workerentry: 286*9880d681SAndroid Build Coastguard Worker %shr = lshr <2 x i64> %val, < i64 2, i64 2 > ; <<2 x i64>> [#uses=1] 287*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shr 288*9880d681SAndroid Build Coastguard Worker} 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vashrs8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 291*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs8: 292*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8 293*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s8 294*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 295*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 296*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <8 x i8> %tmp1, %tmp2 297*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 298*9880d681SAndroid Build Coastguard Worker} 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vashrs16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 301*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs16: 302*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16 303*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s16 304*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 305*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 306*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <4 x i16> %tmp1, %tmp2 307*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 308*9880d681SAndroid Build Coastguard Worker} 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vashrs32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 311*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs32: 312*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32 313*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s32 314*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 315*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 316*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <2 x i32> %tmp1, %tmp2 317*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp3 318*9880d681SAndroid Build Coastguard Worker} 319*9880d681SAndroid Build Coastguard Worker 320*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vashrs64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 321*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrs64: 322*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64 323*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s64 324*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %A 325*9880d681SAndroid Build Coastguard Worker %tmp2 = load <1 x i64>, <1 x i64>* %B 326*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <1 x i64> %tmp1, %tmp2 327*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp3 328*9880d681SAndroid Build Coastguard Worker} 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vashri8(<8 x i8>* %A) nounwind { 331*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri8: 332*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s8 333*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 334*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 335*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vashri16(<4 x i16>* %A) nounwind { 339*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri16: 340*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s16 341*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 342*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 > 343*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 344*9880d681SAndroid Build Coastguard Worker} 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vashri32(<2 x i32>* %A) nounwind { 347*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri32: 348*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s32 349*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 350*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <2 x i32> %tmp1, < i32 31, i32 31 > 351*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 352*9880d681SAndroid Build Coastguard Worker} 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @vashri64(<1 x i64>* %A) nounwind { 355*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashri64: 356*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s64 357*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %A 358*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <1 x i64> %tmp1, < i64 63 > 359*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp2 360*9880d681SAndroid Build Coastguard Worker} 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vashrQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 363*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs8: 364*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s8 365*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s8 366*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 367*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 368*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <16 x i8> %tmp1, %tmp2 369*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 370*9880d681SAndroid Build Coastguard Worker} 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vashrQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 373*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs16: 374*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s16 375*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s16 376*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 377*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 378*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <8 x i16> %tmp1, %tmp2 379*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp3 380*9880d681SAndroid Build Coastguard Worker} 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vashrQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 383*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs32: 384*9880d681SAndroid Build Coastguard Worker;CHECK: vneg.s32 385*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s32 386*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 387*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 388*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <4 x i32> %tmp1, %tmp2 389*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp3 390*9880d681SAndroid Build Coastguard Worker} 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vashrQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 393*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQs64: 394*9880d681SAndroid Build Coastguard Worker;CHECK: vsub.i64 395*9880d681SAndroid Build Coastguard Worker;CHECK: vshl.s64 396*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 397*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %B 398*9880d681SAndroid Build Coastguard Worker %tmp3 = ashr <2 x i64> %tmp1, %tmp2 399*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp3 400*9880d681SAndroid Build Coastguard Worker} 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vashrQi8(<16 x i8>* %A) nounwind { 403*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi8: 404*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s8 405*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 406*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 407*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp2 408*9880d681SAndroid Build Coastguard Worker} 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vashrQi16(<8 x i16>* %A) nounwind { 411*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi16: 412*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s16 413*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 414*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 > 415*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 416*9880d681SAndroid Build Coastguard Worker} 417*9880d681SAndroid Build Coastguard Worker 418*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vashrQi32(<4 x i32>* %A) nounwind { 419*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi32: 420*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s32 421*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 422*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 > 423*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 424*9880d681SAndroid Build Coastguard Worker} 425*9880d681SAndroid Build Coastguard Worker 426*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vashrQi64(<2 x i64>* %A) nounwind { 427*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vashrQi64: 428*9880d681SAndroid Build Coastguard Worker;CHECK: vshr.s64 429*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 430*9880d681SAndroid Build Coastguard Worker %tmp2 = ashr <2 x i64> %tmp1, < i64 63, i64 63 > 431*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 432*9880d681SAndroid Build Coastguard Worker} 433