3635 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -verify-machineinstrs -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx,+f16c < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-unknown"6 7; Stack reload folding tests.8;9; By including a nop call with sideeffects we can force a partial register spill of the10; relevant registers and check that the reload is correctly folded into the instruction.11 12define <2 x double> @stack_fold_addpd(<2 x double> %a0, <2 x double> %a1) {13; CHECK-LABEL: stack_fold_addpd:14; CHECK: # %bb.0:15; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT: #APP17; CHECK-NEXT: nop18; CHECK-NEXT: #NO_APP19; CHECK-NEXT: vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload20; CHECK-NEXT: retq21 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()22 %2 = fadd <2 x double> %a0, %a123 ret <2 x double> %224}25 26define <4 x double> @stack_fold_addpd_ymm(<4 x double> %a0, <4 x double> %a1) {27; CHECK-LABEL: stack_fold_addpd_ymm:28; CHECK: # %bb.0:29; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill30; CHECK-NEXT: #APP31; CHECK-NEXT: nop32; CHECK-NEXT: #NO_APP33; CHECK-NEXT: vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload34; CHECK-NEXT: retq35 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()36 %2 = fadd <4 x double> %a0, %a137 ret <4 x double> %238}39 40define <4 x float> @stack_fold_addps(<4 x float> %a0, <4 x float> %a1) {41; CHECK-LABEL: stack_fold_addps:42; CHECK: # %bb.0:43; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill44; CHECK-NEXT: #APP45; CHECK-NEXT: nop46; CHECK-NEXT: #NO_APP47; CHECK-NEXT: vaddps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload48; CHECK-NEXT: retq49 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()50 %2 = fadd <4 x float> %a0, %a151 ret <4 x float> %252}53 54define <8 x float> @stack_fold_addps_ymm(<8 x float> %a0, <8 x float> %a1) {55; CHECK-LABEL: stack_fold_addps_ymm:56; CHECK: # %bb.0:57; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill58; CHECK-NEXT: #APP59; CHECK-NEXT: nop60; CHECK-NEXT: #NO_APP61; CHECK-NEXT: vaddps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload62; CHECK-NEXT: retq63 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()64 %2 = fadd <8 x float> %a0, %a165 ret <8 x float> %266}67 68define double @stack_fold_addsd(double %a0, double %a1) {69; CHECK-LABEL: stack_fold_addsd:70; CHECK: # %bb.0:71; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill72; CHECK-NEXT: #APP73; CHECK-NEXT: nop74; CHECK-NEXT: #NO_APP75; CHECK-NEXT: vaddsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload76; CHECK-NEXT: retq77 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()78 %2 = fadd double %a0, %a179 ret double %280}81 82define <2 x double> @stack_fold_addsd_int(<2 x double> %a0, <2 x double> %a1) {83; CHECK-LABEL: stack_fold_addsd_int:84; CHECK: # %bb.0:85; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill86; CHECK-NEXT: #APP87; CHECK-NEXT: nop88; CHECK-NEXT: #NO_APP89; CHECK-NEXT: vaddsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload90; CHECK-NEXT: retq91 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()92 %2 = extractelement <2 x double> %a0, i32 093 %3 = extractelement <2 x double> %a1, i32 094 %4 = fadd double %2, %395 %5 = insertelement <2 x double> %a0, double %4, i32 096 ret <2 x double> %597}98declare <2 x double> @llvm.x86.sse2.add.sd(<2 x double>, <2 x double>) nounwind readnone99 100define float @stack_fold_addss(float %a0, float %a1) {101; CHECK-LABEL: stack_fold_addss:102; CHECK: # %bb.0:103; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill104; CHECK-NEXT: #APP105; CHECK-NEXT: nop106; CHECK-NEXT: #NO_APP107; CHECK-NEXT: vaddss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload108; CHECK-NEXT: retq109 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()110 %2 = fadd float %a0, %a1111 ret float %2112}113 114define <4 x float> @stack_fold_addss_int(<4 x float> %a0, <4 x float> %a1) {115; CHECK-LABEL: stack_fold_addss_int:116; CHECK: # %bb.0:117; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill118; CHECK-NEXT: #APP119; CHECK-NEXT: nop120; CHECK-NEXT: #NO_APP121; CHECK-NEXT: vaddss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload122; CHECK-NEXT: retq123 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()124 %2 = extractelement <4 x float> %a0, i32 0125 %3 = extractelement <4 x float> %a1, i32 0126 %4 = fadd float %2, %3127 %5 = insertelement <4 x float> %a0, float %4, i32 0128 ret <4 x float> %5129}130declare <4 x float> @llvm.x86.sse.add.ss(<4 x float>, <4 x float>) nounwind readnone131 132define <2 x double> @stack_fold_addsubpd(<2 x double> %a0, <2 x double> %a1) {133; CHECK-LABEL: stack_fold_addsubpd:134; CHECK: # %bb.0:135; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill136; CHECK-NEXT: #APP137; CHECK-NEXT: nop138; CHECK-NEXT: #NO_APP139; CHECK-NEXT: vaddsubpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload140; CHECK-NEXT: retq141 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()142 %2 = call <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double> %a0, <2 x double> %a1)143 ret <2 x double> %2144}145declare <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double>, <2 x double>) nounwind readnone146 147define <4 x double> @stack_fold_addsubpd_ymm(<4 x double> %a0, <4 x double> %a1) {148; CHECK-LABEL: stack_fold_addsubpd_ymm:149; CHECK: # %bb.0:150; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill151; CHECK-NEXT: #APP152; CHECK-NEXT: nop153; CHECK-NEXT: #NO_APP154; CHECK-NEXT: vaddsubpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload155; CHECK-NEXT: retq156 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()157 %2 = call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %a0, <4 x double> %a1)158 ret <4 x double> %2159}160declare <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double>, <4 x double>) nounwind readnone161 162define <4 x float> @stack_fold_addsubps(<4 x float> %a0, <4 x float> %a1) {163; CHECK-LABEL: stack_fold_addsubps:164; CHECK: # %bb.0:165; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill166; CHECK-NEXT: #APP167; CHECK-NEXT: nop168; CHECK-NEXT: #NO_APP169; CHECK-NEXT: vaddsubps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload170; CHECK-NEXT: retq171 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()172 %2 = call <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float> %a0, <4 x float> %a1)173 ret <4 x float> %2174}175declare <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float>, <4 x float>) nounwind readnone176 177define <8 x float> @stack_fold_addsubps_ymm(<8 x float> %a0, <8 x float> %a1) {178; CHECK-LABEL: stack_fold_addsubps_ymm:179; CHECK: # %bb.0:180; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill181; CHECK-NEXT: #APP182; CHECK-NEXT: nop183; CHECK-NEXT: #NO_APP184; CHECK-NEXT: vaddsubps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload185; CHECK-NEXT: retq186 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()187 %2 = call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %a0, <8 x float> %a1)188 ret <8 x float> %2189}190declare <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float>, <8 x float>) nounwind readnone191 192define <2 x double> @stack_fold_andnpd(<2 x double> %a0, <2 x double> %a1) {193; CHECK-LABEL: stack_fold_andnpd:194; CHECK: # %bb.0:195; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill196; CHECK-NEXT: #APP197; CHECK-NEXT: nop198; CHECK-NEXT: #NO_APP199; CHECK-NEXT: vandnpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload200; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1201; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm0202; CHECK-NEXT: retq203 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()204 %2 = bitcast <2 x double> %a0 to <2 x i64>205 %3 = bitcast <2 x double> %a1 to <2 x i64>206 %4 = xor <2 x i64> %2, <i64 -1, i64 -1>207 %5 = and <2 x i64> %4, %3208 %6 = bitcast <2 x i64> %5 to <2 x double>209 ; fadd forces execution domain210 %7 = fadd <2 x double> %6, <double 0x0, double 0x0>211 ret <2 x double> %7212}213 214define <4 x double> @stack_fold_andnpd_ymm(<4 x double> %a0, <4 x double> %a1) {215; CHECK-LABEL: stack_fold_andnpd_ymm:216; CHECK: # %bb.0:217; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill218; CHECK-NEXT: #APP219; CHECK-NEXT: nop220; CHECK-NEXT: #NO_APP221; CHECK-NEXT: vandnpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload222; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1223; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0224; CHECK-NEXT: retq225 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()226 %2 = bitcast <4 x double> %a0 to <4 x i64>227 %3 = bitcast <4 x double> %a1 to <4 x i64>228 %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1>229 %5 = and <4 x i64> %4, %3230 %6 = bitcast <4 x i64> %5 to <4 x double>231 ; fadd forces execution domain232 %7 = fadd <4 x double> %6, <double 0x0, double 0x0, double 0x0, double 0x0>233 ret <4 x double> %7234}235 236define <4 x float> @stack_fold_andnps(<4 x float> %a0, <4 x float> %a1) {237; CHECK-LABEL: stack_fold_andnps:238; CHECK: # %bb.0:239; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill240; CHECK-NEXT: #APP241; CHECK-NEXT: nop242; CHECK-NEXT: #NO_APP243; CHECK-NEXT: vandnps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload244; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1245; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm0246; CHECK-NEXT: retq247 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()248 %2 = bitcast <4 x float> %a0 to <2 x i64>249 %3 = bitcast <4 x float> %a1 to <2 x i64>250 %4 = xor <2 x i64> %2, <i64 -1, i64 -1>251 %5 = and <2 x i64> %4, %3252 %6 = bitcast <2 x i64> %5 to <4 x float>253 ; fadd forces execution domain254 %7 = fadd <4 x float> %6, <float 0x0, float 0x0, float 0x0, float 0x0>255 ret <4 x float> %7256}257 258define <8 x float> @stack_fold_andnps_ymm(<8 x float> %a0, <8 x float> %a1) {259; CHECK-LABEL: stack_fold_andnps_ymm:260; CHECK: # %bb.0:261; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill262; CHECK-NEXT: #APP263; CHECK-NEXT: nop264; CHECK-NEXT: #NO_APP265; CHECK-NEXT: vandnps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload266; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1267; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm0268; CHECK-NEXT: retq269 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()270 %2 = bitcast <8 x float> %a0 to <4 x i64>271 %3 = bitcast <8 x float> %a1 to <4 x i64>272 %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1>273 %5 = and <4 x i64> %4, %3274 %6 = bitcast <4 x i64> %5 to <8 x float>275 ; fadd forces execution domain276 %7 = fadd <8 x float> %6, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>277 ret <8 x float> %7278}279 280define <2 x double> @stack_fold_andpd(<2 x double> %a0, <2 x double> %a1) {281; CHECK-LABEL: stack_fold_andpd:282; CHECK: # %bb.0:283; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill284; CHECK-NEXT: #APP285; CHECK-NEXT: nop286; CHECK-NEXT: #NO_APP287; CHECK-NEXT: vandpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload288; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1289; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm0290; CHECK-NEXT: retq291 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()292 %2 = bitcast <2 x double> %a0 to <2 x i64>293 %3 = bitcast <2 x double> %a1 to <2 x i64>294 %4 = and <2 x i64> %2, %3295 %5 = bitcast <2 x i64> %4 to <2 x double>296 ; fadd forces execution domain297 %6 = fadd <2 x double> %5, <double 0x0, double 0x0>298 ret <2 x double> %6299}300 301define <4 x double> @stack_fold_andpd_ymm(<4 x double> %a0, <4 x double> %a1) {302; CHECK-LABEL: stack_fold_andpd_ymm:303; CHECK: # %bb.0:304; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill305; CHECK-NEXT: #APP306; CHECK-NEXT: nop307; CHECK-NEXT: #NO_APP308; CHECK-NEXT: vandpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload309; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1310; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0311; CHECK-NEXT: retq312 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()313 %2 = bitcast <4 x double> %a0 to <4 x i64>314 %3 = bitcast <4 x double> %a1 to <4 x i64>315 %4 = and <4 x i64> %2, %3316 %5 = bitcast <4 x i64> %4 to <4 x double>317 ; fadd forces execution domain318 %6 = fadd <4 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0>319 ret <4 x double> %6320}321 322define <4 x float> @stack_fold_andps(<4 x float> %a0, <4 x float> %a1) {323; CHECK-LABEL: stack_fold_andps:324; CHECK: # %bb.0:325; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill326; CHECK-NEXT: #APP327; CHECK-NEXT: nop328; CHECK-NEXT: #NO_APP329; CHECK-NEXT: vandps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload330; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1331; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm0332; CHECK-NEXT: retq333 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()334 %2 = bitcast <4 x float> %a0 to <2 x i64>335 %3 = bitcast <4 x float> %a1 to <2 x i64>336 %4 = and <2 x i64> %2, %3337 %5 = bitcast <2 x i64> %4 to <4 x float>338 ; fadd forces execution domain339 %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>340 ret <4 x float> %6341}342 343define <8 x float> @stack_fold_andps_ymm(<8 x float> %a0, <8 x float> %a1) {344; CHECK-LABEL: stack_fold_andps_ymm:345; CHECK: # %bb.0:346; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill347; CHECK-NEXT: #APP348; CHECK-NEXT: nop349; CHECK-NEXT: #NO_APP350; CHECK-NEXT: vandps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload351; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1352; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm0353; CHECK-NEXT: retq354 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()355 %2 = bitcast <8 x float> %a0 to <4 x i64>356 %3 = bitcast <8 x float> %a1 to <4 x i64>357 %4 = and <4 x i64> %2, %3358 %5 = bitcast <4 x i64> %4 to <8 x float>359 ; fadd forces execution domain360 %6 = fadd <8 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>361 ret <8 x float> %6362}363 364define <2 x double> @stack_fold_blendpd(<2 x double> %a0, <2 x double> %a1) {365; CHECK-LABEL: stack_fold_blendpd:366; CHECK: # %bb.0:367; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill368; CHECK-NEXT: #APP369; CHECK-NEXT: nop370; CHECK-NEXT: #NO_APP371; CHECK-NEXT: vblendpd $2, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload372; CHECK-NEXT: # xmm0 = xmm0[0],mem[1]373; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1374; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm0375; CHECK-NEXT: retq376 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()377 %2 = select <2 x i1> <i1 1, i1 0>, <2 x double> %a0, <2 x double> %a1378 ; fadd forces execution domain379 %3 = fadd <2 x double> %2, <double 0x0, double 0x0>380 ret <2 x double> %3381}382 383define <4 x double> @stack_fold_blendpd_ymm(<4 x double> %a0, <4 x double> %a1) {384; CHECK-LABEL: stack_fold_blendpd_ymm:385; CHECK: # %bb.0:386; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill387; CHECK-NEXT: #APP388; CHECK-NEXT: nop389; CHECK-NEXT: #NO_APP390; CHECK-NEXT: vblendpd $6, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload391; CHECK-NEXT: # ymm0 = ymm0[0],mem[1,2],ymm0[3]392; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1393; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0394; CHECK-NEXT: retq395 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()396 %2 = select <4 x i1> <i1 1, i1 0, i1 0, i1 1>, <4 x double> %a0, <4 x double> %a1397 ; fadd forces execution domain398 %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>399 ret <4 x double> %3}400 401define <4 x float> @stack_fold_blendps(<4 x float> %a0, <4 x float> %a1) {402 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()403 %2 = select <4 x i1> <i1 1, i1 0, i1 0, i1 1>, <4 x float> %a0, <4 x float> %a1404 ; fadd forces execution domain405 %3 = fadd <4 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0>406 ret <4 x float> %3407}408 409define <8 x float> @stack_fold_blendps_ymm(<8 x float> %a0, <8 x float> %a1) {410; CHECK-LABEL: stack_fold_blendps_ymm:411; CHECK: # %bb.0:412; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill413; CHECK-NEXT: #APP414; CHECK-NEXT: nop415; CHECK-NEXT: #NO_APP416; CHECK-NEXT: vblendps $102, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload417; CHECK-NEXT: # ymm0 = ymm0[0],mem[1,2],ymm0[3,4],mem[5,6],ymm0[7]418; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1419; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm0420; CHECK-NEXT: retq421 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()422 %2 = select <8 x i1> <i1 1, i1 0, i1 0, i1 1, i1 1, i1 0, i1 0, i1 1>, <8 x float> %a0, <8 x float> %a1423 ; fadd forces execution domain424 %3 = fadd <8 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>425 ret <8 x float> %3426}427 428define <2 x double> @stack_fold_blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %c) {429; CHECK-LABEL: stack_fold_blendvpd:430; CHECK: # %bb.0:431; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill432; CHECK-NEXT: #APP433; CHECK-NEXT: nop434; CHECK-NEXT: #NO_APP435; CHECK-NEXT: vblendvpd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload436; CHECK-NEXT: retq437 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()438 %2 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a1, <2 x double> %c, <2 x double> %a0)439 ret <2 x double> %2440}441declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone442 443define <4 x double> @stack_fold_blendvpd_ymm(<4 x double> %a0, <4 x double> %a1, <4 x double> %c) {444; CHECK-LABEL: stack_fold_blendvpd_ymm:445; CHECK: # %bb.0:446; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill447; CHECK-NEXT: #APP448; CHECK-NEXT: nop449; CHECK-NEXT: #NO_APP450; CHECK-NEXT: vblendvpd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload451; CHECK-NEXT: retq452 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()453 %2 = call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %a1, <4 x double> %c, <4 x double> %a0)454 ret <4 x double> %2455}456declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone457 458define <4 x float> @stack_fold_blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %c) {459; CHECK-LABEL: stack_fold_blendvps:460; CHECK: # %bb.0:461; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill462; CHECK-NEXT: #APP463; CHECK-NEXT: nop464; CHECK-NEXT: #NO_APP465; CHECK-NEXT: vblendvps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload466; CHECK-NEXT: retq467 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()468 %2 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a1, <4 x float> %c, <4 x float> %a0)469 ret <4 x float> %2470}471declare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone472 473define <8 x float> @stack_fold_blendvps_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %c) {474; CHECK-LABEL: stack_fold_blendvps_ymm:475; CHECK: # %bb.0:476; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill477; CHECK-NEXT: #APP478; CHECK-NEXT: nop479; CHECK-NEXT: #NO_APP480; CHECK-NEXT: vblendvps %ymm0, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload481; CHECK-NEXT: retq482 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()483 %2 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %a1, <8 x float> %c, <8 x float> %a0)484 ret <8 x float> %2485}486declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone487 488define <2 x double> @stack_fold_cmppd(<2 x double> %a0, <2 x double> %a1) {489; CHECK-LABEL: stack_fold_cmppd:490; CHECK: # %bb.0:491; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill492; CHECK-NEXT: #APP493; CHECK-NEXT: nop494; CHECK-NEXT: #NO_APP495; CHECK-NEXT: vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload496; CHECK-NEXT: retq497 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()498 %2 = call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %a0, <2 x double> %a1, i8 0)499 ret <2 x double> %2500}501declare <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double>, <2 x double>, i8) nounwind readnone502 503define <4 x double> @stack_fold_cmppd_ymm(<4 x double> %a0, <4 x double> %a1) {504; CHECK-LABEL: stack_fold_cmppd_ymm:505; CHECK: # %bb.0:506; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill507; CHECK-NEXT: #APP508; CHECK-NEXT: nop509; CHECK-NEXT: #NO_APP510; CHECK-NEXT: vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload511; CHECK-NEXT: retq512 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()513 %2 = call <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double> %a0, <4 x double> %a1, i8 0)514 ret <4 x double> %2515}516declare <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double>, <4 x double>, i8) nounwind readnone517 518define <4 x float> @stack_fold_cmpps(<4 x float> %a0, <4 x float> %a1) {519; CHECK-LABEL: stack_fold_cmpps:520; CHECK: # %bb.0:521; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill522; CHECK-NEXT: #APP523; CHECK-NEXT: nop524; CHECK-NEXT: #NO_APP525; CHECK-NEXT: vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload526; CHECK-NEXT: retq527 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()528 %2 = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %a0, <4 x float> %a1, i8 0)529 ret <4 x float> %2530}531declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone532 533define <8 x float> @stack_fold_cmpps_ymm(<8 x float> %a0, <8 x float> %a1) {534; CHECK-LABEL: stack_fold_cmpps_ymm:535; CHECK: # %bb.0:536; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill537; CHECK-NEXT: #APP538; CHECK-NEXT: nop539; CHECK-NEXT: #NO_APP540; CHECK-NEXT: vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload541; CHECK-NEXT: retq542 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()543 %2 = call <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float> %a0, <8 x float> %a1, i8 0)544 ret <8 x float> %2545}546declare <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float>, <8 x float>, i8) nounwind readnone547 548define i32 @stack_fold_cmpsd(double %a0, double %a1) {549; CHECK-LABEL: stack_fold_cmpsd:550; CHECK: # %bb.0:551; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill552; CHECK-NEXT: #APP553; CHECK-NEXT: nop554; CHECK-NEXT: #NO_APP555; CHECK-NEXT: vcmpeqsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload556; CHECK-NEXT: vmovq %xmm0, %rax557; CHECK-NEXT: andl $1, %eax558; CHECK-NEXT: # kill: def $eax killed $eax killed $rax559; CHECK-NEXT: retq560 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()561 %2 = fcmp oeq double %a0, %a1562 %3 = zext i1 %2 to i32563 ret i32 %3564}565 566define <2 x double> @stack_fold_cmpsd_int(<2 x double> %a0, <2 x double> %a1) {567; CHECK-LABEL: stack_fold_cmpsd_int:568; CHECK: # %bb.0:569; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill570; CHECK-NEXT: #APP571; CHECK-NEXT: nop572; CHECK-NEXT: #NO_APP573; CHECK-NEXT: vcmpeqsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload574; CHECK-NEXT: retq575 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()576 %2 = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a0, <2 x double> %a1, i8 0)577 ret <2 x double> %2578}579declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8) nounwind readnone580 581define i32 @stack_fold_cmpss(float %a0, float %a1) {582; CHECK-LABEL: stack_fold_cmpss:583; CHECK: # %bb.0:584; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill585; CHECK-NEXT: #APP586; CHECK-NEXT: nop587; CHECK-NEXT: #NO_APP588; CHECK-NEXT: vcmpeqss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload589; CHECK-NEXT: vmovd %xmm0, %eax590; CHECK-NEXT: andl $1, %eax591; CHECK-NEXT: retq592 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()593 %2 = fcmp oeq float %a0, %a1594 %3 = zext i1 %2 to i32595 ret i32 %3596}597 598define <4 x float> @stack_fold_cmpss_int(<4 x float> %a0, <4 x float> %a1) {599; CHECK-LABEL: stack_fold_cmpss_int:600; CHECK: # %bb.0:601; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill602; CHECK-NEXT: #APP603; CHECK-NEXT: nop604; CHECK-NEXT: #NO_APP605; CHECK-NEXT: vcmpeqss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload606; CHECK-NEXT: retq607 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()608 %2 = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 0)609 ret <4 x float> %2610}611declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone612 613; TODO stack_fold_comisd614 615define i32 @stack_fold_comisd_int(<2 x double> %a0, <2 x double> %a1) {616; CHECK-LABEL: stack_fold_comisd_int:617; CHECK: # %bb.0:618; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill619; CHECK-NEXT: #APP620; CHECK-NEXT: nop621; CHECK-NEXT: #NO_APP622; CHECK-NEXT: vcomisd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload623; CHECK-NEXT: setnp %al624; CHECK-NEXT: sete %cl625; CHECK-NEXT: andb %al, %cl626; CHECK-NEXT: movzbl %cl, %eax627; CHECK-NEXT: retq628 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()629 %2 = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1)630 ret i32 %2631}632declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) nounwind readnone633 634; TODO stack_fold_comiss635 636define i32 @stack_fold_comiss_int(<4 x float> %a0, <4 x float> %a1) {637; CHECK-LABEL: stack_fold_comiss_int:638; CHECK: # %bb.0:639; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill640; CHECK-NEXT: #APP641; CHECK-NEXT: nop642; CHECK-NEXT: #NO_APP643; CHECK-NEXT: vcomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload644; CHECK-NEXT: setnp %al645; CHECK-NEXT: sete %cl646; CHECK-NEXT: andb %al, %cl647; CHECK-NEXT: movzbl %cl, %eax648; CHECK-NEXT: retq649 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()650 %2 = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)651 ret i32 %2652}653declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone654 655define <2 x double> @stack_fold_cvtdq2pd(<4 x i32> %a0) {656; CHECK-LABEL: stack_fold_cvtdq2pd:657; CHECK: # %bb.0:658; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill659; CHECK-NEXT: #APP660; CHECK-NEXT: nop661; CHECK-NEXT: #NO_APP662; CHECK-NEXT: vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload663; CHECK-NEXT: retq664 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()665 %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>666 %3 = sitofp <2 x i32> %2 to <2 x double>667 ret <2 x double> %3668}669define <2 x double> @stack_fold_cvtdq2pd_int(<4 x i32> %a0) {670; CHECK-LABEL: stack_fold_cvtdq2pd_int:671; CHECK: # %bb.0:672; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill673; CHECK-NEXT: #APP674; CHECK-NEXT: nop675; CHECK-NEXT: #NO_APP676; CHECK-NEXT: vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload677; CHECK-NEXT: retq678 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()679 %2 = shufflevector <4 x i32> %a0, <4 x i32> %a0, <2 x i32> <i32 0, i32 1>680 %cvt = sitofp <2 x i32> %2 to <2 x double>681 ret <2 x double> %cvt682}683 684define <4 x double> @stack_fold_cvtdq2pd_ymm(<4 x i32> %a0) {685; CHECK-LABEL: stack_fold_cvtdq2pd_ymm:686; CHECK: # %bb.0:687; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill688; CHECK-NEXT: #APP689; CHECK-NEXT: nop690; CHECK-NEXT: #NO_APP691; CHECK-NEXT: vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload692; CHECK-NEXT: retq693 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()694 %2 = sitofp <4 x i32> %a0 to <4 x double>695 ret <4 x double> %2696}697 698define <4 x double> @stack_fold_cvtdq2pd_ymm_int(<4 x i32> %a0) {699; CHECK-LABEL: stack_fold_cvtdq2pd_ymm_int:700; CHECK: # %bb.0:701; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill702; CHECK-NEXT: #APP703; CHECK-NEXT: nop704; CHECK-NEXT: #NO_APP705; CHECK-NEXT: vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload706; CHECK-NEXT: retq707 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()708 %cvt = sitofp <4 x i32> %a0 to <4 x double>709 ret <4 x double> %cvt710}711 712define <4 x float> @stack_fold_cvtdq2ps(<4 x i32> %a0) {713; CHECK-LABEL: stack_fold_cvtdq2ps:714; CHECK: # %bb.0:715; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill716; CHECK-NEXT: #APP717; CHECK-NEXT: nop718; CHECK-NEXT: #NO_APP719; CHECK-NEXT: vcvtdq2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload720; CHECK-NEXT: retq721 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()722 %2 = sitofp <4 x i32> %a0 to <4 x float>723 ret <4 x float> %2724}725 726define <8 x float> @stack_fold_cvtdq2ps_ymm(<8 x i32> %a0) {727; CHECK-LABEL: stack_fold_cvtdq2ps_ymm:728; CHECK: # %bb.0:729; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill730; CHECK-NEXT: #APP731; CHECK-NEXT: nop732; CHECK-NEXT: #NO_APP733; CHECK-NEXT: vcvtdq2ps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload734; CHECK-NEXT: retq735 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()736 %2 = sitofp <8 x i32> %a0 to <8 x float>737 ret <8 x float> %2738}739 740define <4 x i32> @stack_fold_cvtpd2dq(<2 x double> %a0) {741; CHECK-LABEL: stack_fold_cvtpd2dq:742; CHECK: # %bb.0:743; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill744; CHECK-NEXT: #APP745; CHECK-NEXT: nop746; CHECK-NEXT: #NO_APP747; CHECK-NEXT: vcvtpd2dqx {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload748; CHECK-NEXT: retq749 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()750 %2 = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %a0)751 ret <4 x i32> %2752}753declare <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double>) nounwind readnone754 755define <4 x i32> @stack_fold_cvtpd2dq_ymm(<4 x double> %a0) {756; CHECK-LABEL: stack_fold_cvtpd2dq_ymm:757; CHECK: # %bb.0:758; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill759; CHECK-NEXT: #APP760; CHECK-NEXT: nop761; CHECK-NEXT: #NO_APP762; CHECK-NEXT: vcvtpd2dqy {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 32-byte Folded Reload763; CHECK-NEXT: vzeroupper764; CHECK-NEXT: retq765 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()766 %2 = call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %a0)767 ret <4 x i32> %2768}769declare <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double>) nounwind readnone770 771define <2 x float> @stack_fold_cvtpd2ps(<2 x double> %a0) {772; CHECK-LABEL: stack_fold_cvtpd2ps:773; CHECK: # %bb.0:774; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill775; CHECK-NEXT: #APP776; CHECK-NEXT: nop777; CHECK-NEXT: #NO_APP778; CHECK-NEXT: vcvtpd2psx {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload779; CHECK-NEXT: retq780 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()781 %2 = fptrunc <2 x double> %a0 to <2 x float>782 ret <2 x float> %2783}784 785define <4 x float> @stack_fold_cvtpd2ps_ymm(<4 x double> %a0) {786; CHECK-LABEL: stack_fold_cvtpd2ps_ymm:787; CHECK: # %bb.0:788; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill789; CHECK-NEXT: #APP790; CHECK-NEXT: nop791; CHECK-NEXT: #NO_APP792; CHECK-NEXT: vcvtpd2psy {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 32-byte Folded Reload793; CHECK-NEXT: vzeroupper794; CHECK-NEXT: retq795 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()796 %2 = fptrunc <4 x double> %a0 to <4 x float>797 ret <4 x float> %2798}799 800define <4 x float> @stack_fold_cvtph2ps(<8 x i16> %a0) {801; CHECK-LABEL: stack_fold_cvtph2ps:802; CHECK: # %bb.0:803; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill804; CHECK-NEXT: #APP805; CHECK-NEXT: nop806; CHECK-NEXT: #NO_APP807; CHECK-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload808; CHECK-NEXT: retq809 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()810 %2 = call <4 x float> @llvm.x86.vcvtph2ps.128(<8 x i16> %a0)811 ret <4 x float> %2812}813declare <4 x float> @llvm.x86.vcvtph2ps.128(<8 x i16>) nounwind readonly814 815define <8 x float> @stack_fold_cvtph2ps_ymm(<8 x i16> %a0) {816; CHECK-LABEL: stack_fold_cvtph2ps_ymm:817; CHECK: # %bb.0:818; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill819; CHECK-NEXT: #APP820; CHECK-NEXT: nop821; CHECK-NEXT: #NO_APP822; CHECK-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload823; CHECK-NEXT: retq824 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()825 %2 = call <8 x float> @llvm.x86.vcvtph2ps.256(<8 x i16> %a0)826 ret <8 x float> %2827}828declare <8 x float> @llvm.x86.vcvtph2ps.256(<8 x i16>) nounwind readonly829 830define <4 x i32> @stack_fold_cvtps2dq(<4 x float> %a0) {831; CHECK-LABEL: stack_fold_cvtps2dq:832; CHECK: # %bb.0:833; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill834; CHECK-NEXT: #APP835; CHECK-NEXT: nop836; CHECK-NEXT: #NO_APP837; CHECK-NEXT: vcvtps2dq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload838; CHECK-NEXT: retq839 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()840 %2 = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %a0)841 ret <4 x i32> %2842}843declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>) nounwind readnone844 845define <8 x i32> @stack_fold_cvtps2dq_ymm(<8 x float> %a0) {846; CHECK-LABEL: stack_fold_cvtps2dq_ymm:847; CHECK: # %bb.0:848; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill849; CHECK-NEXT: #APP850; CHECK-NEXT: nop851; CHECK-NEXT: #NO_APP852; CHECK-NEXT: vcvtps2dq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload853; CHECK-NEXT: retq854 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()855 %2 = call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %a0)856 ret <8 x i32> %2857}858declare <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float>) nounwind readnone859 860define <2 x double> @stack_fold_cvtps2pd(<4 x float> %a0) {861; CHECK-LABEL: stack_fold_cvtps2pd:862; CHECK: # %bb.0:863; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill864; CHECK-NEXT: #APP865; CHECK-NEXT: nop866; CHECK-NEXT: #NO_APP867; CHECK-NEXT: vcvtps2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload868; CHECK-NEXT: retq869 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()870 %2 = shufflevector <4 x float> %a0, <4 x float> undef, <2 x i32> <i32 0, i32 1>871 %3 = fpext <2 x float> %2 to <2 x double>872 ret <2 x double> %3873}874 875define <2 x double> @stack_fold_cvtps2pd_int(<4 x float> %a0) {876; CHECK-LABEL: stack_fold_cvtps2pd_int:877; CHECK: # %bb.0:878; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill879; CHECK-NEXT: #APP880; CHECK-NEXT: nop881; CHECK-NEXT: #NO_APP882; CHECK-NEXT: vcvtps2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload883; CHECK-NEXT: retq884 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()885 %2 = shufflevector <4 x float> %a0, <4 x float> %a0, <2 x i32> <i32 0, i32 1>886 %cvtps2pd = fpext <2 x float> %2 to <2 x double>887 ret <2 x double> %cvtps2pd888}889 890define <4 x double> @stack_fold_cvtps2pd_ymm(<4 x float> %a0) {891; CHECK-LABEL: stack_fold_cvtps2pd_ymm:892; CHECK: # %bb.0:893; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill894; CHECK-NEXT: #APP895; CHECK-NEXT: nop896; CHECK-NEXT: #NO_APP897; CHECK-NEXT: vcvtps2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload898; CHECK-NEXT: retq899 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()900 %2 = fpext <4 x float> %a0 to <4 x double>901 ret <4 x double> %2902}903 904define <4 x double> @stack_fold_cvtps2pd_ymm_int(<4 x float> %a0) {905; CHECK-LABEL: stack_fold_cvtps2pd_ymm_int:906; CHECK: # %bb.0:907; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill908; CHECK-NEXT: #APP909; CHECK-NEXT: nop910; CHECK-NEXT: #NO_APP911; CHECK-NEXT: vcvtps2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload912; CHECK-NEXT: retq913 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()914 %cvtps2pd = fpext <4 x float> %a0 to <4 x double>915 ret <4 x double> %cvtps2pd916}917 918define <8 x i16> @stack_fold_cvtps2ph_ymm(<8 x float> %a0) {919; CHECK-LABEL: stack_fold_cvtps2ph_ymm:920; CHECK: # %bb.0:921; CHECK-NEXT: vcvtps2ph $0, %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill922; CHECK-NEXT: #APP923; CHECK-NEXT: nop924; CHECK-NEXT: #NO_APP925; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload926; CHECK-NEXT: vzeroupper927; CHECK-NEXT: retq928 %1 = call <8 x i16> @llvm.x86.vcvtps2ph.256(<8 x float> %a0, i32 0)929 %2 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()930 ret <8 x i16> %1931}932declare <8 x i16> @llvm.x86.vcvtps2ph.256(<8 x float>, i32) nounwind readonly933 934; TODO stack_fold_cvtsd2si935 936define i32 @stack_fold_cvtsd2si_int(<2 x double> %a0) {937; CHECK-LABEL: stack_fold_cvtsd2si_int:938; CHECK: # %bb.0:939; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill940; CHECK-NEXT: #APP941; CHECK-NEXT: nop942; CHECK-NEXT: #NO_APP943; CHECK-NEXT: vcvtsd2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload944; CHECK-NEXT: retq945 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()946 %2 = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %a0)947 ret i32 %2948}949declare i32 @llvm.x86.sse2.cvtsd2si(<2 x double>) nounwind readnone950 951; TODO stack_fold_cvtsd2si64952 953define i64 @stack_fold_cvtsd2si64_int(<2 x double> %a0) {954; CHECK-LABEL: stack_fold_cvtsd2si64_int:955; CHECK: # %bb.0:956; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill957; CHECK-NEXT: #APP958; CHECK-NEXT: nop959; CHECK-NEXT: #NO_APP960; CHECK-NEXT: vcvtsd2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload961; CHECK-NEXT: retq962 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()963 %2 = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %a0)964 ret i64 %2965}966declare i64 @llvm.x86.sse2.cvtsd2si64(<2 x double>) nounwind readnone967 968define double @stack_fold_cvtsi2sd(i32 %a0) {969; CHECK-LABEL: stack_fold_cvtsi2sd:970; CHECK: # %bb.0:971; CHECK-NEXT: pushq %rbp972; CHECK-NEXT: .cfi_def_cfa_offset 16973; CHECK-NEXT: pushq %r15974; CHECK-NEXT: .cfi_def_cfa_offset 24975; CHECK-NEXT: pushq %r14976; CHECK-NEXT: .cfi_def_cfa_offset 32977; CHECK-NEXT: pushq %r13978; CHECK-NEXT: .cfi_def_cfa_offset 40979; CHECK-NEXT: pushq %r12980; CHECK-NEXT: .cfi_def_cfa_offset 48981; CHECK-NEXT: pushq %rbx982; CHECK-NEXT: .cfi_def_cfa_offset 56983; CHECK-NEXT: .cfi_offset %rbx, -56984; CHECK-NEXT: .cfi_offset %r12, -48985; CHECK-NEXT: .cfi_offset %r13, -40986; CHECK-NEXT: .cfi_offset %r14, -32987; CHECK-NEXT: .cfi_offset %r15, -24988; CHECK-NEXT: .cfi_offset %rbp, -16989; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill990; CHECK-NEXT: #APP991; CHECK-NEXT: nop992; CHECK-NEXT: #NO_APP993; CHECK-NEXT: vcvtsi2sdl {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 4-byte Folded Reload994; CHECK-NEXT: popq %rbx995; CHECK-NEXT: .cfi_def_cfa_offset 48996; CHECK-NEXT: popq %r12997; CHECK-NEXT: .cfi_def_cfa_offset 40998; CHECK-NEXT: popq %r13999; CHECK-NEXT: .cfi_def_cfa_offset 321000; CHECK-NEXT: popq %r141001; CHECK-NEXT: .cfi_def_cfa_offset 241002; CHECK-NEXT: popq %r151003; CHECK-NEXT: .cfi_def_cfa_offset 161004; CHECK-NEXT: popq %rbp1005; CHECK-NEXT: .cfi_def_cfa_offset 81006; CHECK-NEXT: retq1007 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1008 %2 = sitofp i32 %a0 to double1009 ret double %21010}1011 1012define <2 x double> @stack_fold_cvtsi2sd_int(i32 %a0) {1013; CHECK-LABEL: stack_fold_cvtsi2sd_int:1014; CHECK: # %bb.0:1015; CHECK-NEXT: pushq %rbp1016; CHECK-NEXT: .cfi_def_cfa_offset 161017; CHECK-NEXT: pushq %r151018; CHECK-NEXT: .cfi_def_cfa_offset 241019; CHECK-NEXT: pushq %r141020; CHECK-NEXT: .cfi_def_cfa_offset 321021; CHECK-NEXT: pushq %r131022; CHECK-NEXT: .cfi_def_cfa_offset 401023; CHECK-NEXT: pushq %r121024; CHECK-NEXT: .cfi_def_cfa_offset 481025; CHECK-NEXT: pushq %rbx1026; CHECK-NEXT: .cfi_def_cfa_offset 561027; CHECK-NEXT: .cfi_offset %rbx, -561028; CHECK-NEXT: .cfi_offset %r12, -481029; CHECK-NEXT: .cfi_offset %r13, -401030; CHECK-NEXT: .cfi_offset %r14, -321031; CHECK-NEXT: .cfi_offset %r15, -241032; CHECK-NEXT: .cfi_offset %rbp, -161033; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1034; CHECK-NEXT: #APP1035; CHECK-NEXT: nop1036; CHECK-NEXT: #NO_APP1037; CHECK-NEXT: vcvtsi2sdl {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 4-byte Folded Reload1038; CHECK-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero1039; CHECK-NEXT: popq %rbx1040; CHECK-NEXT: .cfi_def_cfa_offset 481041; CHECK-NEXT: popq %r121042; CHECK-NEXT: .cfi_def_cfa_offset 401043; CHECK-NEXT: popq %r131044; CHECK-NEXT: .cfi_def_cfa_offset 321045; CHECK-NEXT: popq %r141046; CHECK-NEXT: .cfi_def_cfa_offset 241047; CHECK-NEXT: popq %r151048; CHECK-NEXT: .cfi_def_cfa_offset 161049; CHECK-NEXT: popq %rbp1050; CHECK-NEXT: .cfi_def_cfa_offset 81051; CHECK-NEXT: retq1052 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1053 %2 = sitofp i32 %a0 to double1054 %3 = insertelement <2 x double> zeroinitializer, double %2, i64 01055 ret <2 x double> %31056}1057 1058define double @stack_fold_cvtsi642sd(i64 %a0) {1059; CHECK-LABEL: stack_fold_cvtsi642sd:1060; CHECK: # %bb.0:1061; CHECK-NEXT: pushq %rbp1062; CHECK-NEXT: .cfi_def_cfa_offset 161063; CHECK-NEXT: pushq %r151064; CHECK-NEXT: .cfi_def_cfa_offset 241065; CHECK-NEXT: pushq %r141066; CHECK-NEXT: .cfi_def_cfa_offset 321067; CHECK-NEXT: pushq %r131068; CHECK-NEXT: .cfi_def_cfa_offset 401069; CHECK-NEXT: pushq %r121070; CHECK-NEXT: .cfi_def_cfa_offset 481071; CHECK-NEXT: pushq %rbx1072; CHECK-NEXT: .cfi_def_cfa_offset 561073; CHECK-NEXT: .cfi_offset %rbx, -561074; CHECK-NEXT: .cfi_offset %r12, -481075; CHECK-NEXT: .cfi_offset %r13, -401076; CHECK-NEXT: .cfi_offset %r14, -321077; CHECK-NEXT: .cfi_offset %r15, -241078; CHECK-NEXT: .cfi_offset %rbp, -161079; CHECK-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1080; CHECK-NEXT: #APP1081; CHECK-NEXT: nop1082; CHECK-NEXT: #NO_APP1083; CHECK-NEXT: vcvtsi2sdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload1084; CHECK-NEXT: popq %rbx1085; CHECK-NEXT: .cfi_def_cfa_offset 481086; CHECK-NEXT: popq %r121087; CHECK-NEXT: .cfi_def_cfa_offset 401088; CHECK-NEXT: popq %r131089; CHECK-NEXT: .cfi_def_cfa_offset 321090; CHECK-NEXT: popq %r141091; CHECK-NEXT: .cfi_def_cfa_offset 241092; CHECK-NEXT: popq %r151093; CHECK-NEXT: .cfi_def_cfa_offset 161094; CHECK-NEXT: popq %rbp1095; CHECK-NEXT: .cfi_def_cfa_offset 81096; CHECK-NEXT: retq1097 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1098 %2 = sitofp i64 %a0 to double1099 ret double %21100}1101 1102define <2 x double> @stack_fold_cvtsi642sd_int(i64 %a0) {1103; CHECK-LABEL: stack_fold_cvtsi642sd_int:1104; CHECK: # %bb.0:1105; CHECK-NEXT: pushq %rbp1106; CHECK-NEXT: .cfi_def_cfa_offset 161107; CHECK-NEXT: pushq %r151108; CHECK-NEXT: .cfi_def_cfa_offset 241109; CHECK-NEXT: pushq %r141110; CHECK-NEXT: .cfi_def_cfa_offset 321111; CHECK-NEXT: pushq %r131112; CHECK-NEXT: .cfi_def_cfa_offset 401113; CHECK-NEXT: pushq %r121114; CHECK-NEXT: .cfi_def_cfa_offset 481115; CHECK-NEXT: pushq %rbx1116; CHECK-NEXT: .cfi_def_cfa_offset 561117; CHECK-NEXT: .cfi_offset %rbx, -561118; CHECK-NEXT: .cfi_offset %r12, -481119; CHECK-NEXT: .cfi_offset %r13, -401120; CHECK-NEXT: .cfi_offset %r14, -321121; CHECK-NEXT: .cfi_offset %r15, -241122; CHECK-NEXT: .cfi_offset %rbp, -161123; CHECK-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1124; CHECK-NEXT: #APP1125; CHECK-NEXT: nop1126; CHECK-NEXT: #NO_APP1127; CHECK-NEXT: vcvtsi2sdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload1128; CHECK-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero1129; CHECK-NEXT: popq %rbx1130; CHECK-NEXT: .cfi_def_cfa_offset 481131; CHECK-NEXT: popq %r121132; CHECK-NEXT: .cfi_def_cfa_offset 401133; CHECK-NEXT: popq %r131134; CHECK-NEXT: .cfi_def_cfa_offset 321135; CHECK-NEXT: popq %r141136; CHECK-NEXT: .cfi_def_cfa_offset 241137; CHECK-NEXT: popq %r151138; CHECK-NEXT: .cfi_def_cfa_offset 161139; CHECK-NEXT: popq %rbp1140; CHECK-NEXT: .cfi_def_cfa_offset 81141; CHECK-NEXT: retq1142 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1143 %2 = sitofp i64 %a0 to double1144 %3 = insertelement <2 x double> zeroinitializer, double %2, i64 01145 ret <2 x double> %31146}1147 1148define float @stack_fold_cvtsi2ss(i32 %a0) {1149; CHECK-LABEL: stack_fold_cvtsi2ss:1150; CHECK: # %bb.0:1151; CHECK-NEXT: pushq %rbp1152; CHECK-NEXT: .cfi_def_cfa_offset 161153; CHECK-NEXT: pushq %r151154; CHECK-NEXT: .cfi_def_cfa_offset 241155; CHECK-NEXT: pushq %r141156; CHECK-NEXT: .cfi_def_cfa_offset 321157; CHECK-NEXT: pushq %r131158; CHECK-NEXT: .cfi_def_cfa_offset 401159; CHECK-NEXT: pushq %r121160; CHECK-NEXT: .cfi_def_cfa_offset 481161; CHECK-NEXT: pushq %rbx1162; CHECK-NEXT: .cfi_def_cfa_offset 561163; CHECK-NEXT: .cfi_offset %rbx, -561164; CHECK-NEXT: .cfi_offset %r12, -481165; CHECK-NEXT: .cfi_offset %r13, -401166; CHECK-NEXT: .cfi_offset %r14, -321167; CHECK-NEXT: .cfi_offset %r15, -241168; CHECK-NEXT: .cfi_offset %rbp, -161169; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1170; CHECK-NEXT: #APP1171; CHECK-NEXT: nop1172; CHECK-NEXT: #NO_APP1173; CHECK-NEXT: vcvtsi2ssl {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 4-byte Folded Reload1174; CHECK-NEXT: popq %rbx1175; CHECK-NEXT: .cfi_def_cfa_offset 481176; CHECK-NEXT: popq %r121177; CHECK-NEXT: .cfi_def_cfa_offset 401178; CHECK-NEXT: popq %r131179; CHECK-NEXT: .cfi_def_cfa_offset 321180; CHECK-NEXT: popq %r141181; CHECK-NEXT: .cfi_def_cfa_offset 241182; CHECK-NEXT: popq %r151183; CHECK-NEXT: .cfi_def_cfa_offset 161184; CHECK-NEXT: popq %rbp1185; CHECK-NEXT: .cfi_def_cfa_offset 81186; CHECK-NEXT: retq1187 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1188 %2 = sitofp i32 %a0 to float1189 ret float %21190}1191 1192define <4 x float> @stack_fold_cvtsi2ss_int(i32 %a0) {1193; CHECK-LABEL: stack_fold_cvtsi2ss_int:1194; CHECK: # %bb.0:1195; CHECK-NEXT: pushq %rbp1196; CHECK-NEXT: .cfi_def_cfa_offset 161197; CHECK-NEXT: pushq %r151198; CHECK-NEXT: .cfi_def_cfa_offset 241199; CHECK-NEXT: pushq %r141200; CHECK-NEXT: .cfi_def_cfa_offset 321201; CHECK-NEXT: pushq %r131202; CHECK-NEXT: .cfi_def_cfa_offset 401203; CHECK-NEXT: pushq %r121204; CHECK-NEXT: .cfi_def_cfa_offset 481205; CHECK-NEXT: pushq %rbx1206; CHECK-NEXT: .cfi_def_cfa_offset 561207; CHECK-NEXT: .cfi_offset %rbx, -561208; CHECK-NEXT: .cfi_offset %r12, -481209; CHECK-NEXT: .cfi_offset %r13, -401210; CHECK-NEXT: .cfi_offset %r14, -321211; CHECK-NEXT: .cfi_offset %r15, -241212; CHECK-NEXT: .cfi_offset %rbp, -161213; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1214; CHECK-NEXT: #APP1215; CHECK-NEXT: nop1216; CHECK-NEXT: #NO_APP1217; CHECK-NEXT: vcvtsi2ssl {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 4-byte Folded Reload1218; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm11219; CHECK-NEXT: vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1220; CHECK-NEXT: popq %rbx1221; CHECK-NEXT: .cfi_def_cfa_offset 481222; CHECK-NEXT: popq %r121223; CHECK-NEXT: .cfi_def_cfa_offset 401224; CHECK-NEXT: popq %r131225; CHECK-NEXT: .cfi_def_cfa_offset 321226; CHECK-NEXT: popq %r141227; CHECK-NEXT: .cfi_def_cfa_offset 241228; CHECK-NEXT: popq %r151229; CHECK-NEXT: .cfi_def_cfa_offset 161230; CHECK-NEXT: popq %rbp1231; CHECK-NEXT: .cfi_def_cfa_offset 81232; CHECK-NEXT: retq1233 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1234 %2 = sitofp i32 %a0 to float1235 %3 = insertelement <4 x float> zeroinitializer, float %2, i64 01236 ret <4 x float> %31237}1238 1239define float @stack_fold_cvtsi642ss(i64 %a0) {1240; CHECK-LABEL: stack_fold_cvtsi642ss:1241; CHECK: # %bb.0:1242; CHECK-NEXT: pushq %rbp1243; CHECK-NEXT: .cfi_def_cfa_offset 161244; CHECK-NEXT: pushq %r151245; CHECK-NEXT: .cfi_def_cfa_offset 241246; CHECK-NEXT: pushq %r141247; CHECK-NEXT: .cfi_def_cfa_offset 321248; CHECK-NEXT: pushq %r131249; CHECK-NEXT: .cfi_def_cfa_offset 401250; CHECK-NEXT: pushq %r121251; CHECK-NEXT: .cfi_def_cfa_offset 481252; CHECK-NEXT: pushq %rbx1253; CHECK-NEXT: .cfi_def_cfa_offset 561254; CHECK-NEXT: .cfi_offset %rbx, -561255; CHECK-NEXT: .cfi_offset %r12, -481256; CHECK-NEXT: .cfi_offset %r13, -401257; CHECK-NEXT: .cfi_offset %r14, -321258; CHECK-NEXT: .cfi_offset %r15, -241259; CHECK-NEXT: .cfi_offset %rbp, -161260; CHECK-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1261; CHECK-NEXT: #APP1262; CHECK-NEXT: nop1263; CHECK-NEXT: #NO_APP1264; CHECK-NEXT: vcvtsi2ssq {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload1265; CHECK-NEXT: popq %rbx1266; CHECK-NEXT: .cfi_def_cfa_offset 481267; CHECK-NEXT: popq %r121268; CHECK-NEXT: .cfi_def_cfa_offset 401269; CHECK-NEXT: popq %r131270; CHECK-NEXT: .cfi_def_cfa_offset 321271; CHECK-NEXT: popq %r141272; CHECK-NEXT: .cfi_def_cfa_offset 241273; CHECK-NEXT: popq %r151274; CHECK-NEXT: .cfi_def_cfa_offset 161275; CHECK-NEXT: popq %rbp1276; CHECK-NEXT: .cfi_def_cfa_offset 81277; CHECK-NEXT: retq1278 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1279 %2 = sitofp i64 %a0 to float1280 ret float %21281}1282 1283define <4 x float> @stack_fold_cvtsi642ss_int(i64 %a0) {1284; CHECK-LABEL: stack_fold_cvtsi642ss_int:1285; CHECK: # %bb.0:1286; CHECK-NEXT: pushq %rbp1287; CHECK-NEXT: .cfi_def_cfa_offset 161288; CHECK-NEXT: pushq %r151289; CHECK-NEXT: .cfi_def_cfa_offset 241290; CHECK-NEXT: pushq %r141291; CHECK-NEXT: .cfi_def_cfa_offset 321292; CHECK-NEXT: pushq %r131293; CHECK-NEXT: .cfi_def_cfa_offset 401294; CHECK-NEXT: pushq %r121295; CHECK-NEXT: .cfi_def_cfa_offset 481296; CHECK-NEXT: pushq %rbx1297; CHECK-NEXT: .cfi_def_cfa_offset 561298; CHECK-NEXT: .cfi_offset %rbx, -561299; CHECK-NEXT: .cfi_offset %r12, -481300; CHECK-NEXT: .cfi_offset %r13, -401301; CHECK-NEXT: .cfi_offset %r14, -321302; CHECK-NEXT: .cfi_offset %r15, -241303; CHECK-NEXT: .cfi_offset %rbp, -161304; CHECK-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1305; CHECK-NEXT: #APP1306; CHECK-NEXT: nop1307; CHECK-NEXT: #NO_APP1308; CHECK-NEXT: vcvtsi2ssq {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload1309; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm11310; CHECK-NEXT: vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]1311; CHECK-NEXT: popq %rbx1312; CHECK-NEXT: .cfi_def_cfa_offset 481313; CHECK-NEXT: popq %r121314; CHECK-NEXT: .cfi_def_cfa_offset 401315; CHECK-NEXT: popq %r131316; CHECK-NEXT: .cfi_def_cfa_offset 321317; CHECK-NEXT: popq %r141318; CHECK-NEXT: .cfi_def_cfa_offset 241319; CHECK-NEXT: popq %r151320; CHECK-NEXT: .cfi_def_cfa_offset 161321; CHECK-NEXT: popq %rbp1322; CHECK-NEXT: .cfi_def_cfa_offset 81323; CHECK-NEXT: retq1324 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1325 %2 = sitofp i64 %a0 to float1326 %3 = insertelement <4 x float> zeroinitializer, float %2, i64 01327 ret <4 x float> %31328}1329 1330; TODO stack_fold_cvtss2si1331 1332define i32 @stack_fold_cvtss2si_int(<4 x float> %a0) {1333; CHECK-LABEL: stack_fold_cvtss2si_int:1334; CHECK: # %bb.0:1335; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1336; CHECK-NEXT: #APP1337; CHECK-NEXT: nop1338; CHECK-NEXT: #NO_APP1339; CHECK-NEXT: vcvtss2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload1340; CHECK-NEXT: retq1341 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1342 %2 = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0)1343 ret i32 %21344}1345declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone1346 1347; TODO stack_fold_cvtss2si641348 1349define i64 @stack_fold_cvtss2si64_int(<4 x float> %a0) {1350; CHECK-LABEL: stack_fold_cvtss2si64_int:1351; CHECK: # %bb.0:1352; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1353; CHECK-NEXT: #APP1354; CHECK-NEXT: nop1355; CHECK-NEXT: #NO_APP1356; CHECK-NEXT: vcvtss2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload1357; CHECK-NEXT: retq1358 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1359 %2 = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %a0)1360 ret i64 %21361}1362declare i64 @llvm.x86.sse.cvtss2si64(<4 x float>) nounwind readnone1363 1364define <4 x i32> @stack_fold_cvttpd2dq(<2 x double> %a0) {1365; CHECK-LABEL: stack_fold_cvttpd2dq:1366; CHECK: # %bb.0:1367; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1368; CHECK-NEXT: #APP1369; CHECK-NEXT: nop1370; CHECK-NEXT: #NO_APP1371; CHECK-NEXT: vcvttpd2dqx {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1372; CHECK-NEXT: retq1373 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1374 %2 = call <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double> %a0)1375 ret <4 x i32> %21376}1377declare <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double>) nounwind readnone1378 1379define <4 x i32> @stack_fold_cvttpd2dq_ymm(<4 x double> %a0) {1380; CHECK-LABEL: stack_fold_cvttpd2dq_ymm:1381; CHECK: # %bb.0:1382; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1383; CHECK-NEXT: #APP1384; CHECK-NEXT: nop1385; CHECK-NEXT: #NO_APP1386; CHECK-NEXT: vcvttpd2dqy {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 32-byte Folded Reload1387; CHECK-NEXT: vzeroupper1388; CHECK-NEXT: retq1389 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1390 %2 = fptosi <4 x double> %a0 to <4 x i32>1391 ret <4 x i32> %21392}1393 1394define <4 x i32> @stack_fold_cvttps2dq(<4 x float> %a0) {1395; CHECK-LABEL: stack_fold_cvttps2dq:1396; CHECK: # %bb.0:1397; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1398; CHECK-NEXT: #APP1399; CHECK-NEXT: nop1400; CHECK-NEXT: #NO_APP1401; CHECK-NEXT: vcvttps2dq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1402; CHECK-NEXT: retq1403 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1404 %2 = fptosi <4 x float> %a0 to <4 x i32>1405 ret <4 x i32> %21406}1407 1408define <8 x i32> @stack_fold_cvttps2dq_ymm(<8 x float> %a0) {1409; CHECK-LABEL: stack_fold_cvttps2dq_ymm:1410; CHECK: # %bb.0:1411; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1412; CHECK-NEXT: #APP1413; CHECK-NEXT: nop1414; CHECK-NEXT: #NO_APP1415; CHECK-NEXT: vcvttps2dq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1416; CHECK-NEXT: retq1417 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1418 %2 = fptosi <8 x float> %a0 to <8 x i32>1419 ret <8 x i32> %21420}1421 1422define i32 @stack_fold_cvttsd2si(double %a0) {1423; CHECK-LABEL: stack_fold_cvttsd2si:1424; CHECK: # %bb.0:1425; CHECK-NEXT: vmovsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1426; CHECK-NEXT: #APP1427; CHECK-NEXT: nop1428; CHECK-NEXT: #NO_APP1429; CHECK-NEXT: vcvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 8-byte Folded Reload1430; CHECK-NEXT: retq1431 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1432 %2 = fptosi double %a0 to i321433 ret i32 %21434}1435 1436define i32 @stack_fold_cvttsd2si_int(<2 x double> %a0) {1437; CHECK-LABEL: stack_fold_cvttsd2si_int:1438; CHECK: # %bb.0:1439; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1440; CHECK-NEXT: #APP1441; CHECK-NEXT: nop1442; CHECK-NEXT: #NO_APP1443; CHECK-NEXT: vcvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload1444; CHECK-NEXT: retq1445 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1446 %2 = call i32 @llvm.x86.sse2.cvttsd2si(<2 x double> %a0)1447 ret i32 %21448}1449declare i32 @llvm.x86.sse2.cvttsd2si(<2 x double>) nounwind readnone1450 1451define i64 @stack_fold_cvttsd2si64(double %a0) {1452; CHECK-LABEL: stack_fold_cvttsd2si64:1453; CHECK: # %bb.0:1454; CHECK-NEXT: vmovsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1455; CHECK-NEXT: #APP1456; CHECK-NEXT: nop1457; CHECK-NEXT: #NO_APP1458; CHECK-NEXT: vcvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Folded Reload1459; CHECK-NEXT: retq1460 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1461 %2 = fptosi double %a0 to i641462 ret i64 %21463}1464 1465define i64 @stack_fold_cvttsd2si64_int(<2 x double> %a0) {1466; CHECK-LABEL: stack_fold_cvttsd2si64_int:1467; CHECK: # %bb.0:1468; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1469; CHECK-NEXT: #APP1470; CHECK-NEXT: nop1471; CHECK-NEXT: #NO_APP1472; CHECK-NEXT: vcvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload1473; CHECK-NEXT: retq1474 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1475 %2 = call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %a0)1476 ret i64 %21477}1478declare i64 @llvm.x86.sse2.cvttsd2si64(<2 x double>) nounwind readnone1479 1480define i32 @stack_fold_cvttss2si(float %a0) {1481; CHECK-LABEL: stack_fold_cvttss2si:1482; CHECK: # %bb.0:1483; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1484; CHECK-NEXT: #APP1485; CHECK-NEXT: nop1486; CHECK-NEXT: #NO_APP1487; CHECK-NEXT: vcvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload1488; CHECK-NEXT: retq1489 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1490 %2 = fptosi float %a0 to i321491 ret i32 %21492}1493 1494define i32 @stack_fold_cvttss2si_int(<4 x float> %a0) {1495; CHECK-LABEL: stack_fold_cvttss2si_int:1496; CHECK: # %bb.0:1497; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1498; CHECK-NEXT: #APP1499; CHECK-NEXT: nop1500; CHECK-NEXT: #NO_APP1501; CHECK-NEXT: vcvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload1502; CHECK-NEXT: retq1503 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1504 %2 = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0)1505 ret i32 %21506}1507declare i32 @llvm.x86.sse.cvttss2si(<4 x float>) nounwind readnone1508 1509define i64 @stack_fold_cvttss2si64(float %a0) {1510; CHECK-LABEL: stack_fold_cvttss2si64:1511; CHECK: # %bb.0:1512; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1513; CHECK-NEXT: #APP1514; CHECK-NEXT: nop1515; CHECK-NEXT: #NO_APP1516; CHECK-NEXT: vcvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 4-byte Folded Reload1517; CHECK-NEXT: retq1518 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1519 %2 = fptosi float %a0 to i641520 ret i64 %21521}1522 1523define i64 @stack_fold_cvttss2si64_int(<4 x float> %a0) {1524; CHECK-LABEL: stack_fold_cvttss2si64_int:1525; CHECK: # %bb.0:1526; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1527; CHECK-NEXT: #APP1528; CHECK-NEXT: nop1529; CHECK-NEXT: #NO_APP1530; CHECK-NEXT: vcvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload1531; CHECK-NEXT: retq1532 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1533 %2 = call i64 @llvm.x86.sse.cvttss2si64(<4 x float> %a0)1534 ret i64 %21535}1536declare i64 @llvm.x86.sse.cvttss2si64(<4 x float>) nounwind readnone1537 1538define <2 x double> @stack_fold_divpd(<2 x double> %a0, <2 x double> %a1) {1539; CHECK-LABEL: stack_fold_divpd:1540; CHECK: # %bb.0:1541; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1542; CHECK-NEXT: #APP1543; CHECK-NEXT: nop1544; CHECK-NEXT: #NO_APP1545; CHECK-NEXT: vdivpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1546; CHECK-NEXT: retq1547 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1548 %2 = fdiv <2 x double> %a0, %a11549 ret <2 x double> %21550}1551 1552define <4 x double> @stack_fold_divpd_ymm(<4 x double> %a0, <4 x double> %a1) {1553; CHECK-LABEL: stack_fold_divpd_ymm:1554; CHECK: # %bb.0:1555; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1556; CHECK-NEXT: #APP1557; CHECK-NEXT: nop1558; CHECK-NEXT: #NO_APP1559; CHECK-NEXT: vdivpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1560; CHECK-NEXT: retq1561 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1562 %2 = fdiv <4 x double> %a0, %a11563 ret <4 x double> %21564}1565 1566define <4 x float> @stack_fold_divps(<4 x float> %a0, <4 x float> %a1) {1567; CHECK-LABEL: stack_fold_divps:1568; CHECK: # %bb.0:1569; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1570; CHECK-NEXT: #APP1571; CHECK-NEXT: nop1572; CHECK-NEXT: #NO_APP1573; CHECK-NEXT: vdivps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1574; CHECK-NEXT: retq1575 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1576 %2 = fdiv <4 x float> %a0, %a11577 ret <4 x float> %21578}1579 1580define <8 x float> @stack_fold_divps_ymm(<8 x float> %a0, <8 x float> %a1) {1581; CHECK-LABEL: stack_fold_divps_ymm:1582; CHECK: # %bb.0:1583; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1584; CHECK-NEXT: #APP1585; CHECK-NEXT: nop1586; CHECK-NEXT: #NO_APP1587; CHECK-NEXT: vdivps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1588; CHECK-NEXT: retq1589 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1590 %2 = fdiv <8 x float> %a0, %a11591 ret <8 x float> %21592}1593 1594define double @stack_fold_divsd(double %a0, double %a1) {1595; CHECK-LABEL: stack_fold_divsd:1596; CHECK: # %bb.0:1597; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1598; CHECK-NEXT: #APP1599; CHECK-NEXT: nop1600; CHECK-NEXT: #NO_APP1601; CHECK-NEXT: vdivsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload1602; CHECK-NEXT: retq1603 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1604 %2 = fdiv double %a0, %a11605 ret double %21606}1607 1608define <2 x double> @stack_fold_divsd_int(<2 x double> %a0, <2 x double> %a1) {1609; CHECK-LABEL: stack_fold_divsd_int:1610; CHECK: # %bb.0:1611; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1612; CHECK-NEXT: #APP1613; CHECK-NEXT: nop1614; CHECK-NEXT: #NO_APP1615; CHECK-NEXT: vdivsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1616; CHECK-NEXT: retq1617 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1618 %2 = extractelement <2 x double> %a0, i32 01619 %3 = extractelement <2 x double> %a1, i32 01620 %4 = fdiv double %2, %31621 %5 = insertelement <2 x double> %a0, double %4, i32 01622 ret <2 x double> %51623}1624 1625define float @stack_fold_divss(float %a0, float %a1) {1626; CHECK-LABEL: stack_fold_divss:1627; CHECK: # %bb.0:1628; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1629; CHECK-NEXT: #APP1630; CHECK-NEXT: nop1631; CHECK-NEXT: #NO_APP1632; CHECK-NEXT: vdivss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1633; CHECK-NEXT: retq1634 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1635 %2 = fdiv float %a0, %a11636 ret float %21637}1638 1639define <4 x float> @stack_fold_divss_int(<4 x float> %a0, <4 x float> %a1) {1640; CHECK-LABEL: stack_fold_divss_int:1641; CHECK: # %bb.0:1642; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1643; CHECK-NEXT: #APP1644; CHECK-NEXT: nop1645; CHECK-NEXT: #NO_APP1646; CHECK-NEXT: vdivss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1647; CHECK-NEXT: retq1648 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1649 %2 = extractelement <4 x float> %a0, i32 01650 %3 = extractelement <4 x float> %a1, i32 01651 %4 = fdiv float %2, %31652 %5 = insertelement <4 x float> %a0, float %4, i32 01653 ret <4 x float> %51654}1655 1656define <2 x double> @stack_fold_dppd(<2 x double> %a0, <2 x double> %a1) {1657; CHECK-LABEL: stack_fold_dppd:1658; CHECK: # %bb.0:1659; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1660; CHECK-NEXT: #APP1661; CHECK-NEXT: nop1662; CHECK-NEXT: #NO_APP1663; CHECK-NEXT: vdppd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1664; CHECK-NEXT: retq1665 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1666 %2 = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i8 7)1667 ret <2 x double> %21668}1669declare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i8) nounwind readnone1670 1671define <4 x float> @stack_fold_dpps(<4 x float> %a0, <4 x float> %a1) {1672; CHECK-LABEL: stack_fold_dpps:1673; CHECK: # %bb.0:1674; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1675; CHECK-NEXT: #APP1676; CHECK-NEXT: nop1677; CHECK-NEXT: #NO_APP1678; CHECK-NEXT: vdpps $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1679; CHECK-NEXT: retq1680 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1681 %2 = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i8 7)1682 ret <4 x float> %21683}1684declare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) nounwind readnone1685 1686define <8 x float> @stack_fold_dpps_ymm(<8 x float> %a0, <8 x float> %a1) {1687; CHECK-LABEL: stack_fold_dpps_ymm:1688; CHECK: # %bb.0:1689; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1690; CHECK-NEXT: #APP1691; CHECK-NEXT: nop1692; CHECK-NEXT: #NO_APP1693; CHECK-NEXT: vdpps $7, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1694; CHECK-NEXT: retq1695 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1696 %2 = call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %a0, <8 x float> %a1, i8 7)1697 ret <8 x float> %21698}1699declare <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float>, <8 x float>, i8) nounwind readnone1700 1701define <4 x float> @stack_fold_extractf128(<8 x float> %a0, <8 x float> %a1) {1702; CHECK-LABEL: stack_fold_extractf128:1703; CHECK: # %bb.0:1704; CHECK-NEXT: vextractf128 $1, %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill1705; CHECK-NEXT: #APP1706; CHECK-NEXT: nop1707; CHECK-NEXT: #NO_APP1708; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1709; CHECK-NEXT: vzeroupper1710; CHECK-NEXT: retq1711 %1 = shufflevector <8 x float> %a0, <8 x float> %a1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1712 %2 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1713 ret <4 x float> %11714}1715 1716define i32 @stack_fold_extractps(<4 x float> %a0, <4 x float> %a1) {1717; CHECK-LABEL: stack_fold_extractps:1718; CHECK: # %bb.0:1719; CHECK-NEXT: pushq %rbp1720; CHECK-NEXT: .cfi_def_cfa_offset 161721; CHECK-NEXT: pushq %r151722; CHECK-NEXT: .cfi_def_cfa_offset 241723; CHECK-NEXT: pushq %r141724; CHECK-NEXT: .cfi_def_cfa_offset 321725; CHECK-NEXT: pushq %r131726; CHECK-NEXT: .cfi_def_cfa_offset 401727; CHECK-NEXT: pushq %r121728; CHECK-NEXT: .cfi_def_cfa_offset 481729; CHECK-NEXT: pushq %rbx1730; CHECK-NEXT: .cfi_def_cfa_offset 561731; CHECK-NEXT: .cfi_offset %rbx, -561732; CHECK-NEXT: .cfi_offset %r12, -481733; CHECK-NEXT: .cfi_offset %r13, -401734; CHECK-NEXT: .cfi_offset %r14, -321735; CHECK-NEXT: .cfi_offset %r15, -241736; CHECK-NEXT: .cfi_offset %rbp, -161737; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm01738; CHECK-NEXT: vextractps $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1739; CHECK-NEXT: #APP1740; CHECK-NEXT: nop1741; CHECK-NEXT: #NO_APP1742; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload1743; CHECK-NEXT: popq %rbx1744; CHECK-NEXT: .cfi_def_cfa_offset 481745; CHECK-NEXT: popq %r121746; CHECK-NEXT: .cfi_def_cfa_offset 401747; CHECK-NEXT: popq %r131748; CHECK-NEXT: .cfi_def_cfa_offset 321749; CHECK-NEXT: popq %r141750; CHECK-NEXT: .cfi_def_cfa_offset 241751; CHECK-NEXT: popq %r151752; CHECK-NEXT: .cfi_def_cfa_offset 161753; CHECK-NEXT: popq %rbp1754; CHECK-NEXT: .cfi_def_cfa_offset 81755; CHECK-NEXT: retq1756 ; fadd forces execution domain1757 %1 = fadd <4 x float> %a0, %a11758 %2 = extractelement <4 x float> %1, i32 11759 %3 = bitcast float %2 to i321760 %4 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1761 ret i32 %31762}1763 1764define <2 x double> @stack_fold_haddpd(<2 x double> %a0, <2 x double> %a1) {1765; CHECK-LABEL: stack_fold_haddpd:1766; CHECK: # %bb.0:1767; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1768; CHECK-NEXT: #APP1769; CHECK-NEXT: nop1770; CHECK-NEXT: #NO_APP1771; CHECK-NEXT: vhaddpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1772; CHECK-NEXT: retq1773 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1774 %2 = call <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double> %a0, <2 x double> %a1)1775 ret <2 x double> %21776}1777declare <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double>, <2 x double>) nounwind readnone1778 1779define <4 x double> @stack_fold_haddpd_ymm(<4 x double> %a0, <4 x double> %a1) {1780; CHECK-LABEL: stack_fold_haddpd_ymm:1781; CHECK: # %bb.0:1782; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1783; CHECK-NEXT: #APP1784; CHECK-NEXT: nop1785; CHECK-NEXT: #NO_APP1786; CHECK-NEXT: vhaddpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1787; CHECK-NEXT: retq1788 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1789 %2 = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %a0, <4 x double> %a1)1790 ret <4 x double> %21791}1792declare <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double>, <4 x double>) nounwind readnone1793 1794define <4 x float> @stack_fold_haddps(<4 x float> %a0, <4 x float> %a1) {1795; CHECK-LABEL: stack_fold_haddps:1796; CHECK: # %bb.0:1797; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1798; CHECK-NEXT: #APP1799; CHECK-NEXT: nop1800; CHECK-NEXT: #NO_APP1801; CHECK-NEXT: vhaddps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1802; CHECK-NEXT: retq1803 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1804 %2 = call <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float> %a0, <4 x float> %a1)1805 ret <4 x float> %21806}1807declare <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float>, <4 x float>) nounwind readnone1808 1809define <8 x float> @stack_fold_haddps_ymm(<8 x float> %a0, <8 x float> %a1) {1810; CHECK-LABEL: stack_fold_haddps_ymm:1811; CHECK: # %bb.0:1812; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1813; CHECK-NEXT: #APP1814; CHECK-NEXT: nop1815; CHECK-NEXT: #NO_APP1816; CHECK-NEXT: vhaddps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1817; CHECK-NEXT: retq1818 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1819 %2 = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %a0, <8 x float> %a1)1820 ret <8 x float> %21821}1822declare <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float>, <8 x float>) nounwind readnone1823 1824define <2 x double> @stack_fold_hsubpd(<2 x double> %a0, <2 x double> %a1) {1825; CHECK-LABEL: stack_fold_hsubpd:1826; CHECK: # %bb.0:1827; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1828; CHECK-NEXT: #APP1829; CHECK-NEXT: nop1830; CHECK-NEXT: #NO_APP1831; CHECK-NEXT: vhsubpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1832; CHECK-NEXT: retq1833 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1834 %2 = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %a0, <2 x double> %a1)1835 ret <2 x double> %21836}1837declare <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double>, <2 x double>) nounwind readnone1838 1839define <4 x double> @stack_fold_hsubpd_ymm(<4 x double> %a0, <4 x double> %a1) {1840; CHECK-LABEL: stack_fold_hsubpd_ymm:1841; CHECK: # %bb.0:1842; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1843; CHECK-NEXT: #APP1844; CHECK-NEXT: nop1845; CHECK-NEXT: #NO_APP1846; CHECK-NEXT: vhsubpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1847; CHECK-NEXT: retq1848 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1849 %2 = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %a0, <4 x double> %a1)1850 ret <4 x double> %21851}1852declare <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double>, <4 x double>) nounwind readnone1853 1854define <4 x float> @stack_fold_hsubps(<4 x float> %a0, <4 x float> %a1) {1855; CHECK-LABEL: stack_fold_hsubps:1856; CHECK: # %bb.0:1857; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1858; CHECK-NEXT: #APP1859; CHECK-NEXT: nop1860; CHECK-NEXT: #NO_APP1861; CHECK-NEXT: vhsubps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1862; CHECK-NEXT: retq1863 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1864 %2 = call <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float> %a0, <4 x float> %a1)1865 ret <4 x float> %21866}1867declare <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float>, <4 x float>) nounwind readnone1868 1869define <8 x float> @stack_fold_hsubps_ymm(<8 x float> %a0, <8 x float> %a1) {1870; CHECK-LABEL: stack_fold_hsubps_ymm:1871; CHECK: # %bb.0:1872; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1873; CHECK-NEXT: #APP1874; CHECK-NEXT: nop1875; CHECK-NEXT: #NO_APP1876; CHECK-NEXT: vhsubps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1877; CHECK-NEXT: retq1878 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1879 %2 = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %a0, <8 x float> %a1)1880 ret <8 x float> %21881}1882declare <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float>, <8 x float>) nounwind readnone1883 1884define <8 x float> @stack_fold_insertf128(<4 x float> %a0, <4 x float> %a1) {1885; CHECK-LABEL: stack_fold_insertf128:1886; CHECK: # %bb.0:1887; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1888; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm01889; CHECK-NEXT: #APP1890; CHECK-NEXT: nop1891; CHECK-NEXT: #NO_APP1892; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1893; CHECK-NEXT: retq1894 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1895 %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1896 ret <8 x float> %21897}1898 1899define <4 x float> @stack_fold_insertps(<4 x float> %a0, <4 x float> %a1) {1900; CHECK-LABEL: stack_fold_insertps:1901; CHECK: # %bb.0:1902; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1903; CHECK-NEXT: #APP1904; CHECK-NEXT: nop1905; CHECK-NEXT: #NO_APP1906; CHECK-NEXT: vinsertps $17, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1907; CHECK-NEXT: # xmm0 = zero,mem[0],xmm0[2,3]1908; CHECK-NEXT: retq1909 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1910 %2 = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 209)1911 ret <4 x float> %21912}1913declare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone1914 1915define <2 x double> @stack_fold_maxpd(<2 x double> %a0, <2 x double> %a1) {1916; CHECK-LABEL: stack_fold_maxpd:1917; CHECK: # %bb.0:1918; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1919; CHECK-NEXT: #APP1920; CHECK-NEXT: nop1921; CHECK-NEXT: #NO_APP1922; CHECK-NEXT: vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1923; CHECK-NEXT: retq1924 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1925 %2 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)1926 ret <2 x double> %21927}1928declare <2 x double> @llvm.x86.sse2.max.pd(<2 x double>, <2 x double>) nounwind readnone1929 1930define <2 x double> @stack_fold_maxpd_commutable(<2 x double> %a0, <2 x double> %a1) {1931; CHECK-LABEL: stack_fold_maxpd_commutable:1932; CHECK: # %bb.0:1933; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1934; CHECK-NEXT: #APP1935; CHECK-NEXT: nop1936; CHECK-NEXT: #NO_APP1937; CHECK-NEXT: vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1938; CHECK-NEXT: retq1939 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1940 %2 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)1941 ret <2 x double> %21942}1943 1944define <4 x double> @stack_fold_maxpd_ymm(<4 x double> %a0, <4 x double> %a1) {1945; CHECK-LABEL: stack_fold_maxpd_ymm:1946; CHECK: # %bb.0:1947; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1948; CHECK-NEXT: #APP1949; CHECK-NEXT: nop1950; CHECK-NEXT: #NO_APP1951; CHECK-NEXT: vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1952; CHECK-NEXT: retq1953 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1954 %2 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1)1955 ret <4 x double> %21956}1957declare <4 x double> @llvm.x86.avx.max.pd.256(<4 x double>, <4 x double>) nounwind readnone1958 1959define <4 x double> @stack_fold_maxpd_ymm_commutable(<4 x double> %a0, <4 x double> %a1) {1960; CHECK-LABEL: stack_fold_maxpd_ymm_commutable:1961; CHECK: # %bb.0:1962; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1963; CHECK-NEXT: #APP1964; CHECK-NEXT: nop1965; CHECK-NEXT: #NO_APP1966; CHECK-NEXT: vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1967; CHECK-NEXT: retq1968 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1969 %2 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1)1970 ret <4 x double> %21971}1972 1973define <4 x float> @stack_fold_maxps(<4 x float> %a0, <4 x float> %a1) {1974; CHECK-LABEL: stack_fold_maxps:1975; CHECK: # %bb.0:1976; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1977; CHECK-NEXT: #APP1978; CHECK-NEXT: nop1979; CHECK-NEXT: #NO_APP1980; CHECK-NEXT: vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1981; CHECK-NEXT: retq1982 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1983 %2 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)1984 ret <4 x float> %21985}1986declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone1987 1988define <4 x float> @stack_fold_maxps_commutable(<4 x float> %a0, <4 x float> %a1) {1989; CHECK-LABEL: stack_fold_maxps_commutable:1990; CHECK: # %bb.0:1991; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1992; CHECK-NEXT: #APP1993; CHECK-NEXT: nop1994; CHECK-NEXT: #NO_APP1995; CHECK-NEXT: vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1996; CHECK-NEXT: retq1997 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1998 %2 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)1999 ret <4 x float> %22000}2001 2002define <8 x float> @stack_fold_maxps_ymm(<8 x float> %a0, <8 x float> %a1) {2003; CHECK-LABEL: stack_fold_maxps_ymm:2004; CHECK: # %bb.0:2005; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2006; CHECK-NEXT: #APP2007; CHECK-NEXT: nop2008; CHECK-NEXT: #NO_APP2009; CHECK-NEXT: vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2010; CHECK-NEXT: retq2011 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2012 %2 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1)2013 ret <8 x float> %22014}2015declare <8 x float> @llvm.x86.avx.max.ps.256(<8 x float>, <8 x float>) nounwind readnone2016 2017define <8 x float> @stack_fold_maxps_ymm_commutable(<8 x float> %a0, <8 x float> %a1) {2018; CHECK-LABEL: stack_fold_maxps_ymm_commutable:2019; CHECK: # %bb.0:2020; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2021; CHECK-NEXT: #APP2022; CHECK-NEXT: nop2023; CHECK-NEXT: #NO_APP2024; CHECK-NEXT: vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2025; CHECK-NEXT: retq2026 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2027 %2 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1)2028 ret <8 x float> %22029}2030 2031define double @stack_fold_maxsd(double %a0, double %a1) {2032; CHECK-LABEL: stack_fold_maxsd:2033; CHECK: # %bb.0:2034; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2035; CHECK-NEXT: #APP2036; CHECK-NEXT: nop2037; CHECK-NEXT: #NO_APP2038; CHECK-NEXT: vmaxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload2039; CHECK-NEXT: retq2040 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2041 %2 = fcmp ogt double %a0, %a12042 %3 = select i1 %2, double %a0, double %a12043 ret double %32044}2045 2046define double @stack_fold_maxsd_commutable(double %a0, double %a1) {2047; CHECK-LABEL: stack_fold_maxsd_commutable:2048; CHECK: # %bb.0:2049; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2050; CHECK-NEXT: #APP2051; CHECK-NEXT: nop2052; CHECK-NEXT: #NO_APP2053; CHECK-NEXT: vmaxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload2054; CHECK-NEXT: retq2055 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2056 %2 = fcmp ogt double %a0, %a12057 %3 = select i1 %2, double %a0, double %a12058 ret double %32059}2060 2061define <2 x double> @stack_fold_maxsd_int(<2 x double> %a0, <2 x double> %a1) {2062; CHECK-LABEL: stack_fold_maxsd_int:2063; CHECK: # %bb.0:2064; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2065; CHECK-NEXT: #APP2066; CHECK-NEXT: nop2067; CHECK-NEXT: #NO_APP2068; CHECK-NEXT: vmaxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2069; CHECK-NEXT: retq2070 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2071 %2 = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a0, <2 x double> %a1)2072 ret <2 x double> %22073}2074declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>) nounwind readnone2075 2076define float @stack_fold_maxss(float %a0, float %a1) {2077; CHECK-LABEL: stack_fold_maxss:2078; CHECK: # %bb.0:2079; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2080; CHECK-NEXT: #APP2081; CHECK-NEXT: nop2082; CHECK-NEXT: #NO_APP2083; CHECK-NEXT: vmaxss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload2084; CHECK-NEXT: retq2085 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2086 %2 = fcmp ogt float %a0, %a12087 %3 = select i1 %2, float %a0, float %a12088 ret float %32089}2090 2091define float @stack_fold_maxss_commutable(float %a0, float %a1) {2092; CHECK-LABEL: stack_fold_maxss_commutable:2093; CHECK: # %bb.0:2094; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2095; CHECK-NEXT: #APP2096; CHECK-NEXT: nop2097; CHECK-NEXT: #NO_APP2098; CHECK-NEXT: vmaxss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload2099; CHECK-NEXT: retq2100 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2101 %2 = fcmp ogt float %a0, %a12102 %3 = select i1 %2, float %a0, float %a12103 ret float %32104}2105 2106define <4 x float> @stack_fold_maxss_int(<4 x float> %a0, <4 x float> %a1) {2107; CHECK-LABEL: stack_fold_maxss_int:2108; CHECK: # %bb.0:2109; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2110; CHECK-NEXT: #APP2111; CHECK-NEXT: nop2112; CHECK-NEXT: #NO_APP2113; CHECK-NEXT: vmaxss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2114; CHECK-NEXT: retq2115 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2116 %2 = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1)2117 ret <4 x float> %22118}2119declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone2120 2121define <2 x double> @stack_fold_minpd(<2 x double> %a0, <2 x double> %a1) {2122; CHECK-LABEL: stack_fold_minpd:2123; CHECK: # %bb.0:2124; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2125; CHECK-NEXT: #APP2126; CHECK-NEXT: nop2127; CHECK-NEXT: #NO_APP2128; CHECK-NEXT: vminpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2129; CHECK-NEXT: retq2130 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2131 %2 = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %a0, <2 x double> %a1)2132 ret <2 x double> %22133}2134declare <2 x double> @llvm.x86.sse2.min.pd(<2 x double>, <2 x double>) nounwind readnone2135 2136define <2 x double> @stack_fold_minpd_commutable(<2 x double> %a0, <2 x double> %a1) {2137; CHECK-LABEL: stack_fold_minpd_commutable:2138; CHECK: # %bb.0:2139; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2140; CHECK-NEXT: #APP2141; CHECK-NEXT: nop2142; CHECK-NEXT: #NO_APP2143; CHECK-NEXT: vminpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2144; CHECK-NEXT: retq2145 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2146 %2 = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %a0, <2 x double> %a1)2147 ret <2 x double> %22148}2149 2150define <4 x double> @stack_fold_minpd_ymm(<4 x double> %a0, <4 x double> %a1) {2151; CHECK-LABEL: stack_fold_minpd_ymm:2152; CHECK: # %bb.0:2153; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2154; CHECK-NEXT: #APP2155; CHECK-NEXT: nop2156; CHECK-NEXT: #NO_APP2157; CHECK-NEXT: vminpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2158; CHECK-NEXT: retq2159 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2160 %2 = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %a0, <4 x double> %a1)2161 ret <4 x double> %22162}2163declare <4 x double> @llvm.x86.avx.min.pd.256(<4 x double>, <4 x double>) nounwind readnone2164 2165define <4 x double> @stack_fold_minpd_ymm_commutable(<4 x double> %a0, <4 x double> %a1) {2166; CHECK-LABEL: stack_fold_minpd_ymm_commutable:2167; CHECK: # %bb.0:2168; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2169; CHECK-NEXT: #APP2170; CHECK-NEXT: nop2171; CHECK-NEXT: #NO_APP2172; CHECK-NEXT: vminpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2173; CHECK-NEXT: retq2174 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2175 %2 = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %a0, <4 x double> %a1)2176 ret <4 x double> %22177}2178 2179define <4 x float> @stack_fold_minps(<4 x float> %a0, <4 x float> %a1) {2180; CHECK-LABEL: stack_fold_minps:2181; CHECK: # %bb.0:2182; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2183; CHECK-NEXT: #APP2184; CHECK-NEXT: nop2185; CHECK-NEXT: #NO_APP2186; CHECK-NEXT: vminps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2187; CHECK-NEXT: retq2188 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2189 %2 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)2190 ret <4 x float> %22191}2192declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone2193 2194define <4 x float> @stack_fold_minps_commutable(<4 x float> %a0, <4 x float> %a1) {2195; CHECK-LABEL: stack_fold_minps_commutable:2196; CHECK: # %bb.0:2197; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2198; CHECK-NEXT: #APP2199; CHECK-NEXT: nop2200; CHECK-NEXT: #NO_APP2201; CHECK-NEXT: vminps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2202; CHECK-NEXT: retq2203 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2204 %2 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)2205 ret <4 x float> %22206}2207 2208define <8 x float> @stack_fold_minps_ymm(<8 x float> %a0, <8 x float> %a1) {2209; CHECK-LABEL: stack_fold_minps_ymm:2210; CHECK: # %bb.0:2211; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2212; CHECK-NEXT: #APP2213; CHECK-NEXT: nop2214; CHECK-NEXT: #NO_APP2215; CHECK-NEXT: vminps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2216; CHECK-NEXT: retq2217 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2218 %2 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1)2219 ret <8 x float> %22220}2221declare <8 x float> @llvm.x86.avx.min.ps.256(<8 x float>, <8 x float>) nounwind readnone2222 2223define <8 x float> @stack_fold_minps_ymm_commutable(<8 x float> %a0, <8 x float> %a1) {2224; CHECK-LABEL: stack_fold_minps_ymm_commutable:2225; CHECK: # %bb.0:2226; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2227; CHECK-NEXT: #APP2228; CHECK-NEXT: nop2229; CHECK-NEXT: #NO_APP2230; CHECK-NEXT: vminps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2231; CHECK-NEXT: retq2232 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2233 %2 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1)2234 ret <8 x float> %22235}2236 2237define double @stack_fold_minsd(double %a0, double %a1) {2238; CHECK-LABEL: stack_fold_minsd:2239; CHECK: # %bb.0:2240; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2241; CHECK-NEXT: #APP2242; CHECK-NEXT: nop2243; CHECK-NEXT: #NO_APP2244; CHECK-NEXT: vminsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload2245; CHECK-NEXT: retq2246 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2247 %2 = fcmp olt double %a0, %a12248 %3 = select i1 %2, double %a0, double %a12249 ret double %32250}2251 2252define double @stack_fold_minsd_commutable(double %a0, double %a1) {2253; CHECK-LABEL: stack_fold_minsd_commutable:2254; CHECK: # %bb.0:2255; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2256; CHECK-NEXT: #APP2257; CHECK-NEXT: nop2258; CHECK-NEXT: #NO_APP2259; CHECK-NEXT: vminsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload2260; CHECK-NEXT: retq2261 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2262 %2 = fcmp olt double %a0, %a12263 %3 = select i1 %2, double %a0, double %a12264 ret double %32265}2266 2267define <2 x double> @stack_fold_minsd_int(<2 x double> %a0, <2 x double> %a1) {2268; CHECK-LABEL: stack_fold_minsd_int:2269; CHECK: # %bb.0:2270; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2271; CHECK-NEXT: #APP2272; CHECK-NEXT: nop2273; CHECK-NEXT: #NO_APP2274; CHECK-NEXT: vminsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2275; CHECK-NEXT: retq2276 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2277 %2 = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a0, <2 x double> %a1)2278 ret <2 x double> %22279}2280declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>) nounwind readnone2281 2282define float @stack_fold_minss(float %a0, float %a1) {2283; CHECK-LABEL: stack_fold_minss:2284; CHECK: # %bb.0:2285; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2286; CHECK-NEXT: #APP2287; CHECK-NEXT: nop2288; CHECK-NEXT: #NO_APP2289; CHECK-NEXT: vminss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload2290; CHECK-NEXT: retq2291 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2292 %2 = fcmp olt float %a0, %a12293 %3 = select i1 %2, float %a0, float %a12294 ret float %32295}2296 2297define float @stack_fold_minss_commutable(float %a0, float %a1) {2298; CHECK-LABEL: stack_fold_minss_commutable:2299; CHECK: # %bb.0:2300; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2301; CHECK-NEXT: #APP2302; CHECK-NEXT: nop2303; CHECK-NEXT: #NO_APP2304; CHECK-NEXT: vminss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload2305; CHECK-NEXT: retq2306 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2307 %2 = fcmp olt float %a0, %a12308 %3 = select i1 %2, float %a0, float %a12309 ret float %32310}2311 2312define <4 x float> @stack_fold_minss_int(<4 x float> %a0, <4 x float> %a1) {2313; CHECK-LABEL: stack_fold_minss_int:2314; CHECK: # %bb.0:2315; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2316; CHECK-NEXT: #APP2317; CHECK-NEXT: nop2318; CHECK-NEXT: #NO_APP2319; CHECK-NEXT: vminss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2320; CHECK-NEXT: retq2321 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2322 %2 = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1)2323 ret <4 x float> %22324}2325declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone2326 2327define <2 x double> @stack_fold_movddup(<2 x double> %a0) {2328; CHECK-LABEL: stack_fold_movddup:2329; CHECK: # %bb.0:2330; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2331; CHECK-NEXT: #APP2332; CHECK-NEXT: nop2333; CHECK-NEXT: #NO_APP2334; CHECK-NEXT: vmovddup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2335; CHECK-NEXT: # xmm0 = mem[0,0]2336; CHECK-NEXT: retq2337 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2338 %2 = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> <i32 0, i32 0>2339 ret <2 x double> %22340}2341 2342define <4 x double> @stack_fold_movddup_ymm(<4 x double> %a0) {2343; CHECK-LABEL: stack_fold_movddup_ymm:2344; CHECK: # %bb.0:2345; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2346; CHECK-NEXT: #APP2347; CHECK-NEXT: nop2348; CHECK-NEXT: #NO_APP2349; CHECK-NEXT: vmovddup {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2350; CHECK-NEXT: # ymm0 = mem[0,0,2,2]2351; CHECK-NEXT: retq2352 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2353 %2 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2354 ret <4 x double> %22355}2356 2357; TODO stack_fold_movhpd (load / store)2358; TODO stack_fold_movhps (load / store)2359 2360; TODO stack_fold_movlpd (load / store)2361; TODO stack_fold_movlps (load / store)2362 2363define <4 x float> @stack_fold_movshdup(<4 x float> %a0) {2364; CHECK-LABEL: stack_fold_movshdup:2365; CHECK: # %bb.0:2366; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2367; CHECK-NEXT: #APP2368; CHECK-NEXT: nop2369; CHECK-NEXT: #NO_APP2370; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2371; CHECK-NEXT: # xmm0 = mem[1,1,3,3]2372; CHECK-NEXT: retq2373 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2374 %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>2375 ret <4 x float> %22376}2377 2378define <8 x float> @stack_fold_movshdup_ymm(<8 x float> %a0) {2379; CHECK-LABEL: stack_fold_movshdup_ymm:2380; CHECK: # %bb.0:2381; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2382; CHECK-NEXT: #APP2383; CHECK-NEXT: nop2384; CHECK-NEXT: #NO_APP2385; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2386; CHECK-NEXT: # ymm0 = mem[1,1,3,3,5,5,7,7]2387; CHECK-NEXT: retq2388 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2389 %2 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>2390 ret <8 x float> %22391}2392 2393define <4 x float> @stack_fold_movsldup(<4 x float> %a0) {2394; CHECK-LABEL: stack_fold_movsldup:2395; CHECK: # %bb.0:2396; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2397; CHECK-NEXT: #APP2398; CHECK-NEXT: nop2399; CHECK-NEXT: #NO_APP2400; CHECK-NEXT: vmovsldup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2401; CHECK-NEXT: # xmm0 = mem[0,0,2,2]2402; CHECK-NEXT: retq2403 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2404 %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2405 ret <4 x float> %22406}2407 2408define <8 x float> @stack_fold_movsldup_ymm(<8 x float> %a0) {2409; CHECK-LABEL: stack_fold_movsldup_ymm:2410; CHECK: # %bb.0:2411; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2412; CHECK-NEXT: #APP2413; CHECK-NEXT: nop2414; CHECK-NEXT: #NO_APP2415; CHECK-NEXT: vmovsldup {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2416; CHECK-NEXT: # ymm0 = mem[0,0,2,2,4,4,6,6]2417; CHECK-NEXT: retq2418 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2419 %2 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>2420 ret <8 x float> %22421}2422 2423define <2 x double> @stack_fold_mulpd(<2 x double> %a0, <2 x double> %a1) {2424; CHECK-LABEL: stack_fold_mulpd:2425; CHECK: # %bb.0:2426; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2427; CHECK-NEXT: #APP2428; CHECK-NEXT: nop2429; CHECK-NEXT: #NO_APP2430; CHECK-NEXT: vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2431; CHECK-NEXT: retq2432 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2433 %2 = fmul <2 x double> %a0, %a12434 ret <2 x double> %22435}2436 2437define <4 x double> @stack_fold_mulpd_ymm(<4 x double> %a0, <4 x double> %a1) {2438; CHECK-LABEL: stack_fold_mulpd_ymm:2439; CHECK: # %bb.0:2440; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2441; CHECK-NEXT: #APP2442; CHECK-NEXT: nop2443; CHECK-NEXT: #NO_APP2444; CHECK-NEXT: vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2445; CHECK-NEXT: retq2446 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2447 %2 = fmul <4 x double> %a0, %a12448 ret <4 x double> %22449}2450 2451define <4 x float> @stack_fold_mulps(<4 x float> %a0, <4 x float> %a1) {2452; CHECK-LABEL: stack_fold_mulps:2453; CHECK: # %bb.0:2454; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2455; CHECK-NEXT: #APP2456; CHECK-NEXT: nop2457; CHECK-NEXT: #NO_APP2458; CHECK-NEXT: vmulps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2459; CHECK-NEXT: retq2460 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2461 %2 = fmul <4 x float> %a0, %a12462 ret <4 x float> %22463}2464 2465define <8 x float> @stack_fold_mulps_ymm(<8 x float> %a0, <8 x float> %a1) {2466; CHECK-LABEL: stack_fold_mulps_ymm:2467; CHECK: # %bb.0:2468; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2469; CHECK-NEXT: #APP2470; CHECK-NEXT: nop2471; CHECK-NEXT: #NO_APP2472; CHECK-NEXT: vmulps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2473; CHECK-NEXT: retq2474 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2475 %2 = fmul <8 x float> %a0, %a12476 ret <8 x float> %22477}2478 2479define double @stack_fold_mulsd(double %a0, double %a1) {2480; CHECK-LABEL: stack_fold_mulsd:2481; CHECK: # %bb.0:2482; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2483; CHECK-NEXT: #APP2484; CHECK-NEXT: nop2485; CHECK-NEXT: #NO_APP2486; CHECK-NEXT: vmulsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload2487; CHECK-NEXT: retq2488 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2489 %2 = fmul double %a0, %a12490 ret double %22491}2492 2493define <2 x double> @stack_fold_mulsd_int(<2 x double> %a0, <2 x double> %a1) {2494; CHECK-LABEL: stack_fold_mulsd_int:2495; CHECK: # %bb.0:2496; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2497; CHECK-NEXT: #APP2498; CHECK-NEXT: nop2499; CHECK-NEXT: #NO_APP2500; CHECK-NEXT: vmulsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2501; CHECK-NEXT: retq2502 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2503 %2 = extractelement <2 x double> %a0, i32 02504 %3 = extractelement <2 x double> %a1, i32 02505 %4 = fmul double %2, %32506 %5 = insertelement <2 x double> %a0, double %4, i32 02507 ret <2 x double> %52508}2509 2510define float @stack_fold_mulss(float %a0, float %a1) {2511; CHECK-LABEL: stack_fold_mulss:2512; CHECK: # %bb.0:2513; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2514; CHECK-NEXT: #APP2515; CHECK-NEXT: nop2516; CHECK-NEXT: #NO_APP2517; CHECK-NEXT: vmulss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload2518; CHECK-NEXT: retq2519 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2520 %2 = fmul float %a0, %a12521 ret float %22522}2523 2524define <4 x float> @stack_fold_mulss_int(<4 x float> %a0, <4 x float> %a1) {2525; CHECK-LABEL: stack_fold_mulss_int:2526; CHECK: # %bb.0:2527; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2528; CHECK-NEXT: #APP2529; CHECK-NEXT: nop2530; CHECK-NEXT: #NO_APP2531; CHECK-NEXT: vmulss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2532; CHECK-NEXT: retq2533 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2534 %2 = extractelement <4 x float> %a0, i32 02535 %3 = extractelement <4 x float> %a1, i32 02536 %4 = fmul float %2, %32537 %5 = insertelement <4 x float> %a0, float %4, i32 02538 ret <4 x float> %52539}2540 2541define <2 x double> @stack_fold_orpd(<2 x double> %a0, <2 x double> %a1) {2542; CHECK-LABEL: stack_fold_orpd:2543; CHECK: # %bb.0:2544; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2545; CHECK-NEXT: #APP2546; CHECK-NEXT: nop2547; CHECK-NEXT: #NO_APP2548; CHECK-NEXT: vorpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2549; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm12550; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm02551; CHECK-NEXT: retq2552 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2553 %2 = bitcast <2 x double> %a0 to <2 x i64>2554 %3 = bitcast <2 x double> %a1 to <2 x i64>2555 %4 = or <2 x i64> %2, %32556 %5 = bitcast <2 x i64> %4 to <2 x double>2557 ; fadd forces execution domain2558 %6 = fadd <2 x double> %5, <double 0x0, double 0x0>2559 ret <2 x double> %62560}2561 2562define <4 x double> @stack_fold_orpd_ymm(<4 x double> %a0, <4 x double> %a1) {2563; CHECK-LABEL: stack_fold_orpd_ymm:2564; CHECK: # %bb.0:2565; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2566; CHECK-NEXT: #APP2567; CHECK-NEXT: nop2568; CHECK-NEXT: #NO_APP2569; CHECK-NEXT: vorpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2570; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm12571; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm02572; CHECK-NEXT: retq2573 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2574 %2 = bitcast <4 x double> %a0 to <4 x i64>2575 %3 = bitcast <4 x double> %a1 to <4 x i64>2576 %4 = or <4 x i64> %2, %32577 %5 = bitcast <4 x i64> %4 to <4 x double>2578 ; fadd forces execution domain2579 %6 = fadd <4 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0>2580 ret <4 x double> %62581}2582 2583define <4 x float> @stack_fold_orps(<4 x float> %a0, <4 x float> %a1) {2584; CHECK-LABEL: stack_fold_orps:2585; CHECK: # %bb.0:2586; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2587; CHECK-NEXT: #APP2588; CHECK-NEXT: nop2589; CHECK-NEXT: #NO_APP2590; CHECK-NEXT: vorps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2591; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm12592; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm02593; CHECK-NEXT: retq2594 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2595 %2 = bitcast <4 x float> %a0 to <2 x i64>2596 %3 = bitcast <4 x float> %a1 to <2 x i64>2597 %4 = or <2 x i64> %2, %32598 %5 = bitcast <2 x i64> %4 to <4 x float>2599 ; fadd forces execution domain2600 %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>2601 ret <4 x float> %62602}2603 2604define <8 x float> @stack_fold_orps_ymm(<8 x float> %a0, <8 x float> %a1) {2605; CHECK-LABEL: stack_fold_orps_ymm:2606; CHECK: # %bb.0:2607; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2608; CHECK-NEXT: #APP2609; CHECK-NEXT: nop2610; CHECK-NEXT: #NO_APP2611; CHECK-NEXT: vorps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2612; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm12613; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm02614; CHECK-NEXT: retq2615 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2616 %2 = bitcast <8 x float> %a0 to <4 x i64>2617 %3 = bitcast <8 x float> %a1 to <4 x i64>2618 %4 = or <4 x i64> %2, %32619 %5 = bitcast <4 x i64> %4 to <8 x float>2620 ; fadd forces execution domain2621 %6 = fadd <8 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>2622 ret <8 x float> %62623}2624 2625define <8 x float> @stack_fold_perm2f128(<8 x float> %a0, <8 x float> %a1) {2626; CHECK-LABEL: stack_fold_perm2f128:2627; CHECK: # %bb.0:2628; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2629; CHECK-NEXT: #APP2630; CHECK-NEXT: nop2631; CHECK-NEXT: #NO_APP2632; CHECK-NEXT: vperm2f128 $33, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2633; CHECK-NEXT: # ymm0 = ymm0[2,3],mem[0,1]2634; CHECK-NEXT: retq2635 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2636 %2 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>2637 ret <8 x float> %22638}2639 2640define <2 x double> @stack_fold_permilpd(<2 x double> %a0) {2641; CHECK-LABEL: stack_fold_permilpd:2642; CHECK: # %bb.0:2643; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2644; CHECK-NEXT: #APP2645; CHECK-NEXT: nop2646; CHECK-NEXT: #NO_APP2647; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2648; CHECK-NEXT: # xmm0 = mem[1,0]2649; CHECK-NEXT: retq2650 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2651 %2 = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> <i32 1, i32 0>2652 ret <2 x double> %22653}2654 2655define <4 x double> @stack_fold_permilpd_ymm(<4 x double> %a0) {2656; CHECK-LABEL: stack_fold_permilpd_ymm:2657; CHECK: # %bb.0:2658; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2659; CHECK-NEXT: #APP2660; CHECK-NEXT: nop2661; CHECK-NEXT: #NO_APP2662; CHECK-NEXT: vpermilpd $5, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2663; CHECK-NEXT: # ymm0 = mem[1,0,3,2]2664; CHECK-NEXT: retq2665 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2666 %2 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>2667 ret <4 x double> %22668}2669 2670define <2 x double> @stack_fold_permilpdvar(<2 x double> %a0, <2 x i64> %a1) {2671; CHECK-LABEL: stack_fold_permilpdvar:2672; CHECK: # %bb.0:2673; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2674; CHECK-NEXT: #APP2675; CHECK-NEXT: nop2676; CHECK-NEXT: #NO_APP2677; CHECK-NEXT: vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2678; CHECK-NEXT: retq2679 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2680 %2 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1)2681 ret <2 x double> %22682}2683declare <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double>, <2 x i64>) nounwind readnone2684 2685define <4 x double> @stack_fold_permilpdvar_ymm(<4 x double> %a0, <4 x i64> %a1) {2686; CHECK-LABEL: stack_fold_permilpdvar_ymm:2687; CHECK: # %bb.0:2688; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2689; CHECK-NEXT: #APP2690; CHECK-NEXT: nop2691; CHECK-NEXT: #NO_APP2692; CHECK-NEXT: vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2693; CHECK-NEXT: retq2694 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2695 %2 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1)2696 ret <4 x double> %22697}2698declare <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double>, <4 x i64>) nounwind readnone2699 2700define <4 x float> @stack_fold_permilps(<4 x float> %a0) {2701; CHECK-LABEL: stack_fold_permilps:2702; CHECK: # %bb.0:2703; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2704; CHECK-NEXT: #APP2705; CHECK-NEXT: nop2706; CHECK-NEXT: #NO_APP2707; CHECK-NEXT: vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2708; CHECK-NEXT: # xmm0 = mem[3,2,1,0]2709; CHECK-NEXT: retq2710 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2711 %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>2712 ret <4 x float> %22713}2714 2715define <8 x float> @stack_fold_permilps_ymm(<8 x float> %a0) {2716; CHECK-LABEL: stack_fold_permilps_ymm:2717; CHECK: # %bb.0:2718; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2719; CHECK-NEXT: #APP2720; CHECK-NEXT: nop2721; CHECK-NEXT: #NO_APP2722; CHECK-NEXT: vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2723; CHECK-NEXT: # ymm0 = mem[3,2,1,0,7,6,5,4]2724; CHECK-NEXT: retq2725 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2726 %2 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>2727 ret <8 x float> %22728}2729 2730define <4 x float> @stack_fold_permilpsvar(<4 x float> %a0, <4 x i32> %a1) {2731; CHECK-LABEL: stack_fold_permilpsvar:2732; CHECK: # %bb.0:2733; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2734; CHECK-NEXT: #APP2735; CHECK-NEXT: nop2736; CHECK-NEXT: #NO_APP2737; CHECK-NEXT: vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2738; CHECK-NEXT: retq2739 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2740 %2 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1)2741 ret <4 x float> %22742}2743declare <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float>, <4 x i32>) nounwind readnone2744 2745define <8 x float> @stack_fold_permilpsvar_ymm(<8 x float> %a0, <8 x i32> %a1) {2746; CHECK-LABEL: stack_fold_permilpsvar_ymm:2747; CHECK: # %bb.0:2748; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2749; CHECK-NEXT: #APP2750; CHECK-NEXT: nop2751; CHECK-NEXT: #NO_APP2752; CHECK-NEXT: vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2753; CHECK-NEXT: retq2754 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2755 %2 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1)2756 ret <8 x float> %22757}2758declare <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float>, <8 x i32>) nounwind readnone2759 2760; TODO stack_fold_rcpps2761 2762define <4 x float> @stack_fold_rcpps_int(<4 x float> %a0) {2763; CHECK-LABEL: stack_fold_rcpps_int:2764; CHECK: # %bb.0:2765; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2766; CHECK-NEXT: #APP2767; CHECK-NEXT: nop2768; CHECK-NEXT: #NO_APP2769; CHECK-NEXT: vrcpps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2770; CHECK-NEXT: retq2771 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2772 %2 = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0)2773 ret <4 x float> %22774}2775declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone2776 2777; TODO stack_fold_rcpps_ymm2778 2779define <8 x float> @stack_fold_rcpps_ymm_int(<8 x float> %a0) {2780; CHECK-LABEL: stack_fold_rcpps_ymm_int:2781; CHECK: # %bb.0:2782; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2783; CHECK-NEXT: #APP2784; CHECK-NEXT: nop2785; CHECK-NEXT: #NO_APP2786; CHECK-NEXT: vrcpps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2787; CHECK-NEXT: retq2788 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2789 %2 = call <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %a0)2790 ret <8 x float> %22791}2792declare <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float>) nounwind readnone2793 2794; TODO stack_fold_rcpss2795; TODO stack_fold_rcpss_int2796 2797define <2 x double> @stack_fold_roundpd(<2 x double> %a0) {2798; CHECK-LABEL: stack_fold_roundpd:2799; CHECK: # %bb.0:2800; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2801; CHECK-NEXT: #APP2802; CHECK-NEXT: nop2803; CHECK-NEXT: #NO_APP2804; CHECK-NEXT: vroundpd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2805; CHECK-NEXT: retq2806 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2807 %2 = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 7)2808 ret <2 x double> %22809}2810declare <2 x double> @llvm.x86.sse41.round.pd(<2 x double>, i32) nounwind readnone2811 2812define <4 x double> @stack_fold_roundpd_ymm(<4 x double> %a0) {2813; CHECK-LABEL: stack_fold_roundpd_ymm:2814; CHECK: # %bb.0:2815; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2816; CHECK-NEXT: #APP2817; CHECK-NEXT: nop2818; CHECK-NEXT: #NO_APP2819; CHECK-NEXT: vroundpd $7, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2820; CHECK-NEXT: retq2821 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2822 %2 = call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %a0, i32 7)2823 ret <4 x double> %22824}2825declare <4 x double> @llvm.x86.avx.round.pd.256(<4 x double>, i32) nounwind readnone2826 2827define <4 x float> @stack_fold_roundps(<4 x float> %a0) {2828; CHECK-LABEL: stack_fold_roundps:2829; CHECK: # %bb.0:2830; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2831; CHECK-NEXT: #APP2832; CHECK-NEXT: nop2833; CHECK-NEXT: #NO_APP2834; CHECK-NEXT: vroundps $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2835; CHECK-NEXT: retq2836 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2837 %2 = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 7)2838 ret <4 x float> %22839}2840declare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone2841 2842define <8 x float> @stack_fold_roundps_ymm(<8 x float> %a0) {2843; CHECK-LABEL: stack_fold_roundps_ymm:2844; CHECK: # %bb.0:2845; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2846; CHECK-NEXT: #APP2847; CHECK-NEXT: nop2848; CHECK-NEXT: #NO_APP2849; CHECK-NEXT: vroundps $7, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2850; CHECK-NEXT: retq2851 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2852 %2 = call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %a0, i32 7)2853 ret <8 x float> %22854}2855declare <8 x float> @llvm.x86.avx.round.ps.256(<8 x float>, i32) nounwind readnone2856 2857define double @stack_fold_roundsd(double %a0) optsize {2858; CHECK-LABEL: stack_fold_roundsd:2859; CHECK: # %bb.0:2860; CHECK-NEXT: vmovsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2861; CHECK-NEXT: #APP2862; CHECK-NEXT: nop2863; CHECK-NEXT: #NO_APP2864; CHECK-NEXT: vxorps %xmm15, %xmm15, %xmm152865; CHECK-NEXT: vroundsd $9, {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload2866; CHECK-NEXT: retq2867 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2868 %2 = call double @llvm.floor.f64(double %a0)2869 ret double %22870}2871 2872define double @stack_fold_roundsd_minsize(double %a0) minsize {2873; CHECK-LABEL: stack_fold_roundsd_minsize:2874; CHECK: # %bb.0:2875; CHECK-NEXT: vmovsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2876; CHECK-NEXT: #APP2877; CHECK-NEXT: nop2878; CHECK-NEXT: #NO_APP2879; CHECK-NEXT: vroundsd $9, {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload2880; CHECK-NEXT: retq2881 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2882 %2 = call double @llvm.floor.f64(double %a0)2883 ret double %22884}2885declare double @llvm.floor.f64(double) nounwind readnone2886 2887define <2 x double> @stack_fold_roundsd_int(<2 x double> %a0, <2 x double> %a1) optsize {2888; CHECK-LABEL: stack_fold_roundsd_int:2889; CHECK: # %bb.0:2890; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2891; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2892; CHECK-NEXT: #APP2893; CHECK-NEXT: nop2894; CHECK-NEXT: #NO_APP2895; CHECK-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2896; CHECK-NEXT: vroundsd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2897; CHECK-NEXT: retq2898 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2899 %2 = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 7)2900 ret <2 x double> %22901}2902declare <2 x double> @llvm.x86.sse41.round.sd(<2 x double>, <2 x double>, i32) nounwind readnone2903 2904define float @stack_fold_roundss(float %a0) optsize {2905; CHECK-LABEL: stack_fold_roundss:2906; CHECK: # %bb.0:2907; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2908; CHECK-NEXT: #APP2909; CHECK-NEXT: nop2910; CHECK-NEXT: #NO_APP2911; CHECK-NEXT: vxorps %xmm15, %xmm15, %xmm152912; CHECK-NEXT: vroundss $9, {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 4-byte Folded Reload2913; CHECK-NEXT: retq2914 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2915 %2 = call float @llvm.floor.f32(float %a0)2916 ret float %22917}2918declare float @llvm.floor.f32(float) nounwind readnone2919 2920define <4 x float> @stack_fold_roundss_int(<4 x float> %a0, <4 x float> %a1) optsize {2921; CHECK-LABEL: stack_fold_roundss_int:2922; CHECK: # %bb.0:2923; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2924; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2925; CHECK-NEXT: #APP2926; CHECK-NEXT: nop2927; CHECK-NEXT: #NO_APP2928; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2929; CHECK-NEXT: vroundss $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2930; CHECK-NEXT: retq2931 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2932 %2 = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 7)2933 ret <4 x float> %22934}2935declare <4 x float> @llvm.x86.sse41.round.ss(<4 x float>, <4 x float>, i32) nounwind readnone2936 2937; TODO stack_fold_rsqrtps2938 2939define <4 x float> @stack_fold_rsqrtps_int(<4 x float> %a0) {2940; CHECK-LABEL: stack_fold_rsqrtps_int:2941; CHECK: # %bb.0:2942; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2943; CHECK-NEXT: #APP2944; CHECK-NEXT: nop2945; CHECK-NEXT: #NO_APP2946; CHECK-NEXT: vrsqrtps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2947; CHECK-NEXT: retq2948 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2949 %2 = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0)2950 ret <4 x float> %22951}2952declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone2953 2954; TODO stack_fold_rsqrtps_ymm2955 2956define <8 x float> @stack_fold_rsqrtps_ymm_int(<8 x float> %a0) {2957; CHECK-LABEL: stack_fold_rsqrtps_ymm_int:2958; CHECK: # %bb.0:2959; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2960; CHECK-NEXT: #APP2961; CHECK-NEXT: nop2962; CHECK-NEXT: #NO_APP2963; CHECK-NEXT: vrsqrtps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload2964; CHECK-NEXT: retq2965 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2966 %2 = call <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %a0)2967 ret <8 x float> %22968}2969declare <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float>) nounwind readnone2970 2971; TODO stack_fold_rsqrtss2972; TODO stack_fold_rsqrtss_int2973 2974define <2 x double> @stack_fold_shufpd(<2 x double> %a0, <2 x double> %a1) {2975; CHECK-LABEL: stack_fold_shufpd:2976; CHECK: # %bb.0:2977; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2978; CHECK-NEXT: #APP2979; CHECK-NEXT: nop2980; CHECK-NEXT: #NO_APP2981; CHECK-NEXT: vshufpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2982; CHECK-NEXT: # xmm0 = xmm0[1],mem[0]2983; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm12984; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm02985; CHECK-NEXT: retq2986 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2987 %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 2>2988 ; fadd forces execution domain2989 %3 = fadd <2 x double> %2, <double 0x0, double 0x0>2990 ret <2 x double> %32991}2992 2993define <4 x double> @stack_fold_shufpd_ymm(<4 x double> %a0, <4 x double> %a1) {2994; CHECK-LABEL: stack_fold_shufpd_ymm:2995; CHECK: # %bb.0:2996; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2997; CHECK-NEXT: #APP2998; CHECK-NEXT: nop2999; CHECK-NEXT: #NO_APP3000; CHECK-NEXT: vshufpd $5, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3001; CHECK-NEXT: # ymm0 = ymm0[1],mem[0],ymm0[3],mem[2]3002; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13003; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm03004; CHECK-NEXT: retq3005 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3006 %2 = shufflevector <4 x double> %a0, <4 x double> %a1, <4 x i32> <i32 1, i32 4, i32 3, i32 6>3007 ; fadd forces execution domain3008 %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>3009 ret <4 x double> %33010}3011 3012define <4 x float> @stack_fold_shufps(<4 x float> %a0, <4 x float> %a1) {3013; CHECK-LABEL: stack_fold_shufps:3014; CHECK: # %bb.0:3015; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3016; CHECK-NEXT: #APP3017; CHECK-NEXT: nop3018; CHECK-NEXT: #NO_APP3019; CHECK-NEXT: vshufps $200, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3020; CHECK-NEXT: # xmm0 = xmm0[0,2],mem[0,3]3021; CHECK-NEXT: retq3022 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3023 %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 2, i32 4, i32 7>3024 ret <4 x float> %23025}3026 3027define <8 x float> @stack_fold_shufps_ymm(<8 x float> %a0, <8 x float> %a1) {3028; CHECK-LABEL: stack_fold_shufps_ymm:3029; CHECK: # %bb.0:3030; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3031; CHECK-NEXT: #APP3032; CHECK-NEXT: nop3033; CHECK-NEXT: #NO_APP3034; CHECK-NEXT: vshufps $148, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3035; CHECK-NEXT: # ymm0 = ymm0[0,1],mem[1,2],ymm0[4,5],mem[5,6]3036; CHECK-NEXT: retq3037 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3038 %2 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 0, i32 1, i32 9, i32 10, i32 4, i32 5, i32 13, i32 14>3039 ret <8 x float> %23040}3041 3042define <2 x double> @stack_fold_sqrtpd(<2 x double> %a0) {3043; CHECK-LABEL: stack_fold_sqrtpd:3044; CHECK: # %bb.0:3045; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3046; CHECK-NEXT: #APP3047; CHECK-NEXT: nop3048; CHECK-NEXT: #NO_APP3049; CHECK-NEXT: vsqrtpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3050; CHECK-NEXT: retq3051 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3052 %2 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %a0)3053 ret <2 x double> %23054}3055declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)3056 3057define <4 x double> @stack_fold_sqrtpd_ymm(<4 x double> %a0) {3058; CHECK-LABEL: stack_fold_sqrtpd_ymm:3059; CHECK: # %bb.0:3060; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3061; CHECK-NEXT: #APP3062; CHECK-NEXT: nop3063; CHECK-NEXT: #NO_APP3064; CHECK-NEXT: vsqrtpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload3065; CHECK-NEXT: retq3066 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3067 %2 = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %a0)3068 ret <4 x double> %23069}3070declare <4 x double> @llvm.sqrt.v4f64(<4 x double>)3071 3072define <4 x float> @stack_fold_sqrtps(<4 x float> %a0) {3073; CHECK-LABEL: stack_fold_sqrtps:3074; CHECK: # %bb.0:3075; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3076; CHECK-NEXT: #APP3077; CHECK-NEXT: nop3078; CHECK-NEXT: #NO_APP3079; CHECK-NEXT: vsqrtps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3080; CHECK-NEXT: retq3081 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3082 %2 = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a0)3083 ret <4 x float> %23084}3085declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)3086 3087define <8 x float> @stack_fold_sqrtps_ymm(<8 x float> %a0) {3088; CHECK-LABEL: stack_fold_sqrtps_ymm:3089; CHECK: # %bb.0:3090; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3091; CHECK-NEXT: #APP3092; CHECK-NEXT: nop3093; CHECK-NEXT: #NO_APP3094; CHECK-NEXT: vsqrtps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload3095; CHECK-NEXT: retq3096 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3097 %2 = call <8 x float> @llvm.sqrt.v8f32(<8 x float> %a0)3098 ret <8 x float> %23099}3100declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)3101 3102define double @stack_fold_sqrtsd(double %a0) optsize {3103; CHECK-LABEL: stack_fold_sqrtsd:3104; CHECK: # %bb.0:3105; CHECK-NEXT: vmovsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill3106; CHECK-NEXT: #APP3107; CHECK-NEXT: nop3108; CHECK-NEXT: #NO_APP3109; CHECK-NEXT: vxorps %xmm15, %xmm15, %xmm153110; CHECK-NEXT: vsqrtsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 8-byte Folded Reload3111; CHECK-NEXT: retq3112 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3113 %2 = call double @llvm.sqrt.f64(double %a0)3114 ret double %23115}3116declare double @llvm.sqrt.f64(double) nounwind readnone3117 3118; TODO stack_fold_sqrtsd_int3119 3120define float @stack_fold_sqrtss(float %a0) optsize {3121; CHECK-LABEL: stack_fold_sqrtss:3122; CHECK: # %bb.0:3123; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill3124; CHECK-NEXT: #APP3125; CHECK-NEXT: nop3126; CHECK-NEXT: #NO_APP3127; CHECK-NEXT: vxorps %xmm15, %xmm15, %xmm153128; CHECK-NEXT: vsqrtss {{[-0-9]+}}(%r{{[sb]}}p), %xmm15, %xmm0 # 4-byte Folded Reload3129; CHECK-NEXT: retq3130 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3131 %2 = call float @llvm.sqrt.f32(float %a0)3132 ret float %23133}3134declare float @llvm.sqrt.f32(float) nounwind readnone3135 3136; TODO stack_fold_sqrtss_int3137 3138define <2 x double> @stack_fold_subpd(<2 x double> %a0, <2 x double> %a1) {3139; CHECK-LABEL: stack_fold_subpd:3140; CHECK: # %bb.0:3141; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3142; CHECK-NEXT: #APP3143; CHECK-NEXT: nop3144; CHECK-NEXT: #NO_APP3145; CHECK-NEXT: vsubpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3146; CHECK-NEXT: retq3147 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3148 %2 = fsub <2 x double> %a0, %a13149 ret <2 x double> %23150}3151 3152define <4 x double> @stack_fold_subpd_ymm(<4 x double> %a0, <4 x double> %a1) {3153; CHECK-LABEL: stack_fold_subpd_ymm:3154; CHECK: # %bb.0:3155; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3156; CHECK-NEXT: #APP3157; CHECK-NEXT: nop3158; CHECK-NEXT: #NO_APP3159; CHECK-NEXT: vsubpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3160; CHECK-NEXT: retq3161 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3162 %2 = fsub <4 x double> %a0, %a13163 ret <4 x double> %23164}3165 3166define <4 x float> @stack_fold_subps(<4 x float> %a0, <4 x float> %a1) {3167; CHECK-LABEL: stack_fold_subps:3168; CHECK: # %bb.0:3169; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3170; CHECK-NEXT: #APP3171; CHECK-NEXT: nop3172; CHECK-NEXT: #NO_APP3173; CHECK-NEXT: vsubps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3174; CHECK-NEXT: retq3175 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3176 %2 = fsub <4 x float> %a0, %a13177 ret <4 x float> %23178}3179 3180define <8 x float> @stack_fold_subps_ymm(<8 x float> %a0, <8 x float> %a1) {3181; CHECK-LABEL: stack_fold_subps_ymm:3182; CHECK: # %bb.0:3183; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3184; CHECK-NEXT: #APP3185; CHECK-NEXT: nop3186; CHECK-NEXT: #NO_APP3187; CHECK-NEXT: vsubps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3188; CHECK-NEXT: retq3189 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3190 %2 = fsub <8 x float> %a0, %a13191 ret <8 x float> %23192}3193 3194define double @stack_fold_subsd(double %a0, double %a1) {3195; CHECK-LABEL: stack_fold_subsd:3196; CHECK: # %bb.0:3197; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill3198; CHECK-NEXT: #APP3199; CHECK-NEXT: nop3200; CHECK-NEXT: #NO_APP3201; CHECK-NEXT: vsubsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload3202; CHECK-NEXT: retq3203 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3204 %2 = fsub double %a0, %a13205 ret double %23206}3207 3208define <2 x double> @stack_fold_subsd_int(<2 x double> %a0, <2 x double> %a1) {3209; CHECK-LABEL: stack_fold_subsd_int:3210; CHECK: # %bb.0:3211; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3212; CHECK-NEXT: #APP3213; CHECK-NEXT: nop3214; CHECK-NEXT: #NO_APP3215; CHECK-NEXT: vsubsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3216; CHECK-NEXT: retq3217 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3218 %2 = extractelement <2 x double> %a0, i32 03219 %3 = extractelement <2 x double> %a1, i32 03220 %4 = fsub double %2, %33221 %5 = insertelement <2 x double> %a0, double %4, i32 03222 ret <2 x double> %53223}3224 3225define float @stack_fold_subss(float %a0, float %a1) {3226; CHECK-LABEL: stack_fold_subss:3227; CHECK: # %bb.0:3228; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill3229; CHECK-NEXT: #APP3230; CHECK-NEXT: nop3231; CHECK-NEXT: #NO_APP3232; CHECK-NEXT: vsubss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload3233; CHECK-NEXT: retq3234 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3235 %2 = fsub float %a0, %a13236 ret float %23237}3238 3239define <4 x float> @stack_fold_subss_int(<4 x float> %a0, <4 x float> %a1) {3240; CHECK-LABEL: stack_fold_subss_int:3241; CHECK: # %bb.0:3242; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3243; CHECK-NEXT: #APP3244; CHECK-NEXT: nop3245; CHECK-NEXT: #NO_APP3246; CHECK-NEXT: vsubss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3247; CHECK-NEXT: retq3248 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3249 %2 = extractelement <4 x float> %a0, i32 03250 %3 = extractelement <4 x float> %a1, i32 03251 %4 = fsub float %2, %33252 %5 = insertelement <4 x float> %a0, float %4, i32 03253 ret <4 x float> %53254}3255 3256define i32 @stack_fold_testpd(<2 x double> %a0, <2 x double> %a1) {3257; CHECK-LABEL: stack_fold_testpd:3258; CHECK: # %bb.0:3259; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3260; CHECK-NEXT: #APP3261; CHECK-NEXT: nop3262; CHECK-NEXT: #NO_APP3263; CHECK-NEXT: xorl %eax, %eax3264; CHECK-NEXT: vtestpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3265; CHECK-NEXT: setb %al3266; CHECK-NEXT: retq3267 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3268 %2 = call i32 @llvm.x86.avx.vtestc.pd(<2 x double> %a0, <2 x double> %a1)3269 ret i32 %23270}3271declare i32 @llvm.x86.avx.vtestc.pd(<2 x double>, <2 x double>) nounwind readnone3272 3273define i32 @stack_fold_testpd_ymm(<4 x double> %a0, <4 x double> %a1) {3274; CHECK-LABEL: stack_fold_testpd_ymm:3275; CHECK: # %bb.0:3276; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3277; CHECK-NEXT: #APP3278; CHECK-NEXT: nop3279; CHECK-NEXT: #NO_APP3280; CHECK-NEXT: xorl %eax, %eax3281; CHECK-NEXT: vtestpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload3282; CHECK-NEXT: setb %al3283; CHECK-NEXT: vzeroupper3284; CHECK-NEXT: retq3285 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3286 %2 = call i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %a0, <4 x double> %a1)3287 ret i32 %23288}3289declare i32 @llvm.x86.avx.vtestc.pd.256(<4 x double>, <4 x double>) nounwind readnone3290 3291define i32 @stack_fold_testps(<4 x float> %a0, <4 x float> %a1) {3292; CHECK-LABEL: stack_fold_testps:3293; CHECK: # %bb.0:3294; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3295; CHECK-NEXT: #APP3296; CHECK-NEXT: nop3297; CHECK-NEXT: #NO_APP3298; CHECK-NEXT: xorl %eax, %eax3299; CHECK-NEXT: vtestps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3300; CHECK-NEXT: setb %al3301; CHECK-NEXT: retq3302 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3303 %2 = call i32 @llvm.x86.avx.vtestc.ps(<4 x float> %a0, <4 x float> %a1)3304 ret i32 %23305}3306declare i32 @llvm.x86.avx.vtestc.ps(<4 x float>, <4 x float>) nounwind readnone3307 3308define i32 @stack_fold_testps_ymm(<8 x float> %a0, <8 x float> %a1) {3309; CHECK-LABEL: stack_fold_testps_ymm:3310; CHECK: # %bb.0:3311; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3312; CHECK-NEXT: #APP3313; CHECK-NEXT: nop3314; CHECK-NEXT: #NO_APP3315; CHECK-NEXT: xorl %eax, %eax3316; CHECK-NEXT: vtestps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload3317; CHECK-NEXT: setb %al3318; CHECK-NEXT: vzeroupper3319; CHECK-NEXT: retq3320 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3321 %2 = call i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %a0, <8 x float> %a1)3322 ret i32 %23323}3324declare i32 @llvm.x86.avx.vtestc.ps.256(<8 x float>, <8 x float>) nounwind readnone3325 3326define i32 @stack_fold_ucomisd(double %a0, double %a1) {3327; CHECK-LABEL: stack_fold_ucomisd:3328; CHECK: # %bb.0:3329; CHECK-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill3330; CHECK-NEXT: #APP3331; CHECK-NEXT: nop3332; CHECK-NEXT: #NO_APP3333; CHECK-NEXT: xorl %eax, %eax3334; CHECK-NEXT: vucomisd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload3335; CHECK-NEXT: sete %al3336; CHECK-NEXT: leal -1(%rax,%rax), %eax3337; CHECK-NEXT: retq3338 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3339 %2 = fcmp ueq double %a0, %a13340 %3 = select i1 %2, i32 1, i32 -13341 ret i32 %33342}3343 3344define i32 @stack_fold_ucomisd_int(<2 x double> %a0, <2 x double> %a1) {3345; CHECK-LABEL: stack_fold_ucomisd_int:3346; CHECK: # %bb.0:3347; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3348; CHECK-NEXT: #APP3349; CHECK-NEXT: nop3350; CHECK-NEXT: #NO_APP3351; CHECK-NEXT: vucomisd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3352; CHECK-NEXT: setnp %al3353; CHECK-NEXT: sete %cl3354; CHECK-NEXT: andb %al, %cl3355; CHECK-NEXT: movzbl %cl, %eax3356; CHECK-NEXT: retq3357 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3358 %2 = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1)3359 ret i32 %23360}3361declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>) nounwind readnone3362 3363define i32 @stack_fold_ucomiss(float %a0, float %a1) {3364; CHECK-LABEL: stack_fold_ucomiss:3365; CHECK: # %bb.0:3366; CHECK-NEXT: vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill3367; CHECK-NEXT: #APP3368; CHECK-NEXT: nop3369; CHECK-NEXT: #NO_APP3370; CHECK-NEXT: xorl %eax, %eax3371; CHECK-NEXT: vucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload3372; CHECK-NEXT: sete %al3373; CHECK-NEXT: leal -1(%rax,%rax), %eax3374; CHECK-NEXT: retq3375 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3376 %2 = fcmp ueq float %a0, %a13377 %3 = select i1 %2, i32 1, i32 -13378 ret i32 %33379}3380 3381define i32 @stack_fold_ucomiss_int(<4 x float> %a0, <4 x float> %a1) {3382; CHECK-LABEL: stack_fold_ucomiss_int:3383; CHECK: # %bb.0:3384; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3385; CHECK-NEXT: #APP3386; CHECK-NEXT: nop3387; CHECK-NEXT: #NO_APP3388; CHECK-NEXT: vucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3389; CHECK-NEXT: setnp %al3390; CHECK-NEXT: sete %cl3391; CHECK-NEXT: andb %al, %cl3392; CHECK-NEXT: movzbl %cl, %eax3393; CHECK-NEXT: retq3394 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3395 %2 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)3396 ret i32 %23397}3398declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone3399 3400define <2 x double> @stack_fold_unpckhpd(<2 x double> %a0, <2 x double> %a1) {3401; CHECK-LABEL: stack_fold_unpckhpd:3402; CHECK: # %bb.0:3403; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3404; CHECK-NEXT: #APP3405; CHECK-NEXT: nop3406; CHECK-NEXT: #NO_APP3407; CHECK-NEXT: vunpckhpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3408; CHECK-NEXT: # xmm0 = xmm0[1],mem[1]3409; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13410; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm03411; CHECK-NEXT: retq3412 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3413 %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 3>3414 ; fadd forces execution domain3415 %3 = fadd <2 x double> %2, <double 0x0, double 0x0>3416 ret <2 x double> %33417}3418 3419define <4 x double> @stack_fold_unpckhpd_ymm(<4 x double> %a0, <4 x double> %a1) {3420; CHECK-LABEL: stack_fold_unpckhpd_ymm:3421; CHECK: # %bb.0:3422; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3423; CHECK-NEXT: #APP3424; CHECK-NEXT: nop3425; CHECK-NEXT: #NO_APP3426; CHECK-NEXT: vunpckhpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3427; CHECK-NEXT: # ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]3428; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13429; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm03430; CHECK-NEXT: retq3431 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3432 %2 = shufflevector <4 x double> %a0, <4 x double> %a1, <4 x i32> <i32 1, i32 5, i32 3, i32 7>3433 ; fadd forces execution domain3434 %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>3435 ret <4 x double> %33436}3437 3438define <4 x float> @stack_fold_unpckhps(<4 x float> %a0, <4 x float> %a1) {3439; CHECK-LABEL: stack_fold_unpckhps:3440; CHECK: # %bb.0:3441; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3442; CHECK-NEXT: #APP3443; CHECK-NEXT: nop3444; CHECK-NEXT: #NO_APP3445; CHECK-NEXT: vunpckhps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3446; CHECK-NEXT: # xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]3447; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm13448; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm03449; CHECK-NEXT: retq3450 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3451 %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>3452 ; fadd forces execution domain3453 %3 = fadd <4 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0>3454 ret <4 x float> %33455}3456 3457define <8 x float> @stack_fold_unpckhps_ymm(<8 x float> %a0, <8 x float> %a1) {3458; CHECK-LABEL: stack_fold_unpckhps_ymm:3459; CHECK: # %bb.0:3460; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3461; CHECK-NEXT: #APP3462; CHECK-NEXT: nop3463; CHECK-NEXT: #NO_APP3464; CHECK-NEXT: vunpckhps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3465; CHECK-NEXT: # ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]3466; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm13467; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm03468; CHECK-NEXT: retq3469 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3470 %2 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>3471 ; fadd forces execution domain3472 %3 = fadd <8 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>3473 ret <8 x float> %33474}3475 3476define <2 x double> @stack_fold_unpcklpd(<2 x double> %a0, <2 x double> %a1) {3477; CHECK-LABEL: stack_fold_unpcklpd:3478; CHECK: # %bb.0:3479; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3480; CHECK-NEXT: #APP3481; CHECK-NEXT: nop3482; CHECK-NEXT: #NO_APP3483; CHECK-NEXT: vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3484; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]3485; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13486; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm03487; CHECK-NEXT: retq3488 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3489 %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 0, i32 2>3490 ; fadd forces execution domain3491 %3 = fadd <2 x double> %2, <double 0x0, double 0x0>3492 ret <2 x double> %33493}3494 3495define <4 x double> @stack_fold_unpcklpd_ymm(<4 x double> %a0, <4 x double> %a1) {3496; CHECK-LABEL: stack_fold_unpcklpd_ymm:3497; CHECK: # %bb.0:3498; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3499; CHECK-NEXT: #APP3500; CHECK-NEXT: nop3501; CHECK-NEXT: #NO_APP3502; CHECK-NEXT: vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3503; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]3504; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13505; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm03506; CHECK-NEXT: retq3507 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3508 %2 = shufflevector <4 x double> %a0, <4 x double> %a1, <4 x i32> <i32 0, i32 4, i32 2, i32 6>3509 ; fadd forces execution domain3510 %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>3511 ret <4 x double> %33512}3513 3514define <4 x float> @stack_fold_unpcklps(<4 x float> %a0, <4 x float> %a1) {3515; CHECK-LABEL: stack_fold_unpcklps:3516; CHECK: # %bb.0:3517; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3518; CHECK-NEXT: #APP3519; CHECK-NEXT: nop3520; CHECK-NEXT: #NO_APP3521; CHECK-NEXT: vunpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3522; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3523; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm13524; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm03525; CHECK-NEXT: retq3526 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3527 %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>3528 ; fadd forces execution domain3529 %3 = fadd <4 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0>3530 ret <4 x float> %33531}3532 3533define <8 x float> @stack_fold_unpcklps_ymm(<8 x float> %a0, <8 x float> %a1) {3534; CHECK-LABEL: stack_fold_unpcklps_ymm:3535; CHECK: # %bb.0:3536; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3537; CHECK-NEXT: #APP3538; CHECK-NEXT: nop3539; CHECK-NEXT: #NO_APP3540; CHECK-NEXT: vunpcklps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3541; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]3542; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm13543; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm03544; CHECK-NEXT: retq3545 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3546 %2 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>3547 ; fadd forces execution domain3548 %3 = fadd <8 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>3549 ret <8 x float> %33550}3551 3552define <2 x double> @stack_fold_xorpd(<2 x double> %a0, <2 x double> %a1) {3553; CHECK-LABEL: stack_fold_xorpd:3554; CHECK: # %bb.0:3555; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3556; CHECK-NEXT: #APP3557; CHECK-NEXT: nop3558; CHECK-NEXT: #NO_APP3559; CHECK-NEXT: vxorpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3560; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13561; CHECK-NEXT: vaddpd %xmm1, %xmm0, %xmm03562; CHECK-NEXT: retq3563 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3564 %2 = bitcast <2 x double> %a0 to <2 x i64>3565 %3 = bitcast <2 x double> %a1 to <2 x i64>3566 %4 = xor <2 x i64> %2, %33567 %5 = bitcast <2 x i64> %4 to <2 x double>3568 ; fadd forces execution domain3569 %6 = fadd <2 x double> %5, <double 0x0, double 0x0>3570 ret <2 x double> %63571}3572 3573define <4 x double> @stack_fold_xorpd_ymm(<4 x double> %a0, <4 x double> %a1) {3574; CHECK-LABEL: stack_fold_xorpd_ymm:3575; CHECK: # %bb.0:3576; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3577; CHECK-NEXT: #APP3578; CHECK-NEXT: nop3579; CHECK-NEXT: #NO_APP3580; CHECK-NEXT: vxorpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3581; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm13582; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm03583; CHECK-NEXT: retq3584 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3585 %2 = bitcast <4 x double> %a0 to <4 x i64>3586 %3 = bitcast <4 x double> %a1 to <4 x i64>3587 %4 = xor <4 x i64> %2, %33588 %5 = bitcast <4 x i64> %4 to <4 x double>3589 ; fadd forces execution domain3590 %6 = fadd <4 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0>3591 ret <4 x double> %63592}3593 3594define <4 x float> @stack_fold_xorps(<4 x float> %a0, <4 x float> %a1) {3595; CHECK-LABEL: stack_fold_xorps:3596; CHECK: # %bb.0:3597; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3598; CHECK-NEXT: #APP3599; CHECK-NEXT: nop3600; CHECK-NEXT: #NO_APP3601; CHECK-NEXT: vxorps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3602; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm13603; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm03604; CHECK-NEXT: retq3605 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3606 %2 = bitcast <4 x float> %a0 to <2 x i64>3607 %3 = bitcast <4 x float> %a1 to <2 x i64>3608 %4 = xor <2 x i64> %2, %33609 %5 = bitcast <2 x i64> %4 to <4 x float>3610 ; fadd forces execution domain3611 %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>3612 ret <4 x float> %63613}3614 3615define <8 x float> @stack_fold_xorps_ymm(<8 x float> %a0, <8 x float> %a1) {3616; CHECK-LABEL: stack_fold_xorps_ymm:3617; CHECK: # %bb.0:3618; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3619; CHECK-NEXT: #APP3620; CHECK-NEXT: nop3621; CHECK-NEXT: #NO_APP3622; CHECK-NEXT: vxorps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3623; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm13624; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm03625; CHECK-NEXT: retq3626 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()3627 %2 = bitcast <8 x float> %a0 to <4 x i64>3628 %3 = bitcast <8 x float> %a1 to <4 x i64>3629 %4 = xor <4 x i64> %2, %33630 %5 = bitcast <4 x i64> %4 to <8 x float>3631 ; fadd forces execution domain3632 %6 = fadd <8 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>3633 ret <8 x float> %63634}3635