1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple armeb-eabi -mattr v7,neon -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_2i8_to_2i64( <2 x i8>* %loadaddr, <2 x i64>* %storeaddr ) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_2i8_to_2i64: 5*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.16 {[[REG:d[0-9]+]][0]}, [r0:16] 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev16.8 [[REG]], [[REG]] 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u8 [[QREG:q[0-9]+]], [[REG]] 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u16 [[QREG]], [[REG]] 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u32 [[QREG]], [[REG]] 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vst1.64 {[[REG]], {{d[0-9]+}}}, [r1] 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 12*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i8>, <2 x i8>* %loadaddr 13*9880d681SAndroid Build Coastguard Worker %2 = zext <2 x i8> %1 to <2 x i64> 14*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %storeaddr 15*9880d681SAndroid Build Coastguard Worker ret void 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_2i16_to_2i64( <2 x i16>* %loadaddr, <2 x i64>* %storeaddr ) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_2i16_to_2i64: 20*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {[[REG:d[0-9]+]][0]}, [r0:32] 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev32.16 [[REG]], [[REG]] 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u16 [[QREG:q[0-9]+]], [[REG]] 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u32 [[QREG]], [[REG]] 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vst1.64 {[[REG]], {{d[0-9]+}}}, [r1] 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 26*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i16>, <2 x i16>* %loadaddr 27*9880d681SAndroid Build Coastguard Worker %2 = zext <2 x i16> %1 to <2 x i64> 28*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %storeaddr 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_2i8_to_2i32( <2 x i8>* %loadaddr, <2 x i32>* %storeaddr ) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_2i8_to_2i32: 35*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.16 {[[REG:d[0-9]+]][0]}, [r0:16] 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev16.8 [[REG]], [[REG]] 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u8 [[QREG:q[0-9]+]], [[REG]] 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u16 [[QREG]], [[REG]] 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev64.32 [[REG]], [[REG]] 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vstr [[REG]], [r1] 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 42*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i8>, <2 x i8>* %loadaddr 43*9880d681SAndroid Build Coastguard Worker %2 = zext <2 x i8> %1 to <2 x i32> 44*9880d681SAndroid Build Coastguard Worker store <2 x i32> %2, <2 x i32>* %storeaddr 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_2i16_to_2i32( <2 x i16>* %loadaddr, <2 x i32>* %storeaddr ) { 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_2i16_to_2i32: 50*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {[[REG:d[0-9]+]][0]}, [r0:32] 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev32.16 [[REG]], [[REG]] 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u16 [[QREG:q[0-9]+]], [[REG]] 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev64.32 [[REG]], [[REG]] 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vstr [[REG]], [r1] 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 56*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i16>, <2 x i16>* %loadaddr 57*9880d681SAndroid Build Coastguard Worker %2 = zext <2 x i16> %1 to <2 x i32> 58*9880d681SAndroid Build Coastguard Worker store <2 x i32> %2, <2 x i32>* %storeaddr 59*9880d681SAndroid Build Coastguard Worker ret void 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_2i8_to_2i16( <2 x i8>* %loadaddr, <2 x i16>* %storeaddr ) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_2i8_to_2i16: 64*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.16 {[[REG:d[0-9]+]][0]}, [r0:16] 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev16.8 [[REG]], [[REG]] 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u8 [[QREG:q[0-9]+]], [[REG]] 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u16 [[QREG]], [[REG]] 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev32.16 [[REG]], [[REG]] 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vuzp.16 [[REG]], {{d[0-9]+}} 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev32.16 [[REG]], {{d[0-9]+}} 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vst1.32 {[[REG]][0]}, [r1:32] 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 73*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i8>, <2 x i8>* %loadaddr 74*9880d681SAndroid Build Coastguard Worker %2 = zext <2 x i8> %1 to <2 x i16> 75*9880d681SAndroid Build Coastguard Worker store <2 x i16> %2, <2 x i16>* %storeaddr 76*9880d681SAndroid Build Coastguard Worker ret void 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_4i8_to_4i32( <4 x i8>* %loadaddr, <4 x i32>* %storeaddr ) { 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_4i8_to_4i32: 81*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {[[REG:d[0-9]+]][0]}, [r0:32] 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev32.8 [[REG]], [[REG]] 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u8 [[QREG:q[0-9]+]], [[REG]] 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u16 [[QREG]], [[REG]] 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev64.32 [[QREG]], [[QREG]] 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vst1.64 {[[REG]], {{d[0-9]+}}}, [r1] 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 88*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i8>, <4 x i8>* %loadaddr 89*9880d681SAndroid Build Coastguard Worker %2 = zext <4 x i8> %1 to <4 x i32> 90*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %storeaddr 91*9880d681SAndroid Build Coastguard Worker ret void 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine void @vector_ext_4i8_to_4i16( <4 x i8>* %loadaddr, <4 x i16>* %storeaddr ) { 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vector_ext_4i8_to_4i16: 96*9880d681SAndroid Build Coastguard Worker; CHECK: vld1.32 {[[REG:d[0-9]+]][0]}, [r0:32] 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev32.8 [[REG]], [[REG]] 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovl.u8 [[QREG:q[0-9]+]], [[REG]] 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vrev64.16 [[REG]], [[REG]] 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vstr [[REG]], [r1] 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr 102*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i8>, <4 x i8>* %loadaddr 103*9880d681SAndroid Build Coastguard Worker %2 = zext <4 x i8> %1 to <4 x i16> 104*9880d681SAndroid Build Coastguard Worker store <4 x i16> %2, <4 x i16>* %storeaddr 105*9880d681SAndroid Build Coastguard Worker ret void 106*9880d681SAndroid Build Coastguard Worker} 107