1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march armeb -mtriple arm-eabi -mattr v7,neon -float-abi soft -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march armeb -mtriple arm-eabi -mattr v7,neon -float-abi hard -o - | FileCheck %s -check-prefix CHECK-HARD 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@v2i64 = global <2 x i64> zeroinitializer 5*9880d681SAndroid Build Coastguard Worker@v2i32 = global <2 x i32> zeroinitializer 6*9880d681SAndroid Build Coastguard Worker@v4i32 = global <4 x i32> zeroinitializer 7*9880d681SAndroid Build Coastguard Worker@v4i16 = global <4 x i16> zeroinitializer 8*9880d681SAndroid Build Coastguard Worker@v8i16 = global <8 x i16> zeroinitializer 9*9880d681SAndroid Build Coastguard Worker@v8i8 = global <8 x i8> zeroinitializer 10*9880d681SAndroid Build Coastguard Worker@v16i8 = global <16 x i8> zeroinitializer 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker@v2f32 = global <2 x float> zeroinitializer 13*9880d681SAndroid Build Coastguard Worker@v2f64 = global <2 x double> zeroinitializer 14*9880d681SAndroid Build Coastguard Worker@v4f32 = global <4 x float> zeroinitializer 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; 64 bit conversions 18*9880d681SAndroid Build Coastguard Workerdefine void @conv_i64_to_v8i8( i64 %val, <8 x i8>* %store ) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i64_to_v8i8: 20*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.8 21*9880d681SAndroid Build Coastguard Worker %v = bitcast i64 %val to <8 x i8> 22*9880d681SAndroid Build Coastguard Worker %w = load <8 x i8>, <8 x i8>* @v8i8 23*9880d681SAndroid Build Coastguard Worker %a = add <8 x i8> %v, %w 24*9880d681SAndroid Build Coastguard Worker store <8 x i8> %a, <8 x i8>* %store 25*9880d681SAndroid Build Coastguard Worker ret void 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine void @conv_v8i8_to_i64( <8 x i8>* %load, <8 x i8>* %store ) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v8i8_to_i64: 30*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.8 31*9880d681SAndroid Build Coastguard Worker %v = load <8 x i8>, <8 x i8>* %load 32*9880d681SAndroid Build Coastguard Worker %w = load <8 x i8>, <8 x i8>* @v8i8 33*9880d681SAndroid Build Coastguard Worker %a = add <8 x i8> %v, %w 34*9880d681SAndroid Build Coastguard Worker %f = bitcast <8 x i8> %a to i64 35*9880d681SAndroid Build Coastguard Worker call void @conv_i64_to_v8i8( i64 %f, <8 x i8>* %store ) 36*9880d681SAndroid Build Coastguard Worker ret void 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine void @conv_i64_to_v4i16( i64 %val, <4 x i16>* %store ) { 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i64_to_v4i16: 41*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.16 42*9880d681SAndroid Build Coastguard Worker %v = bitcast i64 %val to <4 x i16> 43*9880d681SAndroid Build Coastguard Worker %w = load <4 x i16>, <4 x i16>* @v4i16 44*9880d681SAndroid Build Coastguard Worker %a = add <4 x i16> %v, %w 45*9880d681SAndroid Build Coastguard Worker store <4 x i16> %a, <4 x i16>* %store 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine void @conv_v4i16_to_i64( <4 x i16>* %load, <4 x i16>* %store ) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v4i16_to_i64: 51*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.16 52*9880d681SAndroid Build Coastguard Worker %v = load <4 x i16>, <4 x i16>* %load 53*9880d681SAndroid Build Coastguard Worker %w = load <4 x i16>, <4 x i16>* @v4i16 54*9880d681SAndroid Build Coastguard Worker %a = add <4 x i16> %v, %w 55*9880d681SAndroid Build Coastguard Worker %f = bitcast <4 x i16> %a to i64 56*9880d681SAndroid Build Coastguard Worker call void @conv_i64_to_v4i16( i64 %f, <4 x i16>* %store ) 57*9880d681SAndroid Build Coastguard Worker ret void 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine void @conv_i64_to_v2i32( i64 %val, <2 x i32>* %store ) { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i64_to_v2i32: 62*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 63*9880d681SAndroid Build Coastguard Worker %v = bitcast i64 %val to <2 x i32> 64*9880d681SAndroid Build Coastguard Worker %w = load <2 x i32>, <2 x i32>* @v2i32 65*9880d681SAndroid Build Coastguard Worker %a = add <2 x i32> %v, %w 66*9880d681SAndroid Build Coastguard Worker store <2 x i32> %a, <2 x i32>* %store 67*9880d681SAndroid Build Coastguard Worker ret void 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine void @conv_v2i32_to_i64( <2 x i32>* %load, <2 x i32>* %store ) { 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v2i32_to_i64: 72*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 73*9880d681SAndroid Build Coastguard Worker %v = load <2 x i32>, <2 x i32>* %load 74*9880d681SAndroid Build Coastguard Worker %w = load <2 x i32>, <2 x i32>* @v2i32 75*9880d681SAndroid Build Coastguard Worker %a = add <2 x i32> %v, %w 76*9880d681SAndroid Build Coastguard Worker %f = bitcast <2 x i32> %a to i64 77*9880d681SAndroid Build Coastguard Worker call void @conv_i64_to_v2i32( i64 %f, <2 x i32>* %store ) 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker} 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerdefine void @conv_i64_to_v2f32( i64 %val, <2 x float>* %store ) { 82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i64_to_v2f32: 83*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 84*9880d681SAndroid Build Coastguard Worker %v = bitcast i64 %val to <2 x float> 85*9880d681SAndroid Build Coastguard Worker %w = load <2 x float>, <2 x float>* @v2f32 86*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x float> %v, %w 87*9880d681SAndroid Build Coastguard Worker store <2 x float> %a, <2 x float>* %store 88*9880d681SAndroid Build Coastguard Worker ret void 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine void @conv_v2f32_to_i64( <2 x float>* %load, <2 x float>* %store ) { 92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v2f32_to_i64: 93*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 94*9880d681SAndroid Build Coastguard Worker %v = load <2 x float>, <2 x float>* %load 95*9880d681SAndroid Build Coastguard Worker %w = load <2 x float>, <2 x float>* @v2f32 96*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x float> %v, %w 97*9880d681SAndroid Build Coastguard Worker %f = bitcast <2 x float> %a to i64 98*9880d681SAndroid Build Coastguard Worker call void @conv_i64_to_v2f32( i64 %f, <2 x float>* %store ) 99*9880d681SAndroid Build Coastguard Worker ret void 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine void @conv_f64_to_v8i8( double %val, <8 x i8>* %store ) { 103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f64_to_v8i8: 104*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.8 105*9880d681SAndroid Build Coastguard Worker %v = bitcast double %val to <8 x i8> 106*9880d681SAndroid Build Coastguard Worker %w = load <8 x i8>, <8 x i8>* @v8i8 107*9880d681SAndroid Build Coastguard Worker %a = add <8 x i8> %v, %w 108*9880d681SAndroid Build Coastguard Worker store <8 x i8> %a, <8 x i8>* %store 109*9880d681SAndroid Build Coastguard Worker ret void 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine void @conv_v8i8_to_f64( <8 x i8>* %load, <8 x i8>* %store ) { 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v8i8_to_f64: 114*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.8 115*9880d681SAndroid Build Coastguard Worker %v = load <8 x i8>, <8 x i8>* %load 116*9880d681SAndroid Build Coastguard Worker %w = load <8 x i8>, <8 x i8>* @v8i8 117*9880d681SAndroid Build Coastguard Worker %a = add <8 x i8> %v, %w 118*9880d681SAndroid Build Coastguard Worker %f = bitcast <8 x i8> %a to double 119*9880d681SAndroid Build Coastguard Worker call void @conv_f64_to_v8i8( double %f, <8 x i8>* %store ) 120*9880d681SAndroid Build Coastguard Worker ret void 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine void @conv_f64_to_v4i16( double %val, <4 x i16>* %store ) { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f64_to_v4i16: 125*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.16 126*9880d681SAndroid Build Coastguard Worker %v = bitcast double %val to <4 x i16> 127*9880d681SAndroid Build Coastguard Worker %w = load <4 x i16>, <4 x i16>* @v4i16 128*9880d681SAndroid Build Coastguard Worker %a = add <4 x i16> %v, %w 129*9880d681SAndroid Build Coastguard Worker store <4 x i16> %a, <4 x i16>* %store 130*9880d681SAndroid Build Coastguard Worker ret void 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine void @conv_v4i16_to_f64( <4 x i16>* %load, <4 x i16>* %store ) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v4i16_to_f64: 135*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.16 136*9880d681SAndroid Build Coastguard Worker %v = load <4 x i16>, <4 x i16>* %load 137*9880d681SAndroid Build Coastguard Worker %w = load <4 x i16>, <4 x i16>* @v4i16 138*9880d681SAndroid Build Coastguard Worker %a = add <4 x i16> %v, %w 139*9880d681SAndroid Build Coastguard Worker %f = bitcast <4 x i16> %a to double 140*9880d681SAndroid Build Coastguard Worker call void @conv_f64_to_v4i16( double %f, <4 x i16>* %store ) 141*9880d681SAndroid Build Coastguard Worker ret void 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerdefine void @conv_f64_to_v2i32( double %val, <2 x i32>* %store ) { 145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f64_to_v2i32: 146*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 147*9880d681SAndroid Build Coastguard Worker %v = bitcast double %val to <2 x i32> 148*9880d681SAndroid Build Coastguard Worker %w = load <2 x i32>, <2 x i32>* @v2i32 149*9880d681SAndroid Build Coastguard Worker %a = add <2 x i32> %v, %w 150*9880d681SAndroid Build Coastguard Worker store <2 x i32> %a, <2 x i32>* %store 151*9880d681SAndroid Build Coastguard Worker ret void 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerdefine void @conv_v2i32_to_f64( <2 x i32>* %load, <2 x i32>* %store ) { 155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v2i32_to_f64: 156*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 157*9880d681SAndroid Build Coastguard Worker %v = load <2 x i32>, <2 x i32>* %load 158*9880d681SAndroid Build Coastguard Worker %w = load <2 x i32>, <2 x i32>* @v2i32 159*9880d681SAndroid Build Coastguard Worker %a = add <2 x i32> %v, %w 160*9880d681SAndroid Build Coastguard Worker %f = bitcast <2 x i32> %a to double 161*9880d681SAndroid Build Coastguard Worker call void @conv_f64_to_v2i32( double %f, <2 x i32>* %store ) 162*9880d681SAndroid Build Coastguard Worker ret void 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine void @conv_f64_to_v2f32( double %val, <2 x float>* %store ) { 166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f64_to_v2f32: 167*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 168*9880d681SAndroid Build Coastguard Worker %v = bitcast double %val to <2 x float> 169*9880d681SAndroid Build Coastguard Worker %w = load <2 x float>, <2 x float>* @v2f32 170*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x float> %v, %w 171*9880d681SAndroid Build Coastguard Worker store <2 x float> %a, <2 x float>* %store 172*9880d681SAndroid Build Coastguard Worker ret void 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine void @conv_v2f32_to_f64( <2 x float>* %load, <2 x float>* %store ) { 176*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v2f32_to_f64: 177*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 178*9880d681SAndroid Build Coastguard Worker %v = load <2 x float>, <2 x float>* %load 179*9880d681SAndroid Build Coastguard Worker %w = load <2 x float>, <2 x float>* @v2f32 180*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x float> %v, %w 181*9880d681SAndroid Build Coastguard Worker %f = bitcast <2 x float> %a to double 182*9880d681SAndroid Build Coastguard Worker call void @conv_f64_to_v2f32( double %f, <2 x float>* %store ) 183*9880d681SAndroid Build Coastguard Worker ret void 184*9880d681SAndroid Build Coastguard Worker} 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker; 128 bit conversions 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine void @conv_i128_to_v16i8( i128 %val, <16 x i8>* %store ) { 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i128_to_v16i8: 191*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.8 192*9880d681SAndroid Build Coastguard Worker %v = bitcast i128 %val to <16 x i8> 193*9880d681SAndroid Build Coastguard Worker %w = load <16 x i8>, <16 x i8>* @v16i8 194*9880d681SAndroid Build Coastguard Worker %a = add <16 x i8> %v, %w 195*9880d681SAndroid Build Coastguard Worker store <16 x i8> %a, <16 x i8>* %store 196*9880d681SAndroid Build Coastguard Worker ret void 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Workerdefine void @conv_v16i8_to_i128( <16 x i8>* %load, <16 x i8>* %store ) { 200*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v16i8_to_i128: 201*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.8 202*9880d681SAndroid Build Coastguard Worker %v = load <16 x i8>, <16 x i8>* %load 203*9880d681SAndroid Build Coastguard Worker %w = load <16 x i8>, <16 x i8>* @v16i8 204*9880d681SAndroid Build Coastguard Worker %a = add <16 x i8> %v, %w 205*9880d681SAndroid Build Coastguard Worker %f = bitcast <16 x i8> %a to i128 206*9880d681SAndroid Build Coastguard Worker call void @conv_i128_to_v16i8( i128 %f, <16 x i8>* %store ) 207*9880d681SAndroid Build Coastguard Worker ret void 208*9880d681SAndroid Build Coastguard Worker} 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Workerdefine void @conv_i128_to_v8i16( i128 %val, <8 x i16>* %store ) { 211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i128_to_v8i16: 212*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.16 213*9880d681SAndroid Build Coastguard Worker %v = bitcast i128 %val to <8 x i16> 214*9880d681SAndroid Build Coastguard Worker %w = load <8 x i16>, <8 x i16>* @v8i16 215*9880d681SAndroid Build Coastguard Worker %a = add <8 x i16> %v, %w 216*9880d681SAndroid Build Coastguard Worker store <8 x i16> %a, <8 x i16>* %store 217*9880d681SAndroid Build Coastguard Worker ret void 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine void @conv_v8i16_to_i128( <8 x i16>* %load, <8 x i16>* %store ) { 221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v8i16_to_i128: 222*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.16 223*9880d681SAndroid Build Coastguard Worker %v = load <8 x i16>, <8 x i16>* %load 224*9880d681SAndroid Build Coastguard Worker %w = load <8 x i16>, <8 x i16>* @v8i16 225*9880d681SAndroid Build Coastguard Worker %a = add <8 x i16> %v, %w 226*9880d681SAndroid Build Coastguard Worker %f = bitcast <8 x i16> %a to i128 227*9880d681SAndroid Build Coastguard Worker call void @conv_i128_to_v8i16( i128 %f, <8 x i16>* %store ) 228*9880d681SAndroid Build Coastguard Worker ret void 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine void @conv_i128_to_v4i32( i128 %val, <4 x i32>* %store ) { 232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i128_to_v4i32: 233*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 234*9880d681SAndroid Build Coastguard Worker %v = bitcast i128 %val to <4 x i32> 235*9880d681SAndroid Build Coastguard Worker %w = load <4 x i32>, <4 x i32>* @v4i32 236*9880d681SAndroid Build Coastguard Worker %a = add <4 x i32> %v, %w 237*9880d681SAndroid Build Coastguard Worker store <4 x i32> %a, <4 x i32>* %store 238*9880d681SAndroid Build Coastguard Worker ret void 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine void @conv_v4i32_to_i128( <4 x i32>* %load, <4 x i32>* %store ) { 242*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v4i32_to_i128: 243*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 244*9880d681SAndroid Build Coastguard Worker %v = load <4 x i32>, <4 x i32>* %load 245*9880d681SAndroid Build Coastguard Worker %w = load <4 x i32>, <4 x i32>* @v4i32 246*9880d681SAndroid Build Coastguard Worker %a = add <4 x i32> %v, %w 247*9880d681SAndroid Build Coastguard Worker %f = bitcast <4 x i32> %a to i128 248*9880d681SAndroid Build Coastguard Worker call void @conv_i128_to_v4i32( i128 %f, <4 x i32>* %store ) 249*9880d681SAndroid Build Coastguard Worker ret void 250*9880d681SAndroid Build Coastguard Worker} 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerdefine void @conv_i128_to_v4f32( i128 %val, <4 x float>* %store ) { 253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_i128_to_v4f32: 254*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 255*9880d681SAndroid Build Coastguard Worker %v = bitcast i128 %val to <4 x float> 256*9880d681SAndroid Build Coastguard Worker %w = load <4 x float>, <4 x float>* @v4f32 257*9880d681SAndroid Build Coastguard Worker %a = fadd <4 x float> %v, %w 258*9880d681SAndroid Build Coastguard Worker store <4 x float> %a, <4 x float>* %store 259*9880d681SAndroid Build Coastguard Worker ret void 260*9880d681SAndroid Build Coastguard Worker} 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerdefine void @conv_v4f32_to_i128( <4 x float>* %load, <4 x float>* %store ) { 263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v4f32_to_i128: 264*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 265*9880d681SAndroid Build Coastguard Worker %v = load <4 x float>, <4 x float>* %load 266*9880d681SAndroid Build Coastguard Worker %w = load <4 x float>, <4 x float>* @v4f32 267*9880d681SAndroid Build Coastguard Worker %a = fadd <4 x float> %v, %w 268*9880d681SAndroid Build Coastguard Worker %f = bitcast <4 x float> %a to i128 269*9880d681SAndroid Build Coastguard Worker call void @conv_i128_to_v4f32( i128 %f, <4 x float>* %store ) 270*9880d681SAndroid Build Coastguard Worker ret void 271*9880d681SAndroid Build Coastguard Worker} 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Workerdefine void @conv_f128_to_v2f64( fp128 %val, <2 x double>* %store ) { 274*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f128_to_v2f64: 275*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 276*9880d681SAndroid Build Coastguard Worker %v = bitcast fp128 %val to <2 x double> 277*9880d681SAndroid Build Coastguard Worker %w = load <2 x double>, <2 x double>* @v2f64 278*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x double> %v, %w 279*9880d681SAndroid Build Coastguard Worker store <2 x double> %a, <2 x double>* %store 280*9880d681SAndroid Build Coastguard Worker ret void 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Workerdefine void @conv_v2f64_to_f128( <2 x double>* %load, <2 x double>* %store ) { 284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v2f64_to_f128: 285*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 286*9880d681SAndroid Build Coastguard Worker %v = load <2 x double>, <2 x double>* %load 287*9880d681SAndroid Build Coastguard Worker %w = load <2 x double>, <2 x double>* @v2f64 288*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x double> %v, %w 289*9880d681SAndroid Build Coastguard Worker %f = bitcast <2 x double> %a to fp128 290*9880d681SAndroid Build Coastguard Worker call void @conv_f128_to_v2f64( fp128 %f, <2 x double>* %store ) 291*9880d681SAndroid Build Coastguard Worker ret void 292*9880d681SAndroid Build Coastguard Worker} 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Workerdefine void @conv_f128_to_v16i8( fp128 %val, <16 x i8>* %store ) { 295*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f128_to_v16i8: 296*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.8 297*9880d681SAndroid Build Coastguard Worker %v = bitcast fp128 %val to <16 x i8> 298*9880d681SAndroid Build Coastguard Worker %w = load <16 x i8>, <16 x i8>* @v16i8 299*9880d681SAndroid Build Coastguard Worker %a = add <16 x i8> %v, %w 300*9880d681SAndroid Build Coastguard Worker store <16 x i8> %a, <16 x i8>* %store 301*9880d681SAndroid Build Coastguard Worker ret void 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Workerdefine void @conv_v16i8_to_f128( <16 x i8>* %load, <16 x i8>* %store ) { 305*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v16i8_to_f128: 306*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.8 307*9880d681SAndroid Build Coastguard Worker %v = load <16 x i8>, <16 x i8>* %load 308*9880d681SAndroid Build Coastguard Worker %w = load <16 x i8>, <16 x i8>* @v16i8 309*9880d681SAndroid Build Coastguard Worker %a = add <16 x i8> %v, %w 310*9880d681SAndroid Build Coastguard Worker %f = bitcast <16 x i8> %a to fp128 311*9880d681SAndroid Build Coastguard Worker call void @conv_f128_to_v16i8( fp128 %f, <16 x i8>* %store ) 312*9880d681SAndroid Build Coastguard Worker ret void 313*9880d681SAndroid Build Coastguard Worker} 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Workerdefine void @conv_f128_to_v8i16( fp128 %val, <8 x i16>* %store ) { 316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f128_to_v8i16: 317*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.16 318*9880d681SAndroid Build Coastguard Worker %v = bitcast fp128 %val to <8 x i16> 319*9880d681SAndroid Build Coastguard Worker %w = load <8 x i16>, <8 x i16>* @v8i16 320*9880d681SAndroid Build Coastguard Worker %a = add <8 x i16> %v, %w 321*9880d681SAndroid Build Coastguard Worker store <8 x i16> %a, <8 x i16>* %store 322*9880d681SAndroid Build Coastguard Worker ret void 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdefine void @conv_v8i16_to_f128( <8 x i16>* %load, <8 x i16>* %store ) { 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v8i16_to_f128: 327*9880d681SAndroid Build Coastguard Worker; CHECK: vrev32.16 328*9880d681SAndroid Build Coastguard Worker %v = load <8 x i16>, <8 x i16>* %load 329*9880d681SAndroid Build Coastguard Worker %w = load <8 x i16>, <8 x i16>* @v8i16 330*9880d681SAndroid Build Coastguard Worker %a = add <8 x i16> %v, %w 331*9880d681SAndroid Build Coastguard Worker %f = bitcast <8 x i16> %a to fp128 332*9880d681SAndroid Build Coastguard Worker call void @conv_f128_to_v8i16( fp128 %f, <8 x i16>* %store ) 333*9880d681SAndroid Build Coastguard Worker ret void 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Workerdefine void @conv_f128_to_v4f32( fp128 %val, <4 x float>* %store ) { 337*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_f128_to_v4f32: 338*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 339*9880d681SAndroid Build Coastguard Worker %v = bitcast fp128 %val to <4 x float> 340*9880d681SAndroid Build Coastguard Worker %w = load <4 x float>, <4 x float>* @v4f32 341*9880d681SAndroid Build Coastguard Worker %a = fadd <4 x float> %v, %w 342*9880d681SAndroid Build Coastguard Worker store <4 x float> %a, <4 x float>* %store 343*9880d681SAndroid Build Coastguard Worker ret void 344*9880d681SAndroid Build Coastguard Worker} 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Workerdefine void @conv_v4f32_to_f128( <4 x float>* %load, <4 x float>* %store ) { 347*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: conv_v4f32_to_f128: 348*9880d681SAndroid Build Coastguard Worker; CHECK: vrev64.32 349*9880d681SAndroid Build Coastguard Worker %v = load <4 x float>, <4 x float>* %load 350*9880d681SAndroid Build Coastguard Worker %w = load <4 x float>, <4 x float>* @v4f32 351*9880d681SAndroid Build Coastguard Worker %a = fadd <4 x float> %v, %w 352*9880d681SAndroid Build Coastguard Worker %f = bitcast <4 x float> %a to fp128 353*9880d681SAndroid Build Coastguard Worker call void @conv_f128_to_v4f32( fp128 %f, <4 x float>* %store ) 354*9880d681SAndroid Build Coastguard Worker ret void 355*9880d681SAndroid Build Coastguard Worker} 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Workerdefine void @arg_v4i32( <4 x i32> %var, <4 x i32>* %store ) { 358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_v4i32: 359*9880d681SAndroid Build Coastguard Worker; CHECK: vmov [[REG2:d[0-9]+]], r3, r2 360*9880d681SAndroid Build Coastguard Worker; CHECK: vmov [[REG1:d[0-9]+]], r1, r0 361*9880d681SAndroid Build Coastguard Worker; CHECK: vst1.64 {[[REG1]], [[REG2]]}, 362*9880d681SAndroid Build Coastguard Worker; CHECK-HARD-LABEL: arg_v4i32: 363*9880d681SAndroid Build Coastguard Worker; CHECK-HARD-NOT: vmov 364*9880d681SAndroid Build Coastguard Worker; CHECK-HARD: vst1.64 {d0, d1} 365*9880d681SAndroid Build Coastguard Worker store <4 x i32> %var, <4 x i32>* %store 366*9880d681SAndroid Build Coastguard Worker ret void 367*9880d681SAndroid Build Coastguard Worker} 368*9880d681SAndroid Build Coastguard Worker 369*9880d681SAndroid Build Coastguard Workerdefine void @arg_v8i16( <8 x i16> %var, <8 x i16>* %store ) { 370*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_v8i16: 371*9880d681SAndroid Build Coastguard Worker; CHECK: vmov [[REG2:d[0-9]+]], r3, r2 372*9880d681SAndroid Build Coastguard Worker; CHECK: vmov [[REG1:d[0-9]+]], r1, r0 373*9880d681SAndroid Build Coastguard Worker; CHECK: vst1.64 {[[REG1]], [[REG2]]}, 374*9880d681SAndroid Build Coastguard Worker; CHECK-HARD-LABEL: arg_v8i16: 375*9880d681SAndroid Build Coastguard Worker; CHECK-HARD-NOT: vmov 376*9880d681SAndroid Build Coastguard Worker; CHECK-HARD: vst1.64 {d0, d1} 377*9880d681SAndroid Build Coastguard Worker store <8 x i16> %var, <8 x i16>* %store 378*9880d681SAndroid Build Coastguard Worker ret void 379*9880d681SAndroid Build Coastguard Worker} 380*9880d681SAndroid Build Coastguard Worker 381*9880d681SAndroid Build Coastguard Workerdefine void @arg_v16i8( <16 x i8> %var, <16 x i8>* %store ) { 382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: arg_v16i8: 383*9880d681SAndroid Build Coastguard Worker; CHECK: vmov [[REG2:d[0-9]+]], r3, r2 384*9880d681SAndroid Build Coastguard Worker; CHECK: vmov [[REG1:d[0-9]+]], r1, r0 385*9880d681SAndroid Build Coastguard Worker; CHECK: vst1.64 {[[REG1]], [[REG2]]}, 386*9880d681SAndroid Build Coastguard Worker; CHECK-HARD-LABEL: arg_v16i8: 387*9880d681SAndroid Build Coastguard Worker; CHECK-HARD-NOT: vmov 388*9880d681SAndroid Build Coastguard Worker; CHECK-HARD: vst1.64 {d0, d1} 389*9880d681SAndroid Build Coastguard Worker store <16 x i8> %var, <16 x i8>* %store 390*9880d681SAndroid Build Coastguard Worker ret void 391*9880d681SAndroid Build Coastguard Worker} 392*9880d681SAndroid Build Coastguard Worker 393