1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vget_high_s8(<16 x i8> %a) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_s8: 5*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 8*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle.i 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_high_s16(<8 x i16> %a) { 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_s16: 13*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 16*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vget_high_s32(<4 x i32> %a) { 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_s32: 21*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 24*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %shuffle.i 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vget_high_s64(<2 x i64> %a) { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_s64: 29*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> <i32 1> 32*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %shuffle.i 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vget_high_u8(<16 x i8> %a) { 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_u8: 37*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 38*9880d681SAndroid Build Coastguard Workerentry: 39*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 40*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle.i 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_high_u16(<8 x i16> %a) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_u16: 45*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 46*9880d681SAndroid Build Coastguard Workerentry: 47*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 48*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vget_high_u32(<4 x i32> %a) { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_u32: 53*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 54*9880d681SAndroid Build Coastguard Workerentry: 55*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 56*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %shuffle.i 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vget_high_u64(<2 x i64> %a) { 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_u64: 61*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 62*9880d681SAndroid Build Coastguard Workerentry: 63*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> <i32 1> 64*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %shuffle.i 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vget_high_p64(<2 x i64> %a) { 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_p64: 69*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 70*9880d681SAndroid Build Coastguard Workerentry: 71*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> <i32 1> 72*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %shuffle.i 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_high_f16(<8 x i16> %a) { 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_f16: 77*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 78*9880d681SAndroid Build Coastguard Workerentry: 79*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 80*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vget_high_f32(<4 x float> %a) { 84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_f32: 85*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 86*9880d681SAndroid Build Coastguard Workerentry: 87*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 2, i32 3> 88*9880d681SAndroid Build Coastguard Worker ret <2 x float> %shuffle.i 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vget_high_p8(<16 x i8> %a) { 92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_p8: 93*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 94*9880d681SAndroid Build Coastguard Workerentry: 95*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 96*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle.i 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_high_p16(<8 x i16> %a) { 100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_p16: 101*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 102*9880d681SAndroid Build Coastguard Workerentry: 103*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 104*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vget_high_f64(<2 x double> %a) { 108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_high_f64: 109*9880d681SAndroid Build Coastguard Worker; CHECK: ext v0.16b, v0.16b, {{v[0-9]+}}.16b, #8 110*9880d681SAndroid Build Coastguard Workerentry: 111*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x double> %a, <2 x double> undef, <1 x i32> <i32 1> 112*9880d681SAndroid Build Coastguard Worker ret <1 x double> %shuffle.i 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vget_low_s8(<16 x i8> %a) { 116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_s8: 117*9880d681SAndroid Build Coastguard Worker; CHECK: ret 118*9880d681SAndroid Build Coastguard Workerentry: 119*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 120*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle.i 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_low_s16(<8 x i16> %a) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_s16: 125*9880d681SAndroid Build Coastguard Worker; CHECK: ret 126*9880d681SAndroid Build Coastguard Workerentry: 127*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 128*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vget_low_s32(<4 x i32> %a) { 132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_s32: 133*9880d681SAndroid Build Coastguard Worker; CHECK: ret 134*9880d681SAndroid Build Coastguard Workerentry: 135*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 0, i32 1> 136*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %shuffle.i 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vget_low_s64(<2 x i64> %a) { 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_s64: 141*9880d681SAndroid Build Coastguard Worker; CHECK: ret 142*9880d681SAndroid Build Coastguard Workerentry: 143*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> zeroinitializer 144*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %shuffle.i 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vget_low_u8(<16 x i8> %a) { 148*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_u8: 149*9880d681SAndroid Build Coastguard Worker; CHECK: ret 150*9880d681SAndroid Build Coastguard Workerentry: 151*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 152*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle.i 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_low_u16(<8 x i16> %a) { 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_u16: 157*9880d681SAndroid Build Coastguard Worker; CHECK: ret 158*9880d681SAndroid Build Coastguard Workerentry: 159*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 160*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vget_low_u32(<4 x i32> %a) { 164*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_u32: 165*9880d681SAndroid Build Coastguard Worker; CHECK: ret 166*9880d681SAndroid Build Coastguard Workerentry: 167*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 0, i32 1> 168*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %shuffle.i 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vget_low_u64(<2 x i64> %a) { 172*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_u64: 173*9880d681SAndroid Build Coastguard Worker; CHECK: ret 174*9880d681SAndroid Build Coastguard Workerentry: 175*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> zeroinitializer 176*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %shuffle.i 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vget_low_p64(<2 x i64> %a) { 180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_p64: 181*9880d681SAndroid Build Coastguard Worker; CHECK: ret 182*9880d681SAndroid Build Coastguard Workerentry: 183*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x i64> %a, <2 x i64> undef, <1 x i32> zeroinitializer 184*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %shuffle.i 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_low_f16(<8 x i16> %a) { 188*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_f16: 189*9880d681SAndroid Build Coastguard Worker; CHECK: ret 190*9880d681SAndroid Build Coastguard Workerentry: 191*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 192*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vget_low_f32(<4 x float> %a) { 196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_f32: 197*9880d681SAndroid Build Coastguard Worker; CHECK: ret 198*9880d681SAndroid Build Coastguard Workerentry: 199*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 0, i32 1> 200*9880d681SAndroid Build Coastguard Worker ret <2 x float> %shuffle.i 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vget_low_p8(<16 x i8> %a) { 204*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_p8: 205*9880d681SAndroid Build Coastguard Worker; CHECK: ret 206*9880d681SAndroid Build Coastguard Workerentry: 207*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 208*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle.i 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vget_low_p16(<8 x i16> %a) { 212*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_p16: 213*9880d681SAndroid Build Coastguard Worker; CHECK: ret 214*9880d681SAndroid Build Coastguard Workerentry: 215*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 216*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle.i 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vget_low_f64(<2 x double> %a) { 220*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vget_low_f64: 221*9880d681SAndroid Build Coastguard Worker; CHECK: ret 222*9880d681SAndroid Build Coastguard Workerentry: 223*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <2 x double> %a, <2 x double> undef, <1 x i32> zeroinitializer 224*9880d681SAndroid Build Coastguard Worker ret <1 x double> %shuffle.i 225*9880d681SAndroid Build Coastguard Worker} 226