1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=x86-64 -mattr=+sse2 < %s | FileCheck --check-prefix=SSE --check-prefix=SSE2 %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=x86-64 -mattr=+sse4.1 < %s | FileCheck --check-prefix=SSE --check-prefix=SSE41 %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=x86-64 -mattr=+avx < %s | FileCheck --check-prefix=AVX %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown" 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; Ensure that the backend no longer emits unnecessary vector insert 8*9880d681SAndroid Build Coastguard Worker; instructions immediately after SSE scalar fp instructions 9*9880d681SAndroid Build Coastguard Worker; like addss or mulss. 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_add_ss(<4 x float> %a, <4 x float> %b) { 12*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_add_ss: 13*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 14*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm1, %xmm0 15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 16*9880d681SAndroid Build Coastguard Worker; 17*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_add_ss: 18*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 19*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm1, %xmm0, %xmm0 20*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 22*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 23*9880d681SAndroid Build Coastguard Worker %add = fadd float %2, %1 24*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %add, i32 0 25*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_sub_ss(<4 x float> %a, <4 x float> %b) { 29*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_sub_ss: 30*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm1, %xmm0 32*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 33*9880d681SAndroid Build Coastguard Worker; 34*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_sub_ss: 35*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 36*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm1, %xmm0, %xmm0 37*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 39*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 40*9880d681SAndroid Build Coastguard Worker %sub = fsub float %2, %1 41*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %sub, i32 0 42*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mul_ss(<4 x float> %a, <4 x float> %b) { 46*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_mul_ss: 47*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 48*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm1, %xmm0 49*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 50*9880d681SAndroid Build Coastguard Worker; 51*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_mul_ss: 52*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 53*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm1, %xmm0, %xmm0 54*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 55*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 56*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 57*9880d681SAndroid Build Coastguard Worker %mul = fmul float %2, %1 58*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %mul, i32 0 59*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_div_ss(<4 x float> %a, <4 x float> %b) { 63*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_div_ss: 64*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 65*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm1, %xmm0 66*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker; 68*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_div_ss: 69*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 70*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm1, %xmm0, %xmm0 71*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 72*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 73*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 74*9880d681SAndroid Build Coastguard Worker %div = fdiv float %2, %1 75*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %div, i32 0 76*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_sqrt_ss(<4 x float> %a) { 80*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_sqrt_ss: 81*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 82*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: sqrtss %xmm0, %xmm1 83*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movss %xmm1, %xmm0 84*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 85*9880d681SAndroid Build Coastguard Worker; 86*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_sqrt_ss: 87*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 88*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sqrtss %xmm0, %xmm1 89*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: blendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] 90*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 91*9880d681SAndroid Build Coastguard Worker; 92*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_sqrt_ss: 93*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsqrtss %xmm0, %xmm0, %xmm1 95*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] 96*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 97*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %a, i32 0 98*9880d681SAndroid Build Coastguard Worker %2 = call float @llvm.sqrt.f32(float %1) 99*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %2, i32 0 100*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.sqrt.f32(float) 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_add_sd(<2 x double> %a, <2 x double> %b) { 105*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_add_sd: 106*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 107*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm1, %xmm0 108*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 109*9880d681SAndroid Build Coastguard Worker; 110*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_add_sd: 111*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 112*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm1, %xmm0, %xmm0 113*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 114*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %b, i32 0 115*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %a, i32 0 116*9880d681SAndroid Build Coastguard Worker %add = fadd double %2, %1 117*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %a, double %add, i32 0 118*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_sub_sd(<2 x double> %a, <2 x double> %b) { 122*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_sub_sd: 123*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 124*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm1, %xmm0 125*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker; 127*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_sub_sd: 128*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 129*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm1, %xmm0, %xmm0 130*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 131*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %b, i32 0 132*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %a, i32 0 133*9880d681SAndroid Build Coastguard Worker %sub = fsub double %2, %1 134*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %a, double %sub, i32 0 135*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_mul_sd(<2 x double> %a, <2 x double> %b) { 139*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_mul_sd: 140*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm1, %xmm0 142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 143*9880d681SAndroid Build Coastguard Worker; 144*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_mul_sd: 145*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 146*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm1, %xmm0, %xmm0 147*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 148*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %b, i32 0 149*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %a, i32 0 150*9880d681SAndroid Build Coastguard Worker %mul = fmul double %2, %1 151*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %a, double %mul, i32 0 152*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_div_sd(<2 x double> %a, <2 x double> %b) { 156*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_div_sd: 157*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 158*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm1, %xmm0 159*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 160*9880d681SAndroid Build Coastguard Worker; 161*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_div_sd: 162*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 163*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm1, %xmm0, %xmm0 164*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 165*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %b, i32 0 166*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %a, i32 0 167*9880d681SAndroid Build Coastguard Worker %div = fdiv double %2, %1 168*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %a, double %div, i32 0 169*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 170*9880d681SAndroid Build Coastguard Worker} 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_sqrt_sd(<2 x double> %a) { 173*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_sqrt_sd: 174*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 175*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: sqrtsd %xmm0, %xmm1 176*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movsd %xmm1, %xmm0 177*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 178*9880d681SAndroid Build Coastguard Worker; 179*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_sqrt_sd: 180*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 181*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsqrtsd %xmm0, %xmm0, %xmm1 182*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovsd %xmm1, %xmm0, %xmm0 183*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 184*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %a, i32 0 185*9880d681SAndroid Build Coastguard Worker %2 = call double @llvm.sqrt.f64(double %1) 186*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %a, double %2, i32 0 187*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.sqrt.f64(double) 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test2_add_ss(<4 x float> %a, <4 x float> %b) { 192*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_add_ss: 193*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 194*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm0, %xmm1 195*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 196*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 197*9880d681SAndroid Build Coastguard Worker; 198*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_add_ss: 199*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 200*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0 201*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 202*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %a, i32 0 203*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %b, i32 0 204*9880d681SAndroid Build Coastguard Worker %add = fadd float %1, %2 205*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %b, float %add, i32 0 206*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 207*9880d681SAndroid Build Coastguard Worker} 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test2_sub_ss(<4 x float> %a, <4 x float> %b) { 210*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_sub_ss: 211*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 212*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm0, %xmm1 213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 215*9880d681SAndroid Build Coastguard Worker; 216*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_sub_ss: 217*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 218*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm0, %xmm1, %xmm0 219*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 220*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %a, i32 0 221*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %b, i32 0 222*9880d681SAndroid Build Coastguard Worker %sub = fsub float %2, %1 223*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %b, float %sub, i32 0 224*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 225*9880d681SAndroid Build Coastguard Worker} 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test2_mul_ss(<4 x float> %a, <4 x float> %b) { 228*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_mul_ss: 229*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm0, %xmm1 231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 233*9880d681SAndroid Build Coastguard Worker; 234*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_mul_ss: 235*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 236*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm0, %xmm1, %xmm0 237*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 238*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %a, i32 0 239*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %b, i32 0 240*9880d681SAndroid Build Coastguard Worker %mul = fmul float %1, %2 241*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %b, float %mul, i32 0 242*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 243*9880d681SAndroid Build Coastguard Worker} 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test2_div_ss(<4 x float> %a, <4 x float> %b) { 246*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_div_ss: 247*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm0, %xmm1 249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 251*9880d681SAndroid Build Coastguard Worker; 252*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_div_ss: 253*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 254*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm0, %xmm1, %xmm0 255*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 256*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %a, i32 0 257*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %b, i32 0 258*9880d681SAndroid Build Coastguard Worker %div = fdiv float %2, %1 259*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %b, float %div, i32 0 260*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 261*9880d681SAndroid Build Coastguard Worker} 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test2_add_sd(<2 x double> %a, <2 x double> %b) { 264*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_add_sd: 265*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 266*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm0, %xmm1 267*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 268*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 269*9880d681SAndroid Build Coastguard Worker; 270*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_add_sd: 271*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 272*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm0, %xmm1, %xmm0 273*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 274*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %a, i32 0 275*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %b, i32 0 276*9880d681SAndroid Build Coastguard Worker %add = fadd double %1, %2 277*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %b, double %add, i32 0 278*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test2_sub_sd(<2 x double> %a, <2 x double> %b) { 282*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_sub_sd: 283*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 284*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm0, %xmm1 285*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 286*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 287*9880d681SAndroid Build Coastguard Worker; 288*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_sub_sd: 289*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 290*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm0, %xmm1, %xmm0 291*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 292*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %a, i32 0 293*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %b, i32 0 294*9880d681SAndroid Build Coastguard Worker %sub = fsub double %2, %1 295*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %b, double %sub, i32 0 296*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test2_mul_sd(<2 x double> %a, <2 x double> %b) { 300*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_mul_sd: 301*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm0, %xmm1 303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 305*9880d681SAndroid Build Coastguard Worker; 306*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_mul_sd: 307*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 308*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm0, %xmm1, %xmm0 309*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 310*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %a, i32 0 311*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %b, i32 0 312*9880d681SAndroid Build Coastguard Worker %mul = fmul double %1, %2 313*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %b, double %mul, i32 0 314*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 315*9880d681SAndroid Build Coastguard Worker} 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test2_div_sd(<2 x double> %a, <2 x double> %b) { 318*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2_div_sd: 319*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 320*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm0, %xmm1 321*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 322*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 323*9880d681SAndroid Build Coastguard Worker; 324*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2_div_sd: 325*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 326*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm0, %xmm1, %xmm0 327*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 328*9880d681SAndroid Build Coastguard Worker %1 = extractelement <2 x double> %a, i32 0 329*9880d681SAndroid Build Coastguard Worker %2 = extractelement <2 x double> %b, i32 0 330*9880d681SAndroid Build Coastguard Worker %div = fdiv double %2, %1 331*9880d681SAndroid Build Coastguard Worker %3 = insertelement <2 x double> %b, double %div, i32 0 332*9880d681SAndroid Build Coastguard Worker ret <2 x double> %3 333*9880d681SAndroid Build Coastguard Worker} 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_multiple_add_ss(<4 x float> %a, <4 x float> %b) { 336*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_multiple_add_ss: 337*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 338*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm0, %xmm1 339*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm1, %xmm0 340*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 341*9880d681SAndroid Build Coastguard Worker; 342*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_multiple_add_ss: 343*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 344*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm1, %xmm0, %xmm1 345*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm1, %xmm0, %xmm0 346*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 347*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 348*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 349*9880d681SAndroid Build Coastguard Worker %add = fadd float %2, %1 350*9880d681SAndroid Build Coastguard Worker %add2 = fadd float %2, %add 351*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %add2, i32 0 352*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 353*9880d681SAndroid Build Coastguard Worker} 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_multiple_sub_ss(<4 x float> %a, <4 x float> %b) { 356*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_multiple_sub_ss: 357*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 358*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, %xmm2 359*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm1, %xmm2 360*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm2, %xmm0 361*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 362*9880d681SAndroid Build Coastguard Worker; 363*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_multiple_sub_ss: 364*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 365*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm1, %xmm0, %xmm1 366*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm1, %xmm0, %xmm0 367*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 368*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 369*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 370*9880d681SAndroid Build Coastguard Worker %sub = fsub float %2, %1 371*9880d681SAndroid Build Coastguard Worker %sub2 = fsub float %2, %sub 372*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %sub2, i32 0 373*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 374*9880d681SAndroid Build Coastguard Worker} 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_multiple_mul_ss(<4 x float> %a, <4 x float> %b) { 377*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_multiple_mul_ss: 378*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 379*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm0, %xmm1 380*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm1, %xmm0 381*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 382*9880d681SAndroid Build Coastguard Worker; 383*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_multiple_mul_ss: 384*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 385*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm1, %xmm0, %xmm1 386*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm1, %xmm0, %xmm0 387*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 388*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 389*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 390*9880d681SAndroid Build Coastguard Worker %mul = fmul float %2, %1 391*9880d681SAndroid Build Coastguard Worker %mul2 = fmul float %2, %mul 392*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %mul2, i32 0 393*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 394*9880d681SAndroid Build Coastguard Worker} 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_multiple_div_ss(<4 x float> %a, <4 x float> %b) { 397*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_multiple_div_ss: 398*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 399*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, %xmm2 400*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm1, %xmm2 401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm2, %xmm0 402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 403*9880d681SAndroid Build Coastguard Worker; 404*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_multiple_div_ss: 405*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 406*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm1, %xmm0, %xmm1 407*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm1, %xmm0, %xmm0 408*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 409*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %b, i32 0 410*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %a, i32 0 411*9880d681SAndroid Build Coastguard Worker %div = fdiv float %2, %1 412*9880d681SAndroid Build Coastguard Worker %div2 = fdiv float %2, %div 413*9880d681SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %a, float %div2, i32 0 414*9880d681SAndroid Build Coastguard Worker ret <4 x float> %3 415*9880d681SAndroid Build Coastguard Worker} 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard Worker; With SSE4.1 or greater, the shuffles in the following tests may 418*9880d681SAndroid Build Coastguard Worker; be lowered to X86Blendi nodes. 419*9880d681SAndroid Build Coastguard Worker 420*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @blend_add_ss(<4 x float> %a, float %b) { 421*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_add_ss: 422*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 423*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm1, %xmm0 424*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 425*9880d681SAndroid Build Coastguard Worker; 426*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_add_ss: 427*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 428*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm1, %xmm0, %xmm0 429*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Worker %ext = extractelement <4 x float> %a, i32 0 432*9880d681SAndroid Build Coastguard Worker %op = fadd float %b, %ext 433*9880d681SAndroid Build Coastguard Worker %ins = insertelement <4 x float> undef, float %op, i32 0 434*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <4 x float> %ins, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 435*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuf 436*9880d681SAndroid Build Coastguard Worker} 437*9880d681SAndroid Build Coastguard Worker 438*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @blend_sub_ss(<4 x float> %a, float %b) { 439*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_sub_ss: 440*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 441*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm1, %xmm0 442*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 443*9880d681SAndroid Build Coastguard Worker; 444*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_sub_ss: 445*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 446*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm1, %xmm0, %xmm0 447*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 448*9880d681SAndroid Build Coastguard Worker 449*9880d681SAndroid Build Coastguard Worker %ext = extractelement <4 x float> %a, i32 0 450*9880d681SAndroid Build Coastguard Worker %op = fsub float %ext, %b 451*9880d681SAndroid Build Coastguard Worker %ins = insertelement <4 x float> undef, float %op, i32 0 452*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <4 x float> %ins, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 453*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuf 454*9880d681SAndroid Build Coastguard Worker} 455*9880d681SAndroid Build Coastguard Worker 456*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @blend_mul_ss(<4 x float> %a, float %b) { 457*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_mul_ss: 458*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm1, %xmm0 460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 461*9880d681SAndroid Build Coastguard Worker; 462*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_mul_ss: 463*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 464*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm1, %xmm0, %xmm0 465*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 466*9880d681SAndroid Build Coastguard Worker 467*9880d681SAndroid Build Coastguard Worker %ext = extractelement <4 x float> %a, i32 0 468*9880d681SAndroid Build Coastguard Worker %op = fmul float %b, %ext 469*9880d681SAndroid Build Coastguard Worker %ins = insertelement <4 x float> undef, float %op, i32 0 470*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <4 x float> %ins, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 471*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuf 472*9880d681SAndroid Build Coastguard Worker} 473*9880d681SAndroid Build Coastguard Worker 474*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @blend_div_ss(<4 x float> %a, float %b) { 475*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_div_ss: 476*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 477*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm1, %xmm0 478*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 479*9880d681SAndroid Build Coastguard Worker; 480*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_div_ss: 481*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 482*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm1, %xmm0, %xmm0 483*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Worker %ext = extractelement <4 x float> %a, i32 0 486*9880d681SAndroid Build Coastguard Worker %op = fdiv float %ext, %b 487*9880d681SAndroid Build Coastguard Worker %ins = insertelement <4 x float> undef, float %op, i32 0 488*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <4 x float> %ins, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 489*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuf 490*9880d681SAndroid Build Coastguard Worker} 491*9880d681SAndroid Build Coastguard Worker 492*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @blend_add_sd(<2 x double> %a, double %b) { 493*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_add_sd: 494*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 495*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm1, %xmm0 496*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 497*9880d681SAndroid Build Coastguard Worker; 498*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_add_sd: 499*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 500*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm1, %xmm0, %xmm0 501*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 502*9880d681SAndroid Build Coastguard Worker 503*9880d681SAndroid Build Coastguard Worker %ext = extractelement <2 x double> %a, i32 0 504*9880d681SAndroid Build Coastguard Worker %op = fadd double %b, %ext 505*9880d681SAndroid Build Coastguard Worker %ins = insertelement <2 x double> undef, double %op, i32 0 506*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <2 x double> %ins, <2 x double> %a, <2 x i32> <i32 0, i32 3> 507*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuf 508*9880d681SAndroid Build Coastguard Worker} 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @blend_sub_sd(<2 x double> %a, double %b) { 511*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_sub_sd: 512*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm1, %xmm0 514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 515*9880d681SAndroid Build Coastguard Worker; 516*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_sub_sd: 517*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 518*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm1, %xmm0, %xmm0 519*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 520*9880d681SAndroid Build Coastguard Worker 521*9880d681SAndroid Build Coastguard Worker %ext = extractelement <2 x double> %a, i32 0 522*9880d681SAndroid Build Coastguard Worker %op = fsub double %ext, %b 523*9880d681SAndroid Build Coastguard Worker %ins = insertelement <2 x double> undef, double %op, i32 0 524*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <2 x double> %ins, <2 x double> %a, <2 x i32> <i32 0, i32 3> 525*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuf 526*9880d681SAndroid Build Coastguard Worker} 527*9880d681SAndroid Build Coastguard Worker 528*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @blend_mul_sd(<2 x double> %a, double %b) { 529*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_mul_sd: 530*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 531*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm1, %xmm0 532*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 533*9880d681SAndroid Build Coastguard Worker; 534*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_mul_sd: 535*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 536*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm1, %xmm0, %xmm0 537*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 538*9880d681SAndroid Build Coastguard Worker 539*9880d681SAndroid Build Coastguard Worker %ext = extractelement <2 x double> %a, i32 0 540*9880d681SAndroid Build Coastguard Worker %op = fmul double %b, %ext 541*9880d681SAndroid Build Coastguard Worker %ins = insertelement <2 x double> undef, double %op, i32 0 542*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <2 x double> %ins, <2 x double> %a, <2 x i32> <i32 0, i32 3> 543*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuf 544*9880d681SAndroid Build Coastguard Worker} 545*9880d681SAndroid Build Coastguard Worker 546*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @blend_div_sd(<2 x double> %a, double %b) { 547*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: blend_div_sd: 548*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 549*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm1, %xmm0 550*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 551*9880d681SAndroid Build Coastguard Worker; 552*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: blend_div_sd: 553*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 554*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm1, %xmm0, %xmm0 555*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 556*9880d681SAndroid Build Coastguard Worker 557*9880d681SAndroid Build Coastguard Worker %ext = extractelement <2 x double> %a, i32 0 558*9880d681SAndroid Build Coastguard Worker %op = fdiv double %ext, %b 559*9880d681SAndroid Build Coastguard Worker %ins = insertelement <2 x double> undef, double %op, i32 0 560*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <2 x double> %ins, <2 x double> %a, <2 x i32> <i32 0, i32 3> 561*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuf 562*9880d681SAndroid Build Coastguard Worker} 563*9880d681SAndroid Build Coastguard Worker 564*9880d681SAndroid Build Coastguard Worker; Ensure that the backend selects SSE/AVX scalar fp instructions 565*9880d681SAndroid Build Coastguard Worker; from a packed fp instruction plus a vector insert. 566*9880d681SAndroid Build Coastguard Worker 567*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test_add_ss(<4 x float> %a, <4 x float> %b) { 568*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_add_ss: 569*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm1, %xmm0 571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 572*9880d681SAndroid Build Coastguard Worker; 573*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_add_ss: 574*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 575*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm1, %xmm0, %xmm0 576*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 577*9880d681SAndroid Build Coastguard Worker %1 = fadd <4 x float> %a, %b 578*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 579*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 580*9880d681SAndroid Build Coastguard Worker} 581*9880d681SAndroid Build Coastguard Worker 582*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test_sub_ss(<4 x float> %a, <4 x float> %b) { 583*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_sub_ss: 584*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm1, %xmm0 586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 587*9880d681SAndroid Build Coastguard Worker; 588*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_sub_ss: 589*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 590*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm1, %xmm0, %xmm0 591*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 592*9880d681SAndroid Build Coastguard Worker %1 = fsub <4 x float> %a, %b 593*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 594*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 595*9880d681SAndroid Build Coastguard Worker} 596*9880d681SAndroid Build Coastguard Worker 597*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test_mul_ss(<4 x float> %a, <4 x float> %b) { 598*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_mul_ss: 599*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 600*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm1, %xmm0 601*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 602*9880d681SAndroid Build Coastguard Worker; 603*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_mul_ss: 604*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 605*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm1, %xmm0, %xmm0 606*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 607*9880d681SAndroid Build Coastguard Worker %1 = fmul <4 x float> %a, %b 608*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 609*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 610*9880d681SAndroid Build Coastguard Worker} 611*9880d681SAndroid Build Coastguard Worker 612*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test_div_ss(<4 x float> %a, <4 x float> %b) { 613*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_div_ss: 614*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm1, %xmm0 616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 617*9880d681SAndroid Build Coastguard Worker; 618*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_div_ss: 619*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 620*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm1, %xmm0, %xmm0 621*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 622*9880d681SAndroid Build Coastguard Worker %1 = fdiv <4 x float> %a, %b 623*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %a, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 624*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 625*9880d681SAndroid Build Coastguard Worker} 626*9880d681SAndroid Build Coastguard Worker 627*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test_add_sd(<2 x double> %a, <2 x double> %b) { 628*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_add_sd: 629*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 630*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm1, %xmm0 631*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 632*9880d681SAndroid Build Coastguard Worker; 633*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_add_sd: 634*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 635*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm1, %xmm0, %xmm0 636*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 637*9880d681SAndroid Build Coastguard Worker %1 = fadd <2 x double> %a, %b 638*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %a, <2 x i32> <i32 0, i32 3> 639*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 640*9880d681SAndroid Build Coastguard Worker} 641*9880d681SAndroid Build Coastguard Worker 642*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test_sub_sd(<2 x double> %a, <2 x double> %b) { 643*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_sub_sd: 644*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 645*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm1, %xmm0 646*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 647*9880d681SAndroid Build Coastguard Worker; 648*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_sub_sd: 649*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 650*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm1, %xmm0, %xmm0 651*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 652*9880d681SAndroid Build Coastguard Worker %1 = fsub <2 x double> %a, %b 653*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %a, <2 x i32> <i32 0, i32 3> 654*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 655*9880d681SAndroid Build Coastguard Worker} 656*9880d681SAndroid Build Coastguard Worker 657*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test_mul_sd(<2 x double> %a, <2 x double> %b) { 658*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_mul_sd: 659*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm1, %xmm0 661*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 662*9880d681SAndroid Build Coastguard Worker; 663*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_mul_sd: 664*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 665*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm1, %xmm0, %xmm0 666*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 667*9880d681SAndroid Build Coastguard Worker %1 = fmul <2 x double> %a, %b 668*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %a, <2 x i32> <i32 0, i32 3> 669*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 670*9880d681SAndroid Build Coastguard Worker} 671*9880d681SAndroid Build Coastguard Worker 672*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test_div_sd(<2 x double> %a, <2 x double> %b) { 673*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test_div_sd: 674*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 675*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm1, %xmm0 676*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 677*9880d681SAndroid Build Coastguard Worker; 678*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test_div_sd: 679*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 680*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm1, %xmm0, %xmm0 681*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 682*9880d681SAndroid Build Coastguard Worker %1 = fdiv <2 x double> %a, %b 683*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %a, <2 x i32> <i32 0, i32 3> 684*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 685*9880d681SAndroid Build Coastguard Worker} 686*9880d681SAndroid Build Coastguard Worker 687*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test2_add_ss(<4 x float> %a, <4 x float> %b) { 688*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_add_ss: 689*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 690*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm0, %xmm1 691*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 692*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 693*9880d681SAndroid Build Coastguard Worker; 694*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_add_ss: 695*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 696*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0 697*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 698*9880d681SAndroid Build Coastguard Worker %1 = fadd <4 x float> %b, %a 699*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %b, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 700*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 701*9880d681SAndroid Build Coastguard Worker} 702*9880d681SAndroid Build Coastguard Worker 703*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test2_sub_ss(<4 x float> %a, <4 x float> %b) { 704*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_sub_ss: 705*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 706*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm0, %xmm1 707*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 708*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 709*9880d681SAndroid Build Coastguard Worker; 710*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_sub_ss: 711*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 712*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm0, %xmm1, %xmm0 713*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 714*9880d681SAndroid Build Coastguard Worker %1 = fsub <4 x float> %b, %a 715*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %b, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 716*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 717*9880d681SAndroid Build Coastguard Worker} 718*9880d681SAndroid Build Coastguard Worker 719*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test2_mul_ss(<4 x float> %a, <4 x float> %b) { 720*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_mul_ss: 721*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 722*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm0, %xmm1 723*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 724*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 725*9880d681SAndroid Build Coastguard Worker; 726*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_mul_ss: 727*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 728*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm0, %xmm1, %xmm0 729*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 730*9880d681SAndroid Build Coastguard Worker %1 = fmul <4 x float> %b, %a 731*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %b, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 732*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 733*9880d681SAndroid Build Coastguard Worker} 734*9880d681SAndroid Build Coastguard Worker 735*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test2_div_ss(<4 x float> %a, <4 x float> %b) { 736*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_div_ss: 737*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 738*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm0, %xmm1 739*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 740*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 741*9880d681SAndroid Build Coastguard Worker; 742*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_div_ss: 743*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 744*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm0, %xmm1, %xmm0 745*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 746*9880d681SAndroid Build Coastguard Worker %1 = fdiv <4 x float> %b, %a 747*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> %b, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 748*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 749*9880d681SAndroid Build Coastguard Worker} 750*9880d681SAndroid Build Coastguard Worker 751*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test2_add_sd(<2 x double> %a, <2 x double> %b) { 752*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_add_sd: 753*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 754*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm0, %xmm1 755*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 756*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 757*9880d681SAndroid Build Coastguard Worker; 758*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_add_sd: 759*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 760*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm0, %xmm1, %xmm0 761*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 762*9880d681SAndroid Build Coastguard Worker %1 = fadd <2 x double> %b, %a 763*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %b, <2 x i32> <i32 0, i32 3> 764*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 765*9880d681SAndroid Build Coastguard Worker} 766*9880d681SAndroid Build Coastguard Worker 767*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test2_sub_sd(<2 x double> %a, <2 x double> %b) { 768*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_sub_sd: 769*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 770*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm0, %xmm1 771*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 772*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 773*9880d681SAndroid Build Coastguard Worker; 774*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_sub_sd: 775*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 776*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm0, %xmm1, %xmm0 777*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 778*9880d681SAndroid Build Coastguard Worker %1 = fsub <2 x double> %b, %a 779*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %b, <2 x i32> <i32 0, i32 3> 780*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 781*9880d681SAndroid Build Coastguard Worker} 782*9880d681SAndroid Build Coastguard Worker 783*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test2_mul_sd(<2 x double> %a, <2 x double> %b) { 784*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_mul_sd: 785*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 786*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm0, %xmm1 787*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 788*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 789*9880d681SAndroid Build Coastguard Worker; 790*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_mul_sd: 791*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 792*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm0, %xmm1, %xmm0 793*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 794*9880d681SAndroid Build Coastguard Worker %1 = fmul <2 x double> %b, %a 795*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %b, <2 x i32> <i32 0, i32 3> 796*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 797*9880d681SAndroid Build Coastguard Worker} 798*9880d681SAndroid Build Coastguard Worker 799*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test2_div_sd(<2 x double> %a, <2 x double> %b) { 800*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test2_div_sd: 801*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 802*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm0, %xmm1 803*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 804*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 805*9880d681SAndroid Build Coastguard Worker; 806*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test2_div_sd: 807*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 808*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm0, %xmm1, %xmm0 809*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 810*9880d681SAndroid Build Coastguard Worker %1 = fdiv <2 x double> %b, %a 811*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x double> %1, <2 x double> %b, <2 x i32> <i32 0, i32 3> 812*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 813*9880d681SAndroid Build Coastguard Worker} 814*9880d681SAndroid Build Coastguard Worker 815*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test3_add_ss(<4 x float> %a, <4 x float> %b) { 816*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_add_ss: 817*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 818*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm1, %xmm0 819*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 820*9880d681SAndroid Build Coastguard Worker; 821*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_add_ss: 822*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 823*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm1, %xmm0, %xmm0 824*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 825*9880d681SAndroid Build Coastguard Worker %1 = fadd <4 x float> %a, %b 826*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %a, <4 x float> %1 827*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 828*9880d681SAndroid Build Coastguard Worker} 829*9880d681SAndroid Build Coastguard Worker 830*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test3_sub_ss(<4 x float> %a, <4 x float> %b) { 831*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_sub_ss: 832*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 833*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm1, %xmm0 834*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 835*9880d681SAndroid Build Coastguard Worker; 836*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_sub_ss: 837*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 838*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm1, %xmm0, %xmm0 839*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 840*9880d681SAndroid Build Coastguard Worker %1 = fsub <4 x float> %a, %b 841*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %a, <4 x float> %1 842*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 843*9880d681SAndroid Build Coastguard Worker} 844*9880d681SAndroid Build Coastguard Worker 845*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test3_mul_ss(<4 x float> %a, <4 x float> %b) { 846*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_mul_ss: 847*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm1, %xmm0 849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 850*9880d681SAndroid Build Coastguard Worker; 851*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_mul_ss: 852*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 853*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm1, %xmm0, %xmm0 854*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 855*9880d681SAndroid Build Coastguard Worker %1 = fmul <4 x float> %a, %b 856*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %a, <4 x float> %1 857*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 858*9880d681SAndroid Build Coastguard Worker} 859*9880d681SAndroid Build Coastguard Worker 860*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test3_div_ss(<4 x float> %a, <4 x float> %b) { 861*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_div_ss: 862*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 863*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm1, %xmm0 864*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 865*9880d681SAndroid Build Coastguard Worker; 866*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_div_ss: 867*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 868*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm1, %xmm0, %xmm0 869*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 870*9880d681SAndroid Build Coastguard Worker %1 = fdiv <4 x float> %a, %b 871*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %a, <4 x float> %1 872*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 873*9880d681SAndroid Build Coastguard Worker} 874*9880d681SAndroid Build Coastguard Worker 875*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test3_add_sd(<2 x double> %a, <2 x double> %b) { 876*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_add_sd: 877*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 878*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm1, %xmm0 879*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 880*9880d681SAndroid Build Coastguard Worker; 881*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_add_sd: 882*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 883*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm1, %xmm0, %xmm0 884*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 885*9880d681SAndroid Build Coastguard Worker %1 = fadd <2 x double> %a, %b 886*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %a, <2 x double> %1 887*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 888*9880d681SAndroid Build Coastguard Worker} 889*9880d681SAndroid Build Coastguard Worker 890*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test3_sub_sd(<2 x double> %a, <2 x double> %b) { 891*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_sub_sd: 892*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 893*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm1, %xmm0 894*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 895*9880d681SAndroid Build Coastguard Worker; 896*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_sub_sd: 897*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 898*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm1, %xmm0, %xmm0 899*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 900*9880d681SAndroid Build Coastguard Worker %1 = fsub <2 x double> %a, %b 901*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %a, <2 x double> %1 902*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 903*9880d681SAndroid Build Coastguard Worker} 904*9880d681SAndroid Build Coastguard Worker 905*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test3_mul_sd(<2 x double> %a, <2 x double> %b) { 906*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_mul_sd: 907*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 908*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm1, %xmm0 909*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 910*9880d681SAndroid Build Coastguard Worker; 911*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_mul_sd: 912*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 913*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm1, %xmm0, %xmm0 914*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 915*9880d681SAndroid Build Coastguard Worker %1 = fmul <2 x double> %a, %b 916*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %a, <2 x double> %1 917*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 918*9880d681SAndroid Build Coastguard Worker} 919*9880d681SAndroid Build Coastguard Worker 920*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test3_div_sd(<2 x double> %a, <2 x double> %b) { 921*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test3_div_sd: 922*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 923*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm1, %xmm0 924*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 925*9880d681SAndroid Build Coastguard Worker; 926*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test3_div_sd: 927*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 928*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm1, %xmm0, %xmm0 929*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 930*9880d681SAndroid Build Coastguard Worker %1 = fdiv <2 x double> %a, %b 931*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %a, <2 x double> %1 932*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 933*9880d681SAndroid Build Coastguard Worker} 934*9880d681SAndroid Build Coastguard Worker 935*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test4_add_ss(<4 x float> %a, <4 x float> %b) { 936*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_add_ss: 937*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 938*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addss %xmm0, %xmm1 939*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 940*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 941*9880d681SAndroid Build Coastguard Worker; 942*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_add_ss: 943*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 944*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0 945*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 946*9880d681SAndroid Build Coastguard Worker %1 = fadd <4 x float> %b, %a 947*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %b, <4 x float> %1 948*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 949*9880d681SAndroid Build Coastguard Worker} 950*9880d681SAndroid Build Coastguard Worker 951*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test4_sub_ss(<4 x float> %a, <4 x float> %b) { 952*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_sub_ss: 953*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 954*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subss %xmm0, %xmm1 955*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 956*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 957*9880d681SAndroid Build Coastguard Worker; 958*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_sub_ss: 959*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 960*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubss %xmm0, %xmm1, %xmm0 961*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 962*9880d681SAndroid Build Coastguard Worker %1 = fsub <4 x float> %b, %a 963*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %b, <4 x float> %1 964*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 965*9880d681SAndroid Build Coastguard Worker} 966*9880d681SAndroid Build Coastguard Worker 967*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test4_mul_ss(<4 x float> %a, <4 x float> %b) { 968*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_mul_ss: 969*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulss %xmm0, %xmm1 971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 973*9880d681SAndroid Build Coastguard Worker; 974*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_mul_ss: 975*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 976*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulss %xmm0, %xmm1, %xmm0 977*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 978*9880d681SAndroid Build Coastguard Worker %1 = fmul <4 x float> %b, %a 979*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %b, <4 x float> %1 980*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 981*9880d681SAndroid Build Coastguard Worker} 982*9880d681SAndroid Build Coastguard Worker 983*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_test4_div_ss(<4 x float> %a, <4 x float> %b) { 984*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_div_ss: 985*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divss %xmm0, %xmm1 987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 988*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 989*9880d681SAndroid Build Coastguard Worker; 990*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_div_ss: 991*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 992*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivss %xmm0, %xmm1, %xmm0 993*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 994*9880d681SAndroid Build Coastguard Worker %1 = fdiv <4 x float> %b, %a 995*9880d681SAndroid Build Coastguard Worker %2 = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x float> %b, <4 x float> %1 996*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 997*9880d681SAndroid Build Coastguard Worker} 998*9880d681SAndroid Build Coastguard Worker 999*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test4_add_sd(<2 x double> %a, <2 x double> %b) { 1000*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_add_sd: 1001*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1002*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: addsd %xmm0, %xmm1 1003*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 1004*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1005*9880d681SAndroid Build Coastguard Worker; 1006*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_add_sd: 1007*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1008*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vaddsd %xmm0, %xmm1, %xmm0 1009*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1010*9880d681SAndroid Build Coastguard Worker %1 = fadd <2 x double> %b, %a 1011*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %b, <2 x double> %1 1012*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 1013*9880d681SAndroid Build Coastguard Worker} 1014*9880d681SAndroid Build Coastguard Worker 1015*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test4_sub_sd(<2 x double> %a, <2 x double> %b) { 1016*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_sub_sd: 1017*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1018*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subsd %xmm0, %xmm1 1019*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 1020*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1021*9880d681SAndroid Build Coastguard Worker; 1022*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_sub_sd: 1023*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1024*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vsubsd %xmm0, %xmm1, %xmm0 1025*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1026*9880d681SAndroid Build Coastguard Worker %1 = fsub <2 x double> %b, %a 1027*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %b, <2 x double> %1 1028*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 1029*9880d681SAndroid Build Coastguard Worker} 1030*9880d681SAndroid Build Coastguard Worker 1031*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test4_mul_sd(<2 x double> %a, <2 x double> %b) { 1032*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_mul_sd: 1033*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1034*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: mulsd %xmm0, %xmm1 1035*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 1036*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1037*9880d681SAndroid Build Coastguard Worker; 1038*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_mul_sd: 1039*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1040*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmulsd %xmm0, %xmm1, %xmm0 1041*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1042*9880d681SAndroid Build Coastguard Worker %1 = fmul <2 x double> %b, %a 1043*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %b, <2 x double> %1 1044*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 1045*9880d681SAndroid Build Coastguard Worker} 1046*9880d681SAndroid Build Coastguard Worker 1047*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_test4_div_sd(<2 x double> %a, <2 x double> %b) { 1048*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: insert_test4_div_sd: 1049*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1050*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: divsd %xmm0, %xmm1 1051*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 1052*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1053*9880d681SAndroid Build Coastguard Worker; 1054*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_test4_div_sd: 1055*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1056*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vdivsd %xmm0, %xmm1, %xmm0 1057*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1058*9880d681SAndroid Build Coastguard Worker %1 = fdiv <2 x double> %b, %a 1059*9880d681SAndroid Build Coastguard Worker %2 = select <2 x i1> <i1 false, i1 true>, <2 x double> %b, <2 x double> %1 1060*9880d681SAndroid Build Coastguard Worker ret <2 x double> %2 1061*9880d681SAndroid Build Coastguard Worker} 1062