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> @v_movi8() nounwind { 4*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi8: 5*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i8 d{{.*}}, #0x8 6*9880d681SAndroid Build Coastguard Worker ret <8 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 > 7*9880d681SAndroid Build Coastguard Worker} 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @v_movi16a() nounwind { 10*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi16a: 11*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i16 d{{.*}}, #0x10 12*9880d681SAndroid Build Coastguard Worker ret <4 x i16> < i16 16, i16 16, i16 16, i16 16 > 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @v_movi16b() nounwind { 16*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi16b: 17*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i16 d{{.*}}, #0x1000 18*9880d681SAndroid Build Coastguard Worker ret <4 x i16> < i16 4096, i16 4096, i16 4096, i16 4096 > 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @v_mvni16a() nounwind { 22*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni16a: 23*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i16 d{{.*}}, #0x10 24*9880d681SAndroid Build Coastguard Worker ret <4 x i16> < i16 65519, i16 65519, i16 65519, i16 65519 > 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @v_mvni16b() nounwind { 28*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni16b: 29*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i16 d{{.*}}, #0x1000 30*9880d681SAndroid Build Coastguard Worker ret <4 x i16> < i16 61439, i16 61439, i16 61439, i16 61439 > 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_movi32a() nounwind { 34*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi32a: 35*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 d{{.*}}, #0x20 36*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 32, i32 32 > 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_movi32b() nounwind { 40*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi32b: 41*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 d{{.*}}, #0x2000 42*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 8192, i32 8192 > 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_movi32c() nounwind { 46*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi32c: 47*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 d{{.*}}, #0x200000 48*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 2097152, i32 2097152 > 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_movi32d() nounwind { 52*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi32d: 53*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 d{{.*}}, #0x20000000 54*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 536870912, i32 536870912 > 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_movi32e() nounwind { 58*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi32e: 59*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 d{{.*}}, #0x20ff 60*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 8447, i32 8447 > 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_movi32f() nounwind { 64*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi32f: 65*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 d{{.*}}, #0x20ffff 66*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 2162687, i32 2162687 > 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_mvni32a() nounwind { 70*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni32a: 71*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i32 d{{.*}}, #0x20 72*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 4294967263, i32 4294967263 > 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_mvni32b() nounwind { 76*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni32b: 77*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i32 d{{.*}}, #0x2000 78*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 4294959103, i32 4294959103 > 79*9880d681SAndroid Build Coastguard Worker} 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_mvni32c() nounwind { 82*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni32c: 83*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i32 d{{.*}}, #0x200000 84*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 4292870143, i32 4292870143 > 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_mvni32d() nounwind { 88*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni32d: 89*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i32 d{{.*}}, #0x20000000 90*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 3758096383, i32 3758096383 > 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_mvni32e() nounwind { 94*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni32e: 95*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i32 d{{.*}}, #0x20ff 96*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 4294958848, i32 4294958848 > 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v_mvni32f() nounwind { 100*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mvni32f: 101*9880d681SAndroid Build Coastguard Worker;CHECK: vmvn.i32 d{{.*}}, #0x20ffff 102*9880d681SAndroid Build Coastguard Worker ret <2 x i32> < i32 4292804608, i32 4292804608 > 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @v_movi64() nounwind { 106*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movi64: 107*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i64 d{{.*}}, #0xff0000ff0000ffff 108*9880d681SAndroid Build Coastguard Worker ret <1 x i64> < i64 18374687574888349695 > 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @v_movQi8() nounwind { 112*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi8: 113*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i8 q{{.*}}, #0x8 114*9880d681SAndroid Build Coastguard Worker ret <16 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 > 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @v_movQi16a() nounwind { 118*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi16a: 119*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i16 q{{.*}}, #0x10 120*9880d681SAndroid Build Coastguard Worker ret <8 x i16> < i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16 > 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @v_movQi16b() nounwind { 124*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi16b: 125*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i16 q{{.*}}, #0x1000 126*9880d681SAndroid Build Coastguard Worker ret <8 x i16> < i16 4096, i16 4096, i16 4096, i16 4096, i16 4096, i16 4096, i16 4096, i16 4096 > 127*9880d681SAndroid Build Coastguard Worker} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v_movQi32a() nounwind { 130*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi32a: 131*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 q{{.*}}, #0x20 132*9880d681SAndroid Build Coastguard Worker ret <4 x i32> < i32 32, i32 32, i32 32, i32 32 > 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v_movQi32b() nounwind { 136*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi32b: 137*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 q{{.*}}, #0x2000 138*9880d681SAndroid Build Coastguard Worker ret <4 x i32> < i32 8192, i32 8192, i32 8192, i32 8192 > 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v_movQi32c() nounwind { 142*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi32c: 143*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 q{{.*}}, #0x200000 144*9880d681SAndroid Build Coastguard Worker ret <4 x i32> < i32 2097152, i32 2097152, i32 2097152, i32 2097152 > 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v_movQi32d() nounwind { 148*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi32d: 149*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 q{{.*}}, #0x20000000 150*9880d681SAndroid Build Coastguard Worker ret <4 x i32> < i32 536870912, i32 536870912, i32 536870912, i32 536870912 > 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v_movQi32e() nounwind { 154*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi32e: 155*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 q{{.*}}, #0x20ff 156*9880d681SAndroid Build Coastguard Worker ret <4 x i32> < i32 8447, i32 8447, i32 8447, i32 8447 > 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v_movQi32f() nounwind { 160*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi32f: 161*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i32 q{{.*}}, #0x20ffff 162*9880d681SAndroid Build Coastguard Worker ret <4 x i32> < i32 2162687, i32 2162687, i32 2162687, i32 2162687 > 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @v_movQi64() nounwind { 166*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_movQi64: 167*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i64 q{{.*}}, #0xff0000ff0000ffff 168*9880d681SAndroid Build Coastguard Worker ret <2 x i64> < i64 18374687574888349695, i64 18374687574888349695 > 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker; Check for correct assembler printing for immediate values. 172*9880d681SAndroid Build Coastguard Worker%struct.int8x8_t = type { <8 x i8> } 173*9880d681SAndroid Build Coastguard Workerdefine void @vdupn128(%struct.int8x8_t* noalias nocapture sret %agg.result) nounwind { 174*9880d681SAndroid Build Coastguard Workerentry: 175*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vdupn128: 176*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i8 d{{.*}}, #0x80 177*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds %struct.int8x8_t, %struct.int8x8_t* %agg.result, i32 0, i32 0 ; <<8 x i8>*> [#uses=1] 178*9880d681SAndroid Build Coastguard Worker store <8 x i8> <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>, <8 x i8>* %0, align 8 179*9880d681SAndroid Build Coastguard Worker ret void 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine void @vdupnneg75(%struct.int8x8_t* noalias nocapture sret %agg.result) nounwind { 183*9880d681SAndroid Build Coastguard Workerentry: 184*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vdupnneg75: 185*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.i8 d{{.*}}, #0xb5 186*9880d681SAndroid Build Coastguard Worker %0 = getelementptr inbounds %struct.int8x8_t, %struct.int8x8_t* %agg.result, i32 0, i32 0 ; <<8 x i8>*> [#uses=1] 187*9880d681SAndroid Build Coastguard Worker store <8 x i8> <i8 -75, i8 -75, i8 -75, i8 -75, i8 -75, i8 -75, i8 -75, i8 -75>, <8 x i8>* %0, align 8 188*9880d681SAndroid Build Coastguard Worker ret void 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vmovls8(<8 x i8>* %A) nounwind { 192*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovls8: 193*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl.s8 194*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 195*9880d681SAndroid Build Coastguard Worker %tmp2 = sext <8 x i8> %tmp1 to <8 x i16> 196*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vmovls16(<4 x i16>* %A) nounwind { 200*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovls16: 201*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl.s16 202*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 203*9880d681SAndroid Build Coastguard Worker %tmp2 = sext <4 x i16> %tmp1 to <4 x i32> 204*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vmovls32(<2 x i32>* %A) nounwind { 208*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovls32: 209*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl.s32 210*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 211*9880d681SAndroid Build Coastguard Worker %tmp2 = sext <2 x i32> %tmp1 to <2 x i64> 212*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vmovlu8(<8 x i8>* %A) nounwind { 216*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovlu8: 217*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl.u8 218*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 219*9880d681SAndroid Build Coastguard Worker %tmp2 = zext <8 x i8> %tmp1 to <8 x i16> 220*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vmovlu16(<4 x i16>* %A) nounwind { 224*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovlu16: 225*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl.u16 226*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 227*9880d681SAndroid Build Coastguard Worker %tmp2 = zext <4 x i16> %tmp1 to <4 x i32> 228*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vmovlu32(<2 x i32>* %A) nounwind { 232*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovlu32: 233*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl.u32 234*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 235*9880d681SAndroid Build Coastguard Worker %tmp2 = zext <2 x i32> %tmp1 to <2 x i64> 236*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vmovni16(<8 x i16>* %A) nounwind { 240*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovni16: 241*9880d681SAndroid Build Coastguard Worker;CHECK: vmovn.i16 242*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 243*9880d681SAndroid Build Coastguard Worker %tmp2 = trunc <8 x i16> %tmp1 to <8 x i8> 244*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vmovni32(<4 x i32>* %A) nounwind { 248*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovni32: 249*9880d681SAndroid Build Coastguard Worker;CHECK: vmovn.i32 250*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 251*9880d681SAndroid Build Coastguard Worker %tmp2 = trunc <4 x i32> %tmp1 to <4 x i16> 252*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 253*9880d681SAndroid Build Coastguard Worker} 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vmovni64(<2 x i64>* %A) nounwind { 256*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vmovni64: 257*9880d681SAndroid Build Coastguard Worker;CHECK: vmovn.i64 258*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 259*9880d681SAndroid Build Coastguard Worker %tmp2 = trunc <2 x i64> %tmp1 to <2 x i32> 260*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 261*9880d681SAndroid Build Coastguard Worker} 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vqmovns16(<8 x i16>* %A) nounwind { 264*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovns16: 265*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovn.s16 266*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 267*9880d681SAndroid Build Coastguard Worker %tmp2 = call <8 x i8> @llvm.arm.neon.vqmovns.v8i8(<8 x i16> %tmp1) 268*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 269*9880d681SAndroid Build Coastguard Worker} 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vqmovns32(<4 x i32>* %A) nounwind { 272*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovns32: 273*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovn.s32 274*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 275*9880d681SAndroid Build Coastguard Worker %tmp2 = call <4 x i16> @llvm.arm.neon.vqmovns.v4i16(<4 x i32> %tmp1) 276*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vqmovns64(<2 x i64>* %A) nounwind { 280*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovns64: 281*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovn.s64 282*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 283*9880d681SAndroid Build Coastguard Worker %tmp2 = call <2 x i32> @llvm.arm.neon.vqmovns.v2i32(<2 x i64> %tmp1) 284*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 285*9880d681SAndroid Build Coastguard Worker} 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vqmovnu16(<8 x i16>* %A) nounwind { 288*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovnu16: 289*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovn.u16 290*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 291*9880d681SAndroid Build Coastguard Worker %tmp2 = call <8 x i8> @llvm.arm.neon.vqmovnu.v8i8(<8 x i16> %tmp1) 292*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vqmovnu32(<4 x i32>* %A) nounwind { 296*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovnu32: 297*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovn.u32 298*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 299*9880d681SAndroid Build Coastguard Worker %tmp2 = call <4 x i16> @llvm.arm.neon.vqmovnu.v4i16(<4 x i32> %tmp1) 300*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 301*9880d681SAndroid Build Coastguard Worker} 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vqmovnu64(<2 x i64>* %A) nounwind { 304*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovnu64: 305*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovn.u64 306*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 307*9880d681SAndroid Build Coastguard Worker %tmp2 = call <2 x i32> @llvm.arm.neon.vqmovnu.v2i32(<2 x i64> %tmp1) 308*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @vqmovuns16(<8 x i16>* %A) nounwind { 312*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovuns16: 313*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovun.s16 314*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 315*9880d681SAndroid Build Coastguard Worker %tmp2 = call <8 x i8> @llvm.arm.neon.vqmovnsu.v8i8(<8 x i16> %tmp1) 316*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @vqmovuns32(<4 x i32>* %A) nounwind { 320*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovuns32: 321*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovun.s32 322*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 323*9880d681SAndroid Build Coastguard Worker %tmp2 = call <4 x i16> @llvm.arm.neon.vqmovnsu.v4i16(<4 x i32> %tmp1) 324*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 325*9880d681SAndroid Build Coastguard Worker} 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @vqmovuns64(<2 x i64>* %A) nounwind { 328*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: vqmovuns64: 329*9880d681SAndroid Build Coastguard Worker;CHECK: vqmovun.s64 330*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 331*9880d681SAndroid Build Coastguard Worker %tmp2 = call <2 x i32> @llvm.arm.neon.vqmovnsu.v2i32(<2 x i64> %tmp1) 332*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 333*9880d681SAndroid Build Coastguard Worker} 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.arm.neon.vqmovns.v8i8(<8 x i16>) nounwind readnone 336*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqmovns.v4i16(<4 x i32>) nounwind readnone 337*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.arm.neon.vqmovns.v2i32(<2 x i64>) nounwind readnone 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.arm.neon.vqmovnu.v8i8(<8 x i16>) nounwind readnone 340*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqmovnu.v4i16(<4 x i32>) nounwind readnone 341*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.arm.neon.vqmovnu.v2i32(<2 x i64>) nounwind readnone 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.arm.neon.vqmovnsu.v8i8(<8 x i16>) nounwind readnone 344*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqmovnsu.v4i16(<4 x i32>) nounwind readnone 345*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.arm.neon.vqmovnsu.v2i32(<2 x i64>) nounwind readnone 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Worker; Truncating vector stores are not supported. The following should not crash. 348*9880d681SAndroid Build Coastguard Worker; Radar 8598391. 349*9880d681SAndroid Build Coastguard Workerdefine void @noTruncStore(<4 x i32>* %a, <4 x i16>* %b) nounwind { 350*9880d681SAndroid Build Coastguard Worker;CHECK: vmovn 351*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %a, align 16 352*9880d681SAndroid Build Coastguard Worker %tmp2 = trunc <4 x i32> %tmp1 to <4 x i16> 353*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp2, <4 x i16>* %b, align 8 354*9880d681SAndroid Build Coastguard Worker ret void 355*9880d681SAndroid Build Coastguard Worker} 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Worker; Use vmov.f32 to materialize f32 immediate splats 358*9880d681SAndroid Build Coastguard Worker; rdar://10437054 359*9880d681SAndroid Build Coastguard Workerdefine void @v_mov_v2f32(<2 x float>* nocapture %p) nounwind { 360*9880d681SAndroid Build Coastguard Workerentry: 361*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mov_v2f32: 362*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.f32 d{{.*}}, #-1.600000e+01 363*9880d681SAndroid Build Coastguard Worker store <2 x float> <float -1.600000e+01, float -1.600000e+01>, <2 x float>* %p, align 4 364*9880d681SAndroid Build Coastguard Worker ret void 365*9880d681SAndroid Build Coastguard Worker} 366*9880d681SAndroid Build Coastguard Worker 367*9880d681SAndroid Build Coastguard Workerdefine void @v_mov_v4f32(<4 x float>* nocapture %p) nounwind { 368*9880d681SAndroid Build Coastguard Workerentry: 369*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mov_v4f32: 370*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.f32 q{{.*}}, #3.100000e+01 371*9880d681SAndroid Build Coastguard Worker store <4 x float> <float 3.100000e+01, float 3.100000e+01, float 3.100000e+01, float 3.100000e+01>, <4 x float>* %p, align 4 372*9880d681SAndroid Build Coastguard Worker ret void 373*9880d681SAndroid Build Coastguard Worker} 374*9880d681SAndroid Build Coastguard Worker 375*9880d681SAndroid Build Coastguard Workerdefine void @v_mov_v4f32_undef(<4 x float> * nocapture %p) nounwind { 376*9880d681SAndroid Build Coastguard Workerentry: 377*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: v_mov_v4f32_undef: 378*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.f32 q{{.*}}, #1.000000e+00 379*9880d681SAndroid Build Coastguard Worker %a = load <4 x float> , <4 x float> *%p 380*9880d681SAndroid Build Coastguard Worker %b = fadd <4 x float> %a, <float undef, float 1.0, float 1.0, float 1.0> 381*9880d681SAndroid Build Coastguard Worker store <4 x float> %b, <4 x float> *%p 382*9880d681SAndroid Build Coastguard Worker ret void 383*9880d681SAndroid Build Coastguard Worker} 384*9880d681SAndroid Build Coastguard Worker 385*9880d681SAndroid Build Coastguard Worker; Vector any_extends must be selected as either vmovl.u or vmovl.s. 386*9880d681SAndroid Build Coastguard Worker; rdar://10723651 387*9880d681SAndroid Build Coastguard Workerdefine void @any_extend(<4 x i1> %x, <4 x i32> %y) nounwind ssp { 388*9880d681SAndroid Build Coastguard Workerentry: 389*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: any_extend: 390*9880d681SAndroid Build Coastguard Worker;CHECK: vmovl 391*9880d681SAndroid Build Coastguard Worker %and.i186 = zext <4 x i1> %x to <4 x i32> 392*9880d681SAndroid Build Coastguard Worker %add.i185 = sub <4 x i32> %and.i186, %y 393*9880d681SAndroid Build Coastguard Worker %sub.i = sub <4 x i32> %add.i185, zeroinitializer 394*9880d681SAndroid Build Coastguard Worker %add.i = add <4 x i32> %sub.i, zeroinitializer 395*9880d681SAndroid Build Coastguard Worker %vmovn.i = trunc <4 x i32> %add.i to <4 x i16> 396*9880d681SAndroid Build Coastguard Worker tail call void @llvm.arm.neon.vst1.p0i8.v4i16(i8* undef, <4 x i16> %vmovn.i, i32 2) 397*9880d681SAndroid Build Coastguard Worker unreachable 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst1.p0i8.v4i16(i8*, <4 x i16>, i32) nounwind 401