brintos

brintos / llvm-project-archived public Read only

0
0
Text · 108.0 KiB · 9bc9a9c Raw
2493 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=+sse4.2 < %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:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT:    #APP17; CHECK-NEXT:    nop18; CHECK-NEXT:    #NO_APP19; CHECK-NEXT:    addpd {{[-0-9]+}}(%r{{[sb]}}p), %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 float> @stack_fold_addps(<4 x float> %a0, <4 x float> %a1) {27; CHECK-LABEL: stack_fold_addps:28; CHECK:       # %bb.0:29; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill30; CHECK-NEXT:    #APP31; CHECK-NEXT:    nop32; CHECK-NEXT:    #NO_APP33; CHECK-NEXT:    addps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-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 float> %a0, %a137  ret <4 x float> %238}39 40define double @stack_fold_addsd(double %a0, double %a1) {41; CHECK-LABEL: stack_fold_addsd:42; CHECK:       # %bb.0:43; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill44; CHECK-NEXT:    #APP45; CHECK-NEXT:    nop46; CHECK-NEXT:    #NO_APP47; CHECK-NEXT:    addsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-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 double %a0, %a151  ret double %252}53 54define <2 x double> @stack_fold_addsd_int(<2 x double> %a0, <2 x double> %a1) {55; CHECK-LABEL: stack_fold_addsd_int:56; CHECK:       # %bb.0:57; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill58; CHECK-NEXT:    #APP59; CHECK-NEXT:    nop60; CHECK-NEXT:    #NO_APP61; CHECK-NEXT:    addsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-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 = extractelement <2 x double> %a0, i32 065  %3 = extractelement <2 x double> %a1, i32 066  %4 = fadd double %2, %367  %5 = insertelement <2 x double> %a0, double %4, i32 068  ret <2 x double> %569}70 71define float @stack_fold_addss(float %a0, float %a1) {72; CHECK-LABEL: stack_fold_addss:73; CHECK:       # %bb.0:74; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill75; CHECK-NEXT:    #APP76; CHECK-NEXT:    nop77; CHECK-NEXT:    #NO_APP78; CHECK-NEXT:    addss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload79; CHECK-NEXT:    retq80  %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}"()81  %2 = fadd float %a0, %a182  ret float %283}84 85define <4 x float> @stack_fold_addss_int(<4 x float> %a0, <4 x float> %a1) {86; CHECK-LABEL: stack_fold_addss_int:87; CHECK:       # %bb.0:88; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill89; CHECK-NEXT:    #APP90; CHECK-NEXT:    nop91; CHECK-NEXT:    #NO_APP92; CHECK-NEXT:    addss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload93; CHECK-NEXT:    retq94  %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}"()95  %2 = extractelement <4 x float> %a0, i32 096  %3 = extractelement <4 x float> %a1, i32 097  %4 = fadd float %2, %398  %5 = insertelement <4 x float> %a0, float %4, i32 099  ret <4 x float> %5100}101 102define <2 x double> @stack_fold_addsubpd(<2 x double> %a0, <2 x double> %a1) {103; CHECK-LABEL: stack_fold_addsubpd:104; CHECK:       # %bb.0:105; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill106; CHECK-NEXT:    #APP107; CHECK-NEXT:    nop108; CHECK-NEXT:    #NO_APP109; CHECK-NEXT:    addsubpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload110; CHECK-NEXT:    retq111  %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}"()112  %2 = call <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double> %a0, <2 x double> %a1)113  ret <2 x double> %2114}115declare <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double>, <2 x double>) nounwind readnone116 117define <4 x float> @stack_fold_addsubps(<4 x float> %a0, <4 x float> %a1) {118; CHECK-LABEL: stack_fold_addsubps:119; CHECK:       # %bb.0:120; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill121; CHECK-NEXT:    #APP122; CHECK-NEXT:    nop123; CHECK-NEXT:    #NO_APP124; CHECK-NEXT:    addsubps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload125; CHECK-NEXT:    retq126  %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}"()127  %2 = call <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float> %a0, <4 x float> %a1)128  ret <4 x float> %2129}130declare <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float>, <4 x float>) nounwind readnone131 132define <2 x double> @stack_fold_andnpd(<2 x double> %a0, <2 x double> %a1) {133; CHECK-LABEL: stack_fold_andnpd:134; CHECK:       # %bb.0:135; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill136; CHECK-NEXT:    #APP137; CHECK-NEXT:    nop138; CHECK-NEXT:    #NO_APP139; CHECK-NEXT:    andnpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload140; CHECK-NEXT:    xorpd %xmm1, %xmm1141; CHECK-NEXT:    addpd %xmm1, %xmm0142; CHECK-NEXT:    retq143  %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}"()144  %2 = bitcast <2 x double> %a0 to <2 x i64>145  %3 = bitcast <2 x double> %a1 to <2 x i64>146  %4 = xor <2 x i64> %2, <i64 -1, i64 -1>147  %5 = and <2 x i64> %4, %3148  %6 = bitcast <2 x i64> %5 to <2 x double>149  ; fadd forces execution domain150  %7 = fadd <2 x double> %6, <double 0x0, double 0x0>151  ret <2 x double> %7152}153 154define <4 x float> @stack_fold_andnps(<4 x float> %a0, <4 x float> %a1) {155; CHECK-LABEL: stack_fold_andnps:156; CHECK:       # %bb.0:157; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill158; CHECK-NEXT:    #APP159; CHECK-NEXT:    nop160; CHECK-NEXT:    #NO_APP161; CHECK-NEXT:    andnps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload162; CHECK-NEXT:    xorps %xmm1, %xmm1163; CHECK-NEXT:    addps %xmm1, %xmm0164; CHECK-NEXT:    retq165  %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}"()166  %2 = bitcast <4 x float> %a0 to <2 x i64>167  %3 = bitcast <4 x float> %a1 to <2 x i64>168  %4 = xor <2 x i64> %2, <i64 -1, i64 -1>169  %5 = and <2 x i64> %4, %3170  %6 = bitcast <2 x i64> %5 to <4 x float>171  ; fadd forces execution domain172  %7 = fadd <4 x float> %6, <float 0x0, float 0x0, float 0x0, float 0x0>173  ret <4 x float> %7174}175 176define <2 x double> @stack_fold_andpd(<2 x double> %a0, <2 x double> %a1) {177; CHECK-LABEL: stack_fold_andpd:178; CHECK:       # %bb.0:179; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill180; CHECK-NEXT:    #APP181; CHECK-NEXT:    nop182; CHECK-NEXT:    #NO_APP183; CHECK-NEXT:    andpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload184; CHECK-NEXT:    xorpd %xmm1, %xmm1185; CHECK-NEXT:    addpd %xmm1, %xmm0186; CHECK-NEXT:    retq187  %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}"()188  %2 = bitcast <2 x double> %a0 to <2 x i64>189  %3 = bitcast <2 x double> %a1 to <2 x i64>190  %4 = and <2 x i64> %2, %3191  %5 = bitcast <2 x i64> %4 to <2 x double>192  ; fadd forces execution domain193  %6 = fadd <2 x double> %5, <double 0x0, double 0x0>194  ret <2 x double> %6195}196 197define <4 x float> @stack_fold_andps(<4 x float> %a0, <4 x float> %a1) {198; CHECK-LABEL: stack_fold_andps:199; CHECK:       # %bb.0:200; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill201; CHECK-NEXT:    #APP202; CHECK-NEXT:    nop203; CHECK-NEXT:    #NO_APP204; CHECK-NEXT:    andps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload205; CHECK-NEXT:    xorps %xmm1, %xmm1206; CHECK-NEXT:    addps %xmm1, %xmm0207; CHECK-NEXT:    retq208  %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}"()209  %2 = bitcast <4 x float> %a0 to <2 x i64>210  %3 = bitcast <4 x float> %a1 to <2 x i64>211  %4 = and <2 x i64> %2, %3212  %5 = bitcast <2 x i64> %4 to <4 x float>213  ; fadd forces execution domain214  %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>215  ret <4 x float> %6216}217 218define <2 x double> @stack_fold_blendpd(<2 x double> %a0, <2 x double> %a1) {219; CHECK-LABEL: stack_fold_blendpd:220; CHECK:       # %bb.0:221; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill222; CHECK-NEXT:    #APP223; CHECK-NEXT:    nop224; CHECK-NEXT:    #NO_APP225; CHECK-NEXT:    blendpd $2, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload226; CHECK-NEXT:    # xmm0 = xmm0[0],mem[1]227; CHECK-NEXT:    xorpd %xmm1, %xmm1228; CHECK-NEXT:    addpd %xmm1, %xmm0229; CHECK-NEXT:    retq230  %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}"()231  %2 = select <2 x i1> <i1 1, i1 0>, <2 x double> %a0, <2 x double> %a1232  ; fadd forces execution domain233  %3 = fadd <2 x double> %2, <double 0x0, double 0x0>234  ret <2 x double> %3235}236 237define <4 x float> @stack_fold_blendps(<4 x float> %a0, <4 x float> %a1) {238; CHECK-LABEL: stack_fold_blendps:239; CHECK:       # %bb.0:240; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill241; CHECK-NEXT:    #APP242; CHECK-NEXT:    nop243; CHECK-NEXT:    #NO_APP244; CHECK-NEXT:    blendps $6, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload245; CHECK-NEXT:    # xmm0 = xmm0[0],mem[1,2],xmm0[3]246; CHECK-NEXT:    xorps %xmm1, %xmm1247; CHECK-NEXT:    addps %xmm1, %xmm0248; CHECK-NEXT:    retq249  %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}"()250  %2 = select <4 x i1> <i1 1, i1 0, i1 0, i1 1>, <4 x float> %a0, <4 x float> %a1251  ; fadd forces execution domain252  %3 = fadd <4 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0>253  ret <4 x float> %3254}255 256define <2 x double> @stack_fold_blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %c) {257; CHECK-LABEL: stack_fold_blendvpd:258; CHECK:       # %bb.0:259; CHECK-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill260; CHECK-NEXT:    movapd %xmm1, %xmm2261; CHECK-NEXT:    #APP262; CHECK-NEXT:    nop263; CHECK-NEXT:    #NO_APP264; CHECK-NEXT:    blendvpd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload265; CHECK-NEXT:    movapd %xmm2, %xmm0266; CHECK-NEXT:    retq267  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()268  %2 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a1, <2 x double> %c, <2 x double> %a0)269  ret <2 x double> %2270}271declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone272 273define <4 x float> @stack_fold_blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %c) {274; CHECK-LABEL: stack_fold_blendvps:275; CHECK:       # %bb.0:276; CHECK-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill277; CHECK-NEXT:    movaps %xmm1, %xmm2278; CHECK-NEXT:    #APP279; CHECK-NEXT:    nop280; CHECK-NEXT:    #NO_APP281; CHECK-NEXT:    blendvps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload282; CHECK-NEXT:    movaps %xmm2, %xmm0283; CHECK-NEXT:    retq284  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()285  %2 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a1, <4 x float> %c, <4 x float> %a0)286  ret <4 x float> %2287}288declare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone289 290define <2 x double> @stack_fold_cmppd(<2 x double> %a0, <2 x double> %a1) {291; CHECK-LABEL: stack_fold_cmppd:292; CHECK:       # %bb.0:293; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill294; CHECK-NEXT:    #APP295; CHECK-NEXT:    nop296; CHECK-NEXT:    #NO_APP297; CHECK-NEXT:    cmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload298; CHECK-NEXT:    retq299  %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}"()300  %2 = call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %a0, <2 x double> %a1, i8 0)301  ret <2 x double> %2302}303declare <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double>, <2 x double>, i8) nounwind readnone304 305define <4 x float> @stack_fold_cmpps(<4 x float> %a0, <4 x float> %a1) {306; CHECK-LABEL: stack_fold_cmpps:307; CHECK:       # %bb.0:308; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill309; CHECK-NEXT:    #APP310; CHECK-NEXT:    nop311; CHECK-NEXT:    #NO_APP312; CHECK-NEXT:    cmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload313; CHECK-NEXT:    retq314  %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}"()315  %2 = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %a0, <4 x float> %a1, i8 0)316  ret <4 x float> %2317}318declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone319 320define i32 @stack_fold_cmpsd(double %a0, double %a1) {321; CHECK-LABEL: stack_fold_cmpsd:322; CHECK:       # %bb.0:323; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill324; CHECK-NEXT:    #APP325; CHECK-NEXT:    nop326; CHECK-NEXT:    #NO_APP327; CHECK-NEXT:    cmpeqsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload328; CHECK-NEXT:    movq %xmm0, %rax329; CHECK-NEXT:    andl $1, %eax330; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax331; CHECK-NEXT:    retq332  %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}"()333  %2 = fcmp oeq double %a0, %a1334  %3 = zext i1 %2 to i32335  ret i32 %3336}337 338define <2 x double> @stack_fold_cmpsd_int(<2 x double> %a0, <2 x double> %a1) {339; CHECK-LABEL: stack_fold_cmpsd_int:340; CHECK:       # %bb.0:341; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill342; CHECK-NEXT:    #APP343; CHECK-NEXT:    nop344; CHECK-NEXT:    #NO_APP345; CHECK-NEXT:    cmpeqsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload346; CHECK-NEXT:    retq347  %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}"()348  %2 = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a0, <2 x double> %a1, i8 0)349  ret <2 x double> %2350}351declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8) nounwind readnone352 353define i32 @stack_fold_cmpss(float %a0, float %a1) {354; CHECK-LABEL: stack_fold_cmpss:355; CHECK:       # %bb.0:356; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill357; CHECK-NEXT:    #APP358; CHECK-NEXT:    nop359; CHECK-NEXT:    #NO_APP360; CHECK-NEXT:    cmpeqss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload361; CHECK-NEXT:    movd %xmm0, %eax362; CHECK-NEXT:    andl $1, %eax363; CHECK-NEXT:    retq364  %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}"()365  %2 = fcmp oeq float %a0, %a1366  %3 = zext i1 %2 to i32367  ret i32 %3368}369 370define <4 x float> @stack_fold_cmpss_int(<4 x float> %a0, <4 x float> %a1) {371; CHECK-LABEL: stack_fold_cmpss_int:372; CHECK:       # %bb.0:373; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill374; CHECK-NEXT:    #APP375; CHECK-NEXT:    nop376; CHECK-NEXT:    #NO_APP377; CHECK-NEXT:    cmpeqss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload378; CHECK-NEXT:    retq379  %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}"()380  %2 = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 0)381  ret <4 x float> %2382}383declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone384 385; TODO stack_fold_comisd386 387define i32 @stack_fold_comisd_int(<2 x double> %a0, <2 x double> %a1) {388; CHECK-LABEL: stack_fold_comisd_int:389; CHECK:       # %bb.0:390; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill391; CHECK-NEXT:    #APP392; CHECK-NEXT:    nop393; CHECK-NEXT:    #NO_APP394; CHECK-NEXT:    comisd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload395; CHECK-NEXT:    setnp %al396; CHECK-NEXT:    sete %cl397; CHECK-NEXT:    andb %al, %cl398; CHECK-NEXT:    movzbl %cl, %eax399; CHECK-NEXT:    retq400  %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}"()401  %2 = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1)402  ret i32 %2403}404declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) nounwind readnone405 406; TODO stack_fold_comiss407 408define i32 @stack_fold_comiss_int(<4 x float> %a0, <4 x float> %a1) {409; CHECK-LABEL: stack_fold_comiss_int:410; CHECK:       # %bb.0:411; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill412; CHECK-NEXT:    #APP413; CHECK-NEXT:    nop414; CHECK-NEXT:    #NO_APP415; CHECK-NEXT:    comiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload416; CHECK-NEXT:    setnp %al417; CHECK-NEXT:    sete %cl418; CHECK-NEXT:    andb %al, %cl419; CHECK-NEXT:    movzbl %cl, %eax420; 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 = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)423  ret i32 %2424}425declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone426 427define <2 x double> @stack_fold_cvtdq2pd(<4 x i32> %a0) {428; CHECK-LABEL: stack_fold_cvtdq2pd:429; CHECK:       # %bb.0:430; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill431; CHECK-NEXT:    #APP432; CHECK-NEXT:    nop433; CHECK-NEXT:    #NO_APP434; CHECK-NEXT:    cvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload435; CHECK-NEXT:    retq436  %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}"()437  %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>438  %3 = sitofp <2 x i32> %2 to <2 x double>439  ret <2 x double> %3440}441 442define <2 x double> @stack_fold_cvtdq2pd_int(<4 x i32> %a0) {443; CHECK-LABEL: stack_fold_cvtdq2pd_int:444; CHECK:       # %bb.0:445; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill446; CHECK-NEXT:    #APP447; CHECK-NEXT:    nop448; CHECK-NEXT:    #NO_APP449; CHECK-NEXT:    cvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload450; CHECK-NEXT:    retq451  %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}"()452  %2 = shufflevector <4 x i32> %a0, <4 x i32> %a0, <2 x i32> <i32 0, i32 1>453  %cvt = sitofp <2 x i32> %2 to <2 x double>454  ret <2 x double> %cvt455}456 457define <4 x float> @stack_fold_cvtdq2ps(<4 x i32> %a0) {458; CHECK-LABEL: stack_fold_cvtdq2ps:459; CHECK:       # %bb.0:460; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill461; CHECK-NEXT:    #APP462; CHECK-NEXT:    nop463; CHECK-NEXT:    #NO_APP464; CHECK-NEXT:    cvtdq2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload465; CHECK-NEXT:    retq466  %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}"()467  %2 = sitofp <4 x i32> %a0 to <4 x float>468  ret <4 x float> %2469}470 471define <4 x i32> @stack_fold_cvtpd2dq(<2 x double> %a0) {472; CHECK-LABEL: stack_fold_cvtpd2dq:473; CHECK:       # %bb.0:474; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill475; CHECK-NEXT:    #APP476; CHECK-NEXT:    nop477; CHECK-NEXT:    #NO_APP478; CHECK-NEXT:    cvtpd2dq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload479; CHECK-NEXT:    retq480  %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}"()481  %2 = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %a0)482  ret <4 x i32> %2483}484declare <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double>) nounwind readnone485 486define <2 x float> @stack_fold_cvtpd2ps(<2 x double> %a0) {487; CHECK-LABEL: stack_fold_cvtpd2ps:488; CHECK:       # %bb.0:489; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill490; CHECK-NEXT:    #APP491; CHECK-NEXT:    nop492; CHECK-NEXT:    #NO_APP493; CHECK-NEXT:    cvtpd2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload494; CHECK-NEXT:    retq495  %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}"()496  %2 = fptrunc <2 x double> %a0 to <2 x float>497  ret <2 x float> %2498}499 500define <4 x i32> @stack_fold_cvtps2dq(<4 x float> %a0) {501; CHECK-LABEL: stack_fold_cvtps2dq:502; CHECK:       # %bb.0:503; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill504; CHECK-NEXT:    #APP505; CHECK-NEXT:    nop506; CHECK-NEXT:    #NO_APP507; CHECK-NEXT:    cvtps2dq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload508; CHECK-NEXT:    retq509  %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}"()510  %2 = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %a0)511  ret <4 x i32> %2512}513declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>) nounwind readnone514 515define <2 x double> @stack_fold_cvtps2pd(<4 x float> %a0) {516; CHECK-LABEL: stack_fold_cvtps2pd:517; CHECK:       # %bb.0:518; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill519; CHECK-NEXT:    #APP520; CHECK-NEXT:    nop521; CHECK-NEXT:    #NO_APP522; CHECK-NEXT:    cvtps2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload523; CHECK-NEXT:    retq524  %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}"()525  %2 = shufflevector <4 x float> %a0, <4 x float> undef, <2 x i32> <i32 0, i32 1>526  %3 = fpext <2 x float> %2 to <2 x double>527  ret <2 x double> %3528}529 530define <2 x double> @stack_fold_cvtps2pd_int(<4 x float> %a0) {531; CHECK-LABEL: stack_fold_cvtps2pd_int:532; CHECK:       # %bb.0:533; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill534; CHECK-NEXT:    #APP535; CHECK-NEXT:    nop536; CHECK-NEXT:    #NO_APP537; CHECK-NEXT:    cvtps2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload538; CHECK-NEXT:    retq539  %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}"()540  %2 = shufflevector <4 x float> %a0, <4 x float> %a0, <2 x i32> <i32 0, i32 1>541  %cvtps2pd = fpext <2 x float> %2 to <2 x double>542  ret <2 x double> %cvtps2pd543}544 545; TODO stack_fold_cvtsd2si546 547define i32 @stack_fold_cvtsd2si_int(<2 x double> %a0) {548; CHECK-LABEL: stack_fold_cvtsd2si_int:549; CHECK:       # %bb.0:550; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill551; CHECK-NEXT:    #APP552; CHECK-NEXT:    nop553; CHECK-NEXT:    #NO_APP554; CHECK-NEXT:    cvtsd2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload555; CHECK-NEXT:    retq556  %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}"()557  %2 = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %a0)558  ret i32 %2559}560declare i32 @llvm.x86.sse2.cvtsd2si(<2 x double>) nounwind readnone561 562; TODO stack_fold_cvtsd2si64563 564define i64 @stack_fold_cvtsd2si64_int(<2 x double> %a0) {565; CHECK-LABEL: stack_fold_cvtsd2si64_int:566; CHECK:       # %bb.0:567; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill568; CHECK-NEXT:    #APP569; CHECK-NEXT:    nop570; CHECK-NEXT:    #NO_APP571; CHECK-NEXT:    cvtsd2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload572; CHECK-NEXT:    retq573  %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}"()574  %2 = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %a0)575  ret i64 %2576}577declare i64 @llvm.x86.sse2.cvtsd2si64(<2 x double>) nounwind readnone578 579define float @stack_fold_cvtsd2ss(double %a0) minsize {580; CHECK-LABEL: stack_fold_cvtsd2ss:581; CHECK:       # %bb.0:582; CHECK-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill583; CHECK-NEXT:    #APP584; CHECK-NEXT:    nop585; CHECK-NEXT:    #NO_APP586; CHECK-NEXT:    cvtsd2ss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload587; CHECK-NEXT:    retq588  %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}"()589  %2 = fptrunc double %a0 to float590  ret float %2591}592 593define <4 x float> @stack_fold_cvtsd2ss_int(<2 x double> %a0) optsize {594; CHECK-LABEL: stack_fold_cvtsd2ss_int:595; CHECK:       # %bb.0:596; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill597; CHECK-NEXT:    #APP598; CHECK-NEXT:    nop599; CHECK-NEXT:    #NO_APP600; CHECK-NEXT:    xorps %xmm1, %xmm1601; CHECK-NEXT:    cvtsd2ss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload602; CHECK-NEXT:    movaps %xmm1, %xmm0603; CHECK-NEXT:    retq604  %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}"()605  %2 = call <4 x float> @llvm.x86.sse2.cvtsd2ss(<4 x float> <float 0x0, float 0x0, float 0x0, float 0x0>, <2 x double> %a0)606  ret <4 x float> %2607}608declare <4 x float> @llvm.x86.sse2.cvtsd2ss(<4 x float>, <2 x double>) nounwind readnone609 610define double @stack_fold_cvtsi2sd(i32 %a0) {611; CHECK-LABEL: stack_fold_cvtsi2sd:612; CHECK:       # %bb.0:613; CHECK-NEXT:    pushq %rbp614; CHECK-NEXT:    .cfi_def_cfa_offset 16615; CHECK-NEXT:    pushq %r15616; CHECK-NEXT:    .cfi_def_cfa_offset 24617; CHECK-NEXT:    pushq %r14618; CHECK-NEXT:    .cfi_def_cfa_offset 32619; CHECK-NEXT:    pushq %r13620; CHECK-NEXT:    .cfi_def_cfa_offset 40621; CHECK-NEXT:    pushq %r12622; CHECK-NEXT:    .cfi_def_cfa_offset 48623; CHECK-NEXT:    pushq %rbx624; CHECK-NEXT:    .cfi_def_cfa_offset 56625; CHECK-NEXT:    .cfi_offset %rbx, -56626; CHECK-NEXT:    .cfi_offset %r12, -48627; CHECK-NEXT:    .cfi_offset %r13, -40628; CHECK-NEXT:    .cfi_offset %r14, -32629; CHECK-NEXT:    .cfi_offset %r15, -24630; CHECK-NEXT:    .cfi_offset %rbp, -16631; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill632; CHECK-NEXT:    #APP633; CHECK-NEXT:    nop634; CHECK-NEXT:    #NO_APP635; CHECK-NEXT:    xorps %xmm0, %xmm0636; CHECK-NEXT:    cvtsi2sdl {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload637; CHECK-NEXT:    popq %rbx638; CHECK-NEXT:    .cfi_def_cfa_offset 48639; CHECK-NEXT:    popq %r12640; CHECK-NEXT:    .cfi_def_cfa_offset 40641; CHECK-NEXT:    popq %r13642; CHECK-NEXT:    .cfi_def_cfa_offset 32643; CHECK-NEXT:    popq %r14644; CHECK-NEXT:    .cfi_def_cfa_offset 24645; CHECK-NEXT:    popq %r15646; CHECK-NEXT:    .cfi_def_cfa_offset 16647; CHECK-NEXT:    popq %rbp648; CHECK-NEXT:    .cfi_def_cfa_offset 8649; CHECK-NEXT:    retq650  %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}"()651  %2 = sitofp i32 %a0 to double652  ret double %2653}654 655define <2 x double> @stack_fold_cvtsi2sd_int(i32 %a0, <2 x double> %b0) {656; CHECK-LABEL: stack_fold_cvtsi2sd_int:657; CHECK:       # %bb.0:658; CHECK-NEXT:    pushq %rbp659; CHECK-NEXT:    .cfi_def_cfa_offset 16660; CHECK-NEXT:    pushq %r15661; CHECK-NEXT:    .cfi_def_cfa_offset 24662; CHECK-NEXT:    pushq %r14663; CHECK-NEXT:    .cfi_def_cfa_offset 32664; CHECK-NEXT:    pushq %r13665; CHECK-NEXT:    .cfi_def_cfa_offset 40666; CHECK-NEXT:    pushq %r12667; CHECK-NEXT:    .cfi_def_cfa_offset 48668; CHECK-NEXT:    pushq %rbx669; CHECK-NEXT:    .cfi_def_cfa_offset 56670; CHECK-NEXT:    .cfi_offset %rbx, -56671; CHECK-NEXT:    .cfi_offset %r12, -48672; CHECK-NEXT:    .cfi_offset %r13, -40673; CHECK-NEXT:    .cfi_offset %r14, -32674; CHECK-NEXT:    .cfi_offset %r15, -24675; CHECK-NEXT:    .cfi_offset %rbp, -16676; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill677; CHECK-NEXT:    #APP678; CHECK-NEXT:    nop679; CHECK-NEXT:    #NO_APP680; CHECK-NEXT:    cvtsi2sdl {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload681; CHECK-NEXT:    popq %rbx682; CHECK-NEXT:    .cfi_def_cfa_offset 48683; CHECK-NEXT:    popq %r12684; CHECK-NEXT:    .cfi_def_cfa_offset 40685; CHECK-NEXT:    popq %r13686; CHECK-NEXT:    .cfi_def_cfa_offset 32687; CHECK-NEXT:    popq %r14688; CHECK-NEXT:    .cfi_def_cfa_offset 24689; CHECK-NEXT:    popq %r15690; CHECK-NEXT:    .cfi_def_cfa_offset 16691; CHECK-NEXT:    popq %rbp692; CHECK-NEXT:    .cfi_def_cfa_offset 8693; CHECK-NEXT:    retq694  %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}"()695  %2 = sitofp i32 %a0 to double696  %3 = insertelement <2 x double> %b0, double %2, i64 0697  ret <2 x double> %3698}699 700define double @stack_fold_cvtsi642sd(i64 %a0) {701; CHECK-LABEL: stack_fold_cvtsi642sd:702; CHECK:       # %bb.0:703; CHECK-NEXT:    pushq %rbp704; CHECK-NEXT:    .cfi_def_cfa_offset 16705; CHECK-NEXT:    pushq %r15706; CHECK-NEXT:    .cfi_def_cfa_offset 24707; CHECK-NEXT:    pushq %r14708; CHECK-NEXT:    .cfi_def_cfa_offset 32709; CHECK-NEXT:    pushq %r13710; CHECK-NEXT:    .cfi_def_cfa_offset 40711; CHECK-NEXT:    pushq %r12712; CHECK-NEXT:    .cfi_def_cfa_offset 48713; CHECK-NEXT:    pushq %rbx714; CHECK-NEXT:    .cfi_def_cfa_offset 56715; CHECK-NEXT:    .cfi_offset %rbx, -56716; CHECK-NEXT:    .cfi_offset %r12, -48717; CHECK-NEXT:    .cfi_offset %r13, -40718; CHECK-NEXT:    .cfi_offset %r14, -32719; CHECK-NEXT:    .cfi_offset %r15, -24720; CHECK-NEXT:    .cfi_offset %rbp, -16721; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill722; CHECK-NEXT:    #APP723; CHECK-NEXT:    nop724; CHECK-NEXT:    #NO_APP725; CHECK-NEXT:    xorps %xmm0, %xmm0726; CHECK-NEXT:    cvtsi2sdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload727; CHECK-NEXT:    popq %rbx728; CHECK-NEXT:    .cfi_def_cfa_offset 48729; CHECK-NEXT:    popq %r12730; CHECK-NEXT:    .cfi_def_cfa_offset 40731; CHECK-NEXT:    popq %r13732; CHECK-NEXT:    .cfi_def_cfa_offset 32733; CHECK-NEXT:    popq %r14734; CHECK-NEXT:    .cfi_def_cfa_offset 24735; CHECK-NEXT:    popq %r15736; CHECK-NEXT:    .cfi_def_cfa_offset 16737; CHECK-NEXT:    popq %rbp738; CHECK-NEXT:    .cfi_def_cfa_offset 8739; CHECK-NEXT:    retq740  %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}"()741  %2 = sitofp i64 %a0 to double742  ret double %2743}744 745define <2 x double> @stack_fold_cvtsi642sd_int(i64 %a0, <2 x double> %b0) {746; CHECK-LABEL: stack_fold_cvtsi642sd_int:747; CHECK:       # %bb.0:748; CHECK-NEXT:    pushq %rbp749; CHECK-NEXT:    .cfi_def_cfa_offset 16750; CHECK-NEXT:    pushq %r15751; CHECK-NEXT:    .cfi_def_cfa_offset 24752; CHECK-NEXT:    pushq %r14753; CHECK-NEXT:    .cfi_def_cfa_offset 32754; CHECK-NEXT:    pushq %r13755; CHECK-NEXT:    .cfi_def_cfa_offset 40756; CHECK-NEXT:    pushq %r12757; CHECK-NEXT:    .cfi_def_cfa_offset 48758; CHECK-NEXT:    pushq %rbx759; CHECK-NEXT:    .cfi_def_cfa_offset 56760; CHECK-NEXT:    .cfi_offset %rbx, -56761; CHECK-NEXT:    .cfi_offset %r12, -48762; CHECK-NEXT:    .cfi_offset %r13, -40763; CHECK-NEXT:    .cfi_offset %r14, -32764; CHECK-NEXT:    .cfi_offset %r15, -24765; CHECK-NEXT:    .cfi_offset %rbp, -16766; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill767; CHECK-NEXT:    #APP768; CHECK-NEXT:    nop769; CHECK-NEXT:    #NO_APP770; CHECK-NEXT:    cvtsi2sdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload771; CHECK-NEXT:    popq %rbx772; CHECK-NEXT:    .cfi_def_cfa_offset 48773; CHECK-NEXT:    popq %r12774; CHECK-NEXT:    .cfi_def_cfa_offset 40775; CHECK-NEXT:    popq %r13776; CHECK-NEXT:    .cfi_def_cfa_offset 32777; CHECK-NEXT:    popq %r14778; CHECK-NEXT:    .cfi_def_cfa_offset 24779; CHECK-NEXT:    popq %r15780; CHECK-NEXT:    .cfi_def_cfa_offset 16781; CHECK-NEXT:    popq %rbp782; CHECK-NEXT:    .cfi_def_cfa_offset 8783; CHECK-NEXT:    retq784  %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}"()785  %2 = sitofp i64 %a0 to double786  %3 = insertelement <2 x double> %b0, double %2, i64 0787  ret <2 x double> %3788}789 790define float @stack_fold_cvtsi2ss(i32 %a0) {791; CHECK-LABEL: stack_fold_cvtsi2ss:792; CHECK:       # %bb.0:793; CHECK-NEXT:    pushq %rbp794; CHECK-NEXT:    .cfi_def_cfa_offset 16795; CHECK-NEXT:    pushq %r15796; CHECK-NEXT:    .cfi_def_cfa_offset 24797; CHECK-NEXT:    pushq %r14798; CHECK-NEXT:    .cfi_def_cfa_offset 32799; CHECK-NEXT:    pushq %r13800; CHECK-NEXT:    .cfi_def_cfa_offset 40801; CHECK-NEXT:    pushq %r12802; CHECK-NEXT:    .cfi_def_cfa_offset 48803; CHECK-NEXT:    pushq %rbx804; CHECK-NEXT:    .cfi_def_cfa_offset 56805; CHECK-NEXT:    .cfi_offset %rbx, -56806; CHECK-NEXT:    .cfi_offset %r12, -48807; CHECK-NEXT:    .cfi_offset %r13, -40808; CHECK-NEXT:    .cfi_offset %r14, -32809; CHECK-NEXT:    .cfi_offset %r15, -24810; CHECK-NEXT:    .cfi_offset %rbp, -16811; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill812; CHECK-NEXT:    #APP813; CHECK-NEXT:    nop814; CHECK-NEXT:    #NO_APP815; CHECK-NEXT:    xorps %xmm0, %xmm0816; CHECK-NEXT:    cvtsi2ssl {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload817; CHECK-NEXT:    popq %rbx818; CHECK-NEXT:    .cfi_def_cfa_offset 48819; CHECK-NEXT:    popq %r12820; CHECK-NEXT:    .cfi_def_cfa_offset 40821; CHECK-NEXT:    popq %r13822; CHECK-NEXT:    .cfi_def_cfa_offset 32823; CHECK-NEXT:    popq %r14824; CHECK-NEXT:    .cfi_def_cfa_offset 24825; CHECK-NEXT:    popq %r15826; CHECK-NEXT:    .cfi_def_cfa_offset 16827; CHECK-NEXT:    popq %rbp828; CHECK-NEXT:    .cfi_def_cfa_offset 8829; CHECK-NEXT:    retq830  %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}"()831  %2 = sitofp i32 %a0 to float832  ret float %2833}834 835define <4 x float> @stack_fold_cvtsi2ss_int(i32 %a0, <4 x float> %b0) {836; CHECK-LABEL: stack_fold_cvtsi2ss_int:837; CHECK:       # %bb.0:838; CHECK-NEXT:    pushq %rbp839; CHECK-NEXT:    .cfi_def_cfa_offset 16840; CHECK-NEXT:    pushq %r15841; CHECK-NEXT:    .cfi_def_cfa_offset 24842; CHECK-NEXT:    pushq %r14843; CHECK-NEXT:    .cfi_def_cfa_offset 32844; CHECK-NEXT:    pushq %r13845; CHECK-NEXT:    .cfi_def_cfa_offset 40846; CHECK-NEXT:    pushq %r12847; CHECK-NEXT:    .cfi_def_cfa_offset 48848; CHECK-NEXT:    pushq %rbx849; CHECK-NEXT:    .cfi_def_cfa_offset 56850; CHECK-NEXT:    .cfi_offset %rbx, -56851; CHECK-NEXT:    .cfi_offset %r12, -48852; CHECK-NEXT:    .cfi_offset %r13, -40853; CHECK-NEXT:    .cfi_offset %r14, -32854; CHECK-NEXT:    .cfi_offset %r15, -24855; CHECK-NEXT:    .cfi_offset %rbp, -16856; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill857; CHECK-NEXT:    #APP858; CHECK-NEXT:    nop859; CHECK-NEXT:    #NO_APP860; CHECK-NEXT:    cvtsi2ssl {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload861; CHECK-NEXT:    popq %rbx862; CHECK-NEXT:    .cfi_def_cfa_offset 48863; CHECK-NEXT:    popq %r12864; CHECK-NEXT:    .cfi_def_cfa_offset 40865; CHECK-NEXT:    popq %r13866; CHECK-NEXT:    .cfi_def_cfa_offset 32867; CHECK-NEXT:    popq %r14868; CHECK-NEXT:    .cfi_def_cfa_offset 24869; CHECK-NEXT:    popq %r15870; CHECK-NEXT:    .cfi_def_cfa_offset 16871; CHECK-NEXT:    popq %rbp872; CHECK-NEXT:    .cfi_def_cfa_offset 8873; CHECK-NEXT:    retq874  %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}"()875  %2 = sitofp i32 %a0 to float876  %3 = insertelement <4 x float> %b0, float %2, i64 0877  ret <4 x float> %3878}879 880define float @stack_fold_cvtsi642ss(i64 %a0) {881; CHECK-LABEL: stack_fold_cvtsi642ss:882; CHECK:       # %bb.0:883; CHECK-NEXT:    pushq %rbp884; CHECK-NEXT:    .cfi_def_cfa_offset 16885; CHECK-NEXT:    pushq %r15886; CHECK-NEXT:    .cfi_def_cfa_offset 24887; CHECK-NEXT:    pushq %r14888; CHECK-NEXT:    .cfi_def_cfa_offset 32889; CHECK-NEXT:    pushq %r13890; CHECK-NEXT:    .cfi_def_cfa_offset 40891; CHECK-NEXT:    pushq %r12892; CHECK-NEXT:    .cfi_def_cfa_offset 48893; CHECK-NEXT:    pushq %rbx894; CHECK-NEXT:    .cfi_def_cfa_offset 56895; CHECK-NEXT:    .cfi_offset %rbx, -56896; CHECK-NEXT:    .cfi_offset %r12, -48897; CHECK-NEXT:    .cfi_offset %r13, -40898; CHECK-NEXT:    .cfi_offset %r14, -32899; CHECK-NEXT:    .cfi_offset %r15, -24900; CHECK-NEXT:    .cfi_offset %rbp, -16901; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill902; CHECK-NEXT:    #APP903; CHECK-NEXT:    nop904; CHECK-NEXT:    #NO_APP905; CHECK-NEXT:    xorps %xmm0, %xmm0906; CHECK-NEXT:    cvtsi2ssq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload907; CHECK-NEXT:    popq %rbx908; CHECK-NEXT:    .cfi_def_cfa_offset 48909; CHECK-NEXT:    popq %r12910; CHECK-NEXT:    .cfi_def_cfa_offset 40911; CHECK-NEXT:    popq %r13912; CHECK-NEXT:    .cfi_def_cfa_offset 32913; CHECK-NEXT:    popq %r14914; CHECK-NEXT:    .cfi_def_cfa_offset 24915; CHECK-NEXT:    popq %r15916; CHECK-NEXT:    .cfi_def_cfa_offset 16917; CHECK-NEXT:    popq %rbp918; CHECK-NEXT:    .cfi_def_cfa_offset 8919; CHECK-NEXT:    retq920  %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}"()921  %2 = sitofp i64 %a0 to float922  ret float %2923}924 925define <4 x float> @stack_fold_cvtsi642ss_int(i64 %a0, <4 x float> %b0) {926; CHECK-LABEL: stack_fold_cvtsi642ss_int:927; CHECK:       # %bb.0:928; CHECK-NEXT:    pushq %rbp929; CHECK-NEXT:    .cfi_def_cfa_offset 16930; CHECK-NEXT:    pushq %r15931; CHECK-NEXT:    .cfi_def_cfa_offset 24932; CHECK-NEXT:    pushq %r14933; CHECK-NEXT:    .cfi_def_cfa_offset 32934; CHECK-NEXT:    pushq %r13935; CHECK-NEXT:    .cfi_def_cfa_offset 40936; CHECK-NEXT:    pushq %r12937; CHECK-NEXT:    .cfi_def_cfa_offset 48938; CHECK-NEXT:    pushq %rbx939; CHECK-NEXT:    .cfi_def_cfa_offset 56940; CHECK-NEXT:    .cfi_offset %rbx, -56941; CHECK-NEXT:    .cfi_offset %r12, -48942; CHECK-NEXT:    .cfi_offset %r13, -40943; CHECK-NEXT:    .cfi_offset %r14, -32944; CHECK-NEXT:    .cfi_offset %r15, -24945; CHECK-NEXT:    .cfi_offset %rbp, -16946; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill947; CHECK-NEXT:    #APP948; CHECK-NEXT:    nop949; CHECK-NEXT:    #NO_APP950; CHECK-NEXT:    cvtsi2ssq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload951; CHECK-NEXT:    popq %rbx952; CHECK-NEXT:    .cfi_def_cfa_offset 48953; CHECK-NEXT:    popq %r12954; CHECK-NEXT:    .cfi_def_cfa_offset 40955; CHECK-NEXT:    popq %r13956; CHECK-NEXT:    .cfi_def_cfa_offset 32957; CHECK-NEXT:    popq %r14958; CHECK-NEXT:    .cfi_def_cfa_offset 24959; CHECK-NEXT:    popq %r15960; CHECK-NEXT:    .cfi_def_cfa_offset 16961; CHECK-NEXT:    popq %rbp962; CHECK-NEXT:    .cfi_def_cfa_offset 8963; CHECK-NEXT:    retq964  %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}"()965  %2 = sitofp i64 %a0 to float966  %3 = insertelement <4 x float> %b0, float %2, i64 0967  ret <4 x float> %3968}969 970define double @stack_fold_cvtss2sd(float %a0) minsize {971; CHECK-LABEL: stack_fold_cvtss2sd:972; CHECK:       # %bb.0:973; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill974; CHECK-NEXT:    #APP975; CHECK-NEXT:    nop976; CHECK-NEXT:    #NO_APP977; CHECK-NEXT:    cvtss2sd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload978; CHECK-NEXT:    retq979  %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}"()980  %2 = fpext float %a0 to double981  ret double %2982}983 984define <2 x double> @stack_fold_cvtss2sd_int(<4 x float> %a0) optsize {985; CHECK-LABEL: stack_fold_cvtss2sd_int:986; CHECK:       # %bb.0:987; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill988; CHECK-NEXT:    #APP989; CHECK-NEXT:    nop990; CHECK-NEXT:    #NO_APP991; CHECK-NEXT:    xorps %xmm0, %xmm0992; CHECK-NEXT:    cvtss2sd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload993; CHECK-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero994; CHECK-NEXT:    retq995  %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}"()996  %2 = extractelement <4 x float> %a0, i64 0997  %3 = fpext float %2 to double998  %4 = insertelement <2 x double> zeroinitializer, double %3, i64 0999  ret <2 x double> %41000}1001 1002; TODO stack_fold_cvtss2si1003 1004define i32 @stack_fold_cvtss2si_int(<4 x float> %a0) {1005; CHECK-LABEL: stack_fold_cvtss2si_int:1006; CHECK:       # %bb.0:1007; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1008; CHECK-NEXT:    #APP1009; CHECK-NEXT:    nop1010; CHECK-NEXT:    #NO_APP1011; CHECK-NEXT:    cvtss2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload1012; CHECK-NEXT:    retq1013  %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}"()1014  %2 = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0)1015  ret i32 %21016}1017declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone1018 1019; TODO stack_fold_cvtss2si641020 1021define i64 @stack_fold_cvtss2si64_int(<4 x float> %a0) {1022; CHECK-LABEL: stack_fold_cvtss2si64_int:1023; CHECK:       # %bb.0:1024; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1025; CHECK-NEXT:    #APP1026; CHECK-NEXT:    nop1027; CHECK-NEXT:    #NO_APP1028; CHECK-NEXT:    cvtss2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload1029; CHECK-NEXT:    retq1030  %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}"()1031  %2 = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %a0)1032  ret i64 %21033}1034declare i64 @llvm.x86.sse.cvtss2si64(<4 x float>) nounwind readnone1035 1036define <4 x i32> @stack_fold_cvttpd2dq(<2 x double> %a0) {1037; CHECK-LABEL: stack_fold_cvttpd2dq:1038; CHECK:       # %bb.0:1039; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1040; CHECK-NEXT:    #APP1041; CHECK-NEXT:    nop1042; CHECK-NEXT:    #NO_APP1043; CHECK-NEXT:    cvttpd2dq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1044; CHECK-NEXT:    retq1045  %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}"()1046  %2 = call <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double> %a0)1047  ret <4 x i32> %21048}1049declare <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double>) nounwind readnone1050 1051define <4 x i32> @stack_fold_cvttps2dq(<4 x float> %a0) {1052; CHECK-LABEL: stack_fold_cvttps2dq:1053; CHECK:       # %bb.0:1054; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1055; CHECK-NEXT:    #APP1056; CHECK-NEXT:    nop1057; CHECK-NEXT:    #NO_APP1058; CHECK-NEXT:    cvttps2dq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1059; CHECK-NEXT:    retq1060  %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}"()1061  %2 = fptosi <4 x float> %a0 to <4 x i32>1062  ret <4 x i32> %21063}1064 1065define i32 @stack_fold_cvttsd2si(double %a0) {1066; CHECK-LABEL: stack_fold_cvttsd2si:1067; CHECK:       # %bb.0:1068; CHECK-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1069; CHECK-NEXT:    #APP1070; CHECK-NEXT:    nop1071; CHECK-NEXT:    #NO_APP1072; CHECK-NEXT:    cvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 8-byte Folded Reload1073; CHECK-NEXT:    retq1074  %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}"()1075  %2 = fptosi double %a0 to i321076  ret i32 %21077}1078 1079define i32 @stack_fold_cvttsd2si_int(<2 x double> %a0) {1080; CHECK-LABEL: stack_fold_cvttsd2si_int:1081; CHECK:       # %bb.0:1082; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1083; CHECK-NEXT:    #APP1084; CHECK-NEXT:    nop1085; CHECK-NEXT:    #NO_APP1086; CHECK-NEXT:    cvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload1087; CHECK-NEXT:    retq1088  %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}"()1089  %2 = call i32 @llvm.x86.sse2.cvttsd2si(<2 x double> %a0)1090  ret i32 %21091}1092declare i32 @llvm.x86.sse2.cvttsd2si(<2 x double>) nounwind readnone1093 1094define i64 @stack_fold_cvttsd2si64(double %a0) {1095; CHECK-LABEL: stack_fold_cvttsd2si64:1096; CHECK:       # %bb.0:1097; CHECK-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1098; CHECK-NEXT:    #APP1099; CHECK-NEXT:    nop1100; CHECK-NEXT:    #NO_APP1101; CHECK-NEXT:    cvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Folded Reload1102; CHECK-NEXT:    retq1103  %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}"()1104  %2 = fptosi double %a0 to i641105  ret i64 %21106}1107 1108define i64 @stack_fold_cvttsd2si64_int(<2 x double> %a0) {1109; CHECK-LABEL: stack_fold_cvttsd2si64_int:1110; CHECK:       # %bb.0:1111; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1112; CHECK-NEXT:    #APP1113; CHECK-NEXT:    nop1114; CHECK-NEXT:    #NO_APP1115; CHECK-NEXT:    cvttsd2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload1116; CHECK-NEXT:    retq1117  %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}"()1118  %2 = call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %a0)1119  ret i64 %21120}1121declare i64 @llvm.x86.sse2.cvttsd2si64(<2 x double>) nounwind readnone1122 1123define i32 @stack_fold_cvttss2si(float %a0) {1124; CHECK-LABEL: stack_fold_cvttss2si:1125; CHECK:       # %bb.0:1126; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1127; CHECK-NEXT:    #APP1128; CHECK-NEXT:    nop1129; CHECK-NEXT:    #NO_APP1130; CHECK-NEXT:    cvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload1131; CHECK-NEXT:    retq1132  %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}"()1133  %2 = fptosi float %a0 to i321134  ret i32 %21135}1136 1137define i32 @stack_fold_cvttss2si_int(<4 x float> %a0) {1138; CHECK-LABEL: stack_fold_cvttss2si_int:1139; CHECK:       # %bb.0:1140; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1141; CHECK-NEXT:    #APP1142; CHECK-NEXT:    nop1143; CHECK-NEXT:    #NO_APP1144; CHECK-NEXT:    cvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %eax # 16-byte Folded Reload1145; CHECK-NEXT:    retq1146  %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}"()1147  %2 = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0)1148  ret i32 %21149}1150declare i32 @llvm.x86.sse.cvttss2si(<4 x float>) nounwind readnone1151 1152define i64 @stack_fold_cvttss2si64(float %a0) {1153; CHECK-LABEL: stack_fold_cvttss2si64:1154; CHECK:       # %bb.0:1155; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1156; CHECK-NEXT:    #APP1157; CHECK-NEXT:    nop1158; CHECK-NEXT:    #NO_APP1159; CHECK-NEXT:    cvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 4-byte Folded Reload1160; CHECK-NEXT:    retq1161  %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}"()1162  %2 = fptosi float %a0 to i641163  ret i64 %21164}1165 1166define i64 @stack_fold_cvttss2si64_int(<4 x float> %a0) {1167; CHECK-LABEL: stack_fold_cvttss2si64_int:1168; CHECK:       # %bb.0:1169; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1170; CHECK-NEXT:    #APP1171; CHECK-NEXT:    nop1172; CHECK-NEXT:    #NO_APP1173; CHECK-NEXT:    cvttss2si {{[-0-9]+}}(%r{{[sb]}}p), %rax # 16-byte Folded Reload1174; CHECK-NEXT:    retq1175  %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}"()1176  %2 = call i64 @llvm.x86.sse.cvttss2si64(<4 x float> %a0)1177  ret i64 %21178}1179declare i64 @llvm.x86.sse.cvttss2si64(<4 x float>) nounwind readnone1180 1181define <2 x double> @stack_fold_divpd(<2 x double> %a0, <2 x double> %a1) {1182; CHECK-LABEL: stack_fold_divpd:1183; CHECK:       # %bb.0:1184; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1185; CHECK-NEXT:    #APP1186; CHECK-NEXT:    nop1187; CHECK-NEXT:    #NO_APP1188; CHECK-NEXT:    divpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1189; CHECK-NEXT:    retq1190  %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}"()1191  %2 = fdiv <2 x double> %a0, %a11192  ret <2 x double> %21193}1194 1195define <4 x float> @stack_fold_divps(<4 x float> %a0, <4 x float> %a1) {1196; CHECK-LABEL: stack_fold_divps:1197; CHECK:       # %bb.0:1198; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1199; CHECK-NEXT:    #APP1200; CHECK-NEXT:    nop1201; CHECK-NEXT:    #NO_APP1202; CHECK-NEXT:    divps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1203; CHECK-NEXT:    retq1204  %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}"()1205  %2 = fdiv <4 x float> %a0, %a11206  ret <4 x float> %21207}1208 1209define double @stack_fold_divsd(double %a0, double %a1) {1210; CHECK-LABEL: stack_fold_divsd:1211; CHECK:       # %bb.0:1212; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1213; CHECK-NEXT:    #APP1214; CHECK-NEXT:    nop1215; CHECK-NEXT:    #NO_APP1216; CHECK-NEXT:    divsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1217; CHECK-NEXT:    retq1218  %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}"()1219  %2 = fdiv double %a0, %a11220  ret double %21221}1222 1223define <2 x double> @stack_fold_divsd_int(<2 x double> %a0, <2 x double> %a1) {1224; CHECK-LABEL: stack_fold_divsd_int:1225; CHECK:       # %bb.0:1226; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1227; CHECK-NEXT:    #APP1228; CHECK-NEXT:    nop1229; CHECK-NEXT:    #NO_APP1230; CHECK-NEXT:    divsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1231; CHECK-NEXT:    retq1232  %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}"()1233  %2 = extractelement <2 x double> %a0, i32 01234  %3 = extractelement <2 x double> %a1, i32 01235  %4 = fdiv double %2, %31236  %5 = insertelement <2 x double> %a0, double %4, i32 01237  ret <2 x double> %51238}1239declare <2 x double> @llvm.x86.sse2.div.sd(<2 x double>, <2 x double>) nounwind readnone1240 1241define float @stack_fold_divss(float %a0, float %a1) {1242; CHECK-LABEL: stack_fold_divss:1243; CHECK:       # %bb.0:1244; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1245; CHECK-NEXT:    #APP1246; CHECK-NEXT:    nop1247; CHECK-NEXT:    #NO_APP1248; CHECK-NEXT:    divss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1249; CHECK-NEXT:    retq1250  %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}"()1251  %2 = fdiv float %a0, %a11252  ret float %21253}1254 1255define <4 x float> @stack_fold_divss_int(<4 x float> %a0, <4 x float> %a1) {1256; CHECK-LABEL: stack_fold_divss_int:1257; CHECK:       # %bb.0:1258; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1259; CHECK-NEXT:    #APP1260; CHECK-NEXT:    nop1261; CHECK-NEXT:    #NO_APP1262; CHECK-NEXT:    divss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1263; CHECK-NEXT:    retq1264  %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}"()1265  %2 = extractelement <4 x float> %a0, i32 01266  %3 = extractelement <4 x float> %a1, i32 01267  %4 = fdiv float %2, %31268  %5 = insertelement <4 x float> %a0, float %4, i32 01269  ret <4 x float> %51270}1271declare <4 x float> @llvm.x86.sse.div.ss(<4 x float>, <4 x float>) nounwind readnone1272 1273define <2 x double> @stack_fold_dppd(<2 x double> %a0, <2 x double> %a1) {1274; CHECK-LABEL: stack_fold_dppd:1275; CHECK:       # %bb.0:1276; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1277; CHECK-NEXT:    #APP1278; CHECK-NEXT:    nop1279; CHECK-NEXT:    #NO_APP1280; CHECK-NEXT:    dppd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1281; CHECK-NEXT:    retq1282  %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}"()1283  %2 = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i8 7)1284  ret <2 x double> %21285}1286declare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i8) nounwind readnone1287 1288define <4 x float> @stack_fold_dpps(<4 x float> %a0, <4 x float> %a1) {1289; CHECK-LABEL: stack_fold_dpps:1290; CHECK:       # %bb.0:1291; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1292; CHECK-NEXT:    #APP1293; CHECK-NEXT:    nop1294; CHECK-NEXT:    #NO_APP1295; CHECK-NEXT:    dpps $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1296; CHECK-NEXT:    retq1297  %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}"()1298  %2 = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i8 7)1299  ret <4 x float> %21300}1301declare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) nounwind readnone1302 1303define i32 @stack_fold_extractps(<4 x float> %a0, <4 x float> %a1) {1304; CHECK-LABEL: stack_fold_extractps:1305; CHECK:       # %bb.0:1306; CHECK-NEXT:    pushq %rbp1307; CHECK-NEXT:    .cfi_def_cfa_offset 161308; CHECK-NEXT:    pushq %r151309; CHECK-NEXT:    .cfi_def_cfa_offset 241310; CHECK-NEXT:    pushq %r141311; CHECK-NEXT:    .cfi_def_cfa_offset 321312; CHECK-NEXT:    pushq %r131313; CHECK-NEXT:    .cfi_def_cfa_offset 401314; CHECK-NEXT:    pushq %r121315; CHECK-NEXT:    .cfi_def_cfa_offset 481316; CHECK-NEXT:    pushq %rbx1317; CHECK-NEXT:    .cfi_def_cfa_offset 561318; CHECK-NEXT:    .cfi_offset %rbx, -561319; CHECK-NEXT:    .cfi_offset %r12, -481320; CHECK-NEXT:    .cfi_offset %r13, -401321; CHECK-NEXT:    .cfi_offset %r14, -321322; CHECK-NEXT:    .cfi_offset %r15, -241323; CHECK-NEXT:    .cfi_offset %rbp, -161324; CHECK-NEXT:    addps %xmm1, %xmm01325; CHECK-NEXT:    extractps $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1326; CHECK-NEXT:    #APP1327; CHECK-NEXT:    nop1328; CHECK-NEXT:    #NO_APP1329; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload1330; CHECK-NEXT:    popq %rbx1331; CHECK-NEXT:    .cfi_def_cfa_offset 481332; CHECK-NEXT:    popq %r121333; CHECK-NEXT:    .cfi_def_cfa_offset 401334; CHECK-NEXT:    popq %r131335; CHECK-NEXT:    .cfi_def_cfa_offset 321336; CHECK-NEXT:    popq %r141337; CHECK-NEXT:    .cfi_def_cfa_offset 241338; CHECK-NEXT:    popq %r151339; CHECK-NEXT:    .cfi_def_cfa_offset 161340; CHECK-NEXT:    popq %rbp1341; CHECK-NEXT:    .cfi_def_cfa_offset 81342; CHECK-NEXT:    retq1343  ; fadd forces execution domain1344  %1 = fadd <4 x float> %a0, %a11345  %2 = extractelement <4 x float> %1, i32 11346  %3 = bitcast float %2 to i321347  %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}"()1348  ret i32 %31349}1350 1351define <2 x double> @stack_fold_haddpd(<2 x double> %a0, <2 x double> %a1) {1352; CHECK-LABEL: stack_fold_haddpd:1353; CHECK:       # %bb.0:1354; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1355; CHECK-NEXT:    #APP1356; CHECK-NEXT:    nop1357; CHECK-NEXT:    #NO_APP1358; CHECK-NEXT:    haddpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1359; CHECK-NEXT:    retq1360  %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}"()1361  %2 = call <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double> %a0, <2 x double> %a1)1362  ret <2 x double> %21363}1364declare <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double>, <2 x double>) nounwind readnone1365 1366define <4 x float> @stack_fold_haddps(<4 x float> %a0, <4 x float> %a1) {1367; CHECK-LABEL: stack_fold_haddps:1368; CHECK:       # %bb.0:1369; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1370; CHECK-NEXT:    #APP1371; CHECK-NEXT:    nop1372; CHECK-NEXT:    #NO_APP1373; CHECK-NEXT:    haddps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1374; CHECK-NEXT:    retq1375  %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}"()1376  %2 = call <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float> %a0, <4 x float> %a1)1377  ret <4 x float> %21378}1379declare <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float>, <4 x float>) nounwind readnone1380 1381define <2 x double> @stack_fold_hsubpd(<2 x double> %a0, <2 x double> %a1) {1382; CHECK-LABEL: stack_fold_hsubpd:1383; CHECK:       # %bb.0:1384; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1385; CHECK-NEXT:    #APP1386; CHECK-NEXT:    nop1387; CHECK-NEXT:    #NO_APP1388; CHECK-NEXT:    hsubpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1389; CHECK-NEXT:    retq1390  %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}"()1391  %2 = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %a0, <2 x double> %a1)1392  ret <2 x double> %21393}1394declare <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double>, <2 x double>) nounwind readnone1395 1396define <4 x float> @stack_fold_hsubps(<4 x float> %a0, <4 x float> %a1) {1397; CHECK-LABEL: stack_fold_hsubps:1398; CHECK:       # %bb.0:1399; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1400; CHECK-NEXT:    #APP1401; CHECK-NEXT:    nop1402; CHECK-NEXT:    #NO_APP1403; CHECK-NEXT:    hsubps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1404; CHECK-NEXT:    retq1405  %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}"()1406  %2 = call <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float> %a0, <4 x float> %a1)1407  ret <4 x float> %21408}1409declare <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float>, <4 x float>) nounwind readnone1410 1411define <4 x float> @stack_fold_insertps(<4 x float> %a0, <4 x float> %a1) {1412; CHECK-LABEL: stack_fold_insertps:1413; CHECK:       # %bb.0:1414; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1415; CHECK-NEXT:    #APP1416; CHECK-NEXT:    nop1417; CHECK-NEXT:    #NO_APP1418; CHECK-NEXT:    insertps $17, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1419; CHECK-NEXT:    # xmm0 = zero,mem[0],xmm0[2,3]1420; CHECK-NEXT:    retq1421  %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}"()1422  %2 = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 209)1423  ret <4 x float> %21424}1425declare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone1426 1427define <2 x double> @stack_fold_maxpd(<2 x double> %a0, <2 x double> %a1) {1428; CHECK-LABEL: stack_fold_maxpd:1429; CHECK:       # %bb.0:1430; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1431; CHECK-NEXT:    #APP1432; CHECK-NEXT:    nop1433; CHECK-NEXT:    #NO_APP1434; CHECK-NEXT:    maxpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1435; CHECK-NEXT:    retq1436  %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}"()1437  %2 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)1438  ret <2 x double> %21439}1440declare <2 x double> @llvm.x86.sse2.max.pd(<2 x double>, <2 x double>) nounwind readnone1441 1442define <2 x double> @stack_fold_maxpd_commutable(<2 x double> %a0, <2 x double> %a1) {1443; CHECK-LABEL: stack_fold_maxpd_commutable:1444; CHECK:       # %bb.0:1445; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1446; CHECK-NEXT:    #APP1447; CHECK-NEXT:    nop1448; CHECK-NEXT:    #NO_APP1449; CHECK-NEXT:    maxpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1450; CHECK-NEXT:    retq1451  %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}"()1452  %2 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)1453  ret <2 x double> %21454}1455 1456define <4 x float> @stack_fold_maxps(<4 x float> %a0, <4 x float> %a1) {1457; CHECK-LABEL: stack_fold_maxps:1458; CHECK:       # %bb.0:1459; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1460; CHECK-NEXT:    #APP1461; CHECK-NEXT:    nop1462; CHECK-NEXT:    #NO_APP1463; CHECK-NEXT:    maxps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1464; CHECK-NEXT:    retq1465  %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}"()1466  %2 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)1467  ret <4 x float> %21468}1469declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone1470 1471define <4 x float> @stack_fold_maxps_commutable(<4 x float> %a0, <4 x float> %a1) {1472; CHECK-LABEL: stack_fold_maxps_commutable:1473; CHECK:       # %bb.0:1474; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1475; CHECK-NEXT:    #APP1476; CHECK-NEXT:    nop1477; CHECK-NEXT:    #NO_APP1478; CHECK-NEXT:    maxps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1479; CHECK-NEXT:    retq1480  %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}"()1481  %2 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)1482  ret <4 x float> %21483}1484 1485define double @stack_fold_maxsd(double %a0, double %a1) {1486; CHECK-LABEL: stack_fold_maxsd:1487; CHECK:       # %bb.0:1488; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1489; CHECK-NEXT:    #APP1490; CHECK-NEXT:    nop1491; CHECK-NEXT:    #NO_APP1492; CHECK-NEXT:    maxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1493; CHECK-NEXT:    retq1494  %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}"()1495  %2 = fcmp ogt double %a0, %a11496  %3 = select i1 %2, double %a0, double %a11497  ret double %31498}1499 1500define double @stack_fold_maxsd_commutable(double %a0, double %a1) {1501; CHECK-LABEL: stack_fold_maxsd_commutable:1502; CHECK:       # %bb.0:1503; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1504; CHECK-NEXT:    #APP1505; CHECK-NEXT:    nop1506; CHECK-NEXT:    #NO_APP1507; CHECK-NEXT:    maxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1508; CHECK-NEXT:    retq1509  %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}"()1510  %2 = fcmp ogt double %a0, %a11511  %3 = select i1 %2, double %a0, double %a11512  ret double %31513}1514 1515define <2 x double> @stack_fold_maxsd_int(<2 x double> %a0, <2 x double> %a1) {1516; CHECK-LABEL: stack_fold_maxsd_int:1517; CHECK:       # %bb.0:1518; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1519; CHECK-NEXT:    #APP1520; CHECK-NEXT:    nop1521; CHECK-NEXT:    #NO_APP1522; CHECK-NEXT:    maxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1523; CHECK-NEXT:    retq1524  %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}"()1525  %2 = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a0, <2 x double> %a1)1526  ret <2 x double> %21527}1528declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>) nounwind readnone1529 1530define float @stack_fold_maxss(float %a0, float %a1) {1531; CHECK-LABEL: stack_fold_maxss:1532; CHECK:       # %bb.0:1533; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1534; CHECK-NEXT:    #APP1535; CHECK-NEXT:    nop1536; CHECK-NEXT:    #NO_APP1537; CHECK-NEXT:    maxss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1538; CHECK-NEXT:    retq1539  %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}"()1540  %2 = fcmp ogt float %a0, %a11541  %3 = select i1 %2, float %a0, float %a11542  ret float %31543}1544 1545define float @stack_fold_maxss_commutable(float %a0, float %a1) {1546; CHECK-LABEL: stack_fold_maxss_commutable:1547; CHECK:       # %bb.0:1548; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1549; CHECK-NEXT:    #APP1550; CHECK-NEXT:    nop1551; CHECK-NEXT:    #NO_APP1552; CHECK-NEXT:    maxss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1553; CHECK-NEXT:    retq1554  %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}"()1555  %2 = fcmp ogt float %a0, %a11556  %3 = select i1 %2, float %a0, float %a11557  ret float %31558}1559 1560define <4 x float> @stack_fold_maxss_int(<4 x float> %a0, <4 x float> %a1) {1561; CHECK-LABEL: stack_fold_maxss_int:1562; CHECK:       # %bb.0:1563; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1564; CHECK-NEXT:    #APP1565; CHECK-NEXT:    nop1566; CHECK-NEXT:    #NO_APP1567; CHECK-NEXT:    maxss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1568; CHECK-NEXT:    retq1569  %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}"()1570  %2 = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1)1571  ret <4 x float> %21572}1573declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone1574 1575define <2 x double> @stack_fold_minpd(<2 x double> %a0, <2 x double> %a1) {1576; CHECK-LABEL: stack_fold_minpd:1577; CHECK:       # %bb.0:1578; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1579; CHECK-NEXT:    #APP1580; CHECK-NEXT:    nop1581; CHECK-NEXT:    #NO_APP1582; CHECK-NEXT:    minpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1583; CHECK-NEXT:    retq1584  %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}"()1585  %2 = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %a0, <2 x double> %a1)1586  ret <2 x double> %21587}1588declare <2 x double> @llvm.x86.sse2.min.pd(<2 x double>, <2 x double>) nounwind readnone1589 1590define <2 x double> @stack_fold_minpd_commutable(<2 x double> %a0, <2 x double> %a1) {1591; CHECK-LABEL: stack_fold_minpd_commutable:1592; CHECK:       # %bb.0:1593; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1594; CHECK-NEXT:    #APP1595; CHECK-NEXT:    nop1596; CHECK-NEXT:    #NO_APP1597; CHECK-NEXT:    minpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1598; CHECK-NEXT:    retq1599  %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}"()1600  %2 = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %a0, <2 x double> %a1)1601  ret <2 x double> %21602}1603 1604define <4 x float> @stack_fold_minps(<4 x float> %a0, <4 x float> %a1) {1605; CHECK-LABEL: stack_fold_minps:1606; CHECK:       # %bb.0:1607; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1608; CHECK-NEXT:    #APP1609; CHECK-NEXT:    nop1610; CHECK-NEXT:    #NO_APP1611; CHECK-NEXT:    minps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1612; CHECK-NEXT:    retq1613  %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}"()1614  %2 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)1615  ret <4 x float> %21616}1617declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone1618 1619define <4 x float> @stack_fold_minps_commutable(<4 x float> %a0, <4 x float> %a1) {1620; CHECK-LABEL: stack_fold_minps_commutable:1621; CHECK:       # %bb.0:1622; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1623; CHECK-NEXT:    #APP1624; CHECK-NEXT:    nop1625; CHECK-NEXT:    #NO_APP1626; CHECK-NEXT:    minps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1627; CHECK-NEXT:    retq1628  %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}"()1629  %2 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)1630  ret <4 x float> %21631}1632 1633define double @stack_fold_minsd(double %a0, double %a1) {1634; CHECK-LABEL: stack_fold_minsd:1635; CHECK:       # %bb.0:1636; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1637; CHECK-NEXT:    #APP1638; CHECK-NEXT:    nop1639; CHECK-NEXT:    #NO_APP1640; CHECK-NEXT:    minsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1641; CHECK-NEXT:    retq1642  %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}"()1643  %2 = fcmp olt double %a0, %a11644  %3 = select i1 %2, double %a0, double %a11645  ret double %31646}1647 1648define double @stack_fold_minsd_commutable(double %a0, double %a1) {1649; CHECK-LABEL: stack_fold_minsd_commutable:1650; CHECK:       # %bb.0:1651; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1652; CHECK-NEXT:    #APP1653; CHECK-NEXT:    nop1654; CHECK-NEXT:    #NO_APP1655; CHECK-NEXT:    minsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1656; CHECK-NEXT:    retq1657  %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}"()1658  %2 = fcmp olt double %a0, %a11659  %3 = select i1 %2, double %a0, double %a11660  ret double %31661}1662 1663define <2 x double> @stack_fold_minsd_int(<2 x double> %a0, <2 x double> %a1) {1664; CHECK-LABEL: stack_fold_minsd_int:1665; CHECK:       # %bb.0:1666; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1667; CHECK-NEXT:    #APP1668; CHECK-NEXT:    nop1669; CHECK-NEXT:    #NO_APP1670; CHECK-NEXT:    minsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1671; CHECK-NEXT:    retq1672  %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}"()1673  %2 = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a0, <2 x double> %a1)1674  ret <2 x double> %21675}1676declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>) nounwind readnone1677 1678define float @stack_fold_minss(float %a0, float %a1) {1679; CHECK-LABEL: stack_fold_minss:1680; CHECK:       # %bb.0:1681; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1682; CHECK-NEXT:    #APP1683; CHECK-NEXT:    nop1684; CHECK-NEXT:    #NO_APP1685; CHECK-NEXT:    minss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1686; CHECK-NEXT:    retq1687  %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}"()1688  %2 = fcmp olt float %a0, %a11689  %3 = select i1 %2, float %a0, float %a11690  ret float %31691}1692 1693define float @stack_fold_minss_commutable(float %a0, float %a1) {1694; CHECK-LABEL: stack_fold_minss_commutable:1695; CHECK:       # %bb.0:1696; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1697; CHECK-NEXT:    #APP1698; CHECK-NEXT:    nop1699; CHECK-NEXT:    #NO_APP1700; CHECK-NEXT:    minss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1701; CHECK-NEXT:    retq1702  %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}"()1703  %2 = fcmp olt float %a0, %a11704  %3 = select i1 %2, float %a0, float %a11705  ret float %31706}1707 1708define <4 x float> @stack_fold_minss_int(<4 x float> %a0, <4 x float> %a1) {1709; CHECK-LABEL: stack_fold_minss_int:1710; CHECK:       # %bb.0:1711; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1712; CHECK-NEXT:    #APP1713; CHECK-NEXT:    nop1714; CHECK-NEXT:    #NO_APP1715; CHECK-NEXT:    minss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1716; CHECK-NEXT:    retq1717  %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}"()1718  %2 = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1)1719  ret <4 x float> %21720}1721declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone1722 1723define <2 x double> @stack_fold_movddup(<2 x double> %a0) {1724; CHECK-LABEL: stack_fold_movddup:1725; CHECK:       # %bb.0:1726; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1727; CHECK-NEXT:    #APP1728; CHECK-NEXT:    nop1729; CHECK-NEXT:    #NO_APP1730; CHECK-NEXT:    movddup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1731; CHECK-NEXT:    # xmm0 = mem[0,0]1732; CHECK-NEXT:    retq1733  %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}"()1734  %2 = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> <i32 0, i32 0>1735  ret <2 x double> %21736}1737; TODO stack_fold_movhpd (load / store)1738; TODO stack_fold_movhps (load / store)1739 1740; TODO stack_fold_movlpd (load / store)1741; TODO stack_fold_movlps (load / store)1742 1743define <4 x float> @stack_fold_movshdup(<4 x float> %a0) {1744; CHECK-LABEL: stack_fold_movshdup:1745; CHECK:       # %bb.0:1746; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1747; CHECK-NEXT:    #APP1748; CHECK-NEXT:    nop1749; CHECK-NEXT:    #NO_APP1750; CHECK-NEXT:    movshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1751; CHECK-NEXT:    # xmm0 = mem[1,1,3,3]1752; CHECK-NEXT:    retq1753  %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}"()1754  %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>1755  ret <4 x float> %21756}1757 1758define <4 x float> @stack_fold_movsldup(<4 x float> %a0) {1759; CHECK-LABEL: stack_fold_movsldup:1760; CHECK:       # %bb.0:1761; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1762; CHECK-NEXT:    #APP1763; CHECK-NEXT:    nop1764; CHECK-NEXT:    #NO_APP1765; CHECK-NEXT:    movsldup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1766; CHECK-NEXT:    # xmm0 = mem[0,0,2,2]1767; CHECK-NEXT:    retq1768  %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}"()1769  %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>1770  ret <4 x float> %21771}1772 1773define <2 x double> @stack_fold_mulpd(<2 x double> %a0, <2 x double> %a1) {1774; CHECK-LABEL: stack_fold_mulpd:1775; CHECK:       # %bb.0:1776; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1777; CHECK-NEXT:    #APP1778; CHECK-NEXT:    nop1779; CHECK-NEXT:    #NO_APP1780; CHECK-NEXT:    mulpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1781; CHECK-NEXT:    retq1782  %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}"()1783  %2 = fmul <2 x double> %a0, %a11784  ret <2 x double> %21785}1786 1787define <4 x float> @stack_fold_mulps(<4 x float> %a0, <4 x float> %a1) {1788; CHECK-LABEL: stack_fold_mulps:1789; CHECK:       # %bb.0:1790; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1791; CHECK-NEXT:    #APP1792; CHECK-NEXT:    nop1793; CHECK-NEXT:    #NO_APP1794; CHECK-NEXT:    mulps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1795; CHECK-NEXT:    retq1796  %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}"()1797  %2 = fmul <4 x float> %a0, %a11798  ret <4 x float> %21799}1800 1801define double @stack_fold_mulsd(double %a0, double %a1) {1802; CHECK-LABEL: stack_fold_mulsd:1803; CHECK:       # %bb.0:1804; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1805; CHECK-NEXT:    #APP1806; CHECK-NEXT:    nop1807; CHECK-NEXT:    #NO_APP1808; CHECK-NEXT:    mulsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1809; CHECK-NEXT:    retq1810  %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}"()1811  %2 = fmul double %a0, %a11812  ret double %21813}1814 1815define <2 x double> @stack_fold_mulsd_int(<2 x double> %a0, <2 x double> %a1) {1816; CHECK-LABEL: stack_fold_mulsd_int:1817; CHECK:       # %bb.0:1818; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1819; CHECK-NEXT:    #APP1820; CHECK-NEXT:    nop1821; CHECK-NEXT:    #NO_APP1822; CHECK-NEXT:    mulsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1823; CHECK-NEXT:    retq1824  %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}"()1825  %2 = extractelement <2 x double> %a0, i32 01826  %3 = extractelement <2 x double> %a1, i32 01827  %4 = fmul double %2, %31828  %5 = insertelement <2 x double> %a0, double %4, i32 01829  ret <2 x double> %51830}1831 1832define float @stack_fold_mulss(float %a0, float %a1) {1833; CHECK-LABEL: stack_fold_mulss:1834; CHECK:       # %bb.0:1835; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1836; CHECK-NEXT:    #APP1837; CHECK-NEXT:    nop1838; CHECK-NEXT:    #NO_APP1839; CHECK-NEXT:    mulss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1840; CHECK-NEXT:    retq1841  %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}"()1842  %2 = fmul float %a0, %a11843  ret float %21844}1845 1846define <4 x float> @stack_fold_mulss_int(<4 x float> %a0, <4 x float> %a1) {1847; CHECK-LABEL: stack_fold_mulss_int:1848; CHECK:       # %bb.0:1849; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1850; CHECK-NEXT:    #APP1851; CHECK-NEXT:    nop1852; CHECK-NEXT:    #NO_APP1853; CHECK-NEXT:    mulss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1854; CHECK-NEXT:    retq1855  %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}"()1856  %2 = extractelement <4 x float> %a0, i32 01857  %3 = extractelement <4 x float> %a1, i32 01858  %4 = fmul float %2, %31859  %5 = insertelement <4 x float> %a0, float %4, i32 01860  ret <4 x float> %51861}1862 1863define <2 x double> @stack_fold_orpd(<2 x double> %a0, <2 x double> %a1) {1864; CHECK-LABEL: stack_fold_orpd:1865; CHECK:       # %bb.0:1866; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1867; CHECK-NEXT:    #APP1868; CHECK-NEXT:    nop1869; CHECK-NEXT:    #NO_APP1870; CHECK-NEXT:    orpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1871; CHECK-NEXT:    xorpd %xmm1, %xmm11872; CHECK-NEXT:    addpd %xmm1, %xmm01873; CHECK-NEXT:    retq1874  %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}"()1875  %2 = bitcast <2 x double> %a0 to <2 x i64>1876  %3 = bitcast <2 x double> %a1 to <2 x i64>1877  %4 = or <2 x i64> %2, %31878  %5 = bitcast <2 x i64> %4 to <2 x double>1879  ; fadd forces execution domain1880  %6 = fadd <2 x double> %5, <double 0x0, double 0x0>1881  ret <2 x double> %61882}1883 1884define <4 x float> @stack_fold_orps(<4 x float> %a0, <4 x float> %a1) {1885; CHECK-LABEL: stack_fold_orps:1886; CHECK:       # %bb.0:1887; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1888; CHECK-NEXT:    #APP1889; CHECK-NEXT:    nop1890; CHECK-NEXT:    #NO_APP1891; CHECK-NEXT:    orps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1892; CHECK-NEXT:    xorps %xmm1, %xmm11893; CHECK-NEXT:    addps %xmm1, %xmm01894; CHECK-NEXT:    retq1895  %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}"()1896  %2 = bitcast <4 x float> %a0 to <2 x i64>1897  %3 = bitcast <4 x float> %a1 to <2 x i64>1898  %4 = or <2 x i64> %2, %31899  %5 = bitcast <2 x i64> %4 to <4 x float>1900  ; fadd forces execution domain1901  %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>1902  ret <4 x float> %61903}1904 1905; TODO stack_fold_rcpps1906 1907define <4 x float> @stack_fold_rcpps_int(<4 x float> %a0) {1908; CHECK-LABEL: stack_fold_rcpps_int:1909; CHECK:       # %bb.0:1910; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1911; CHECK-NEXT:    #APP1912; CHECK-NEXT:    nop1913; CHECK-NEXT:    #NO_APP1914; CHECK-NEXT:    rcpps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1915; CHECK-NEXT:    retq1916  %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}"()1917  %2 = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0)1918  ret <4 x float> %21919}1920declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone1921 1922; TODO stack_fold_rcpss1923 1924define <4 x float> @stack_fold_rcpss_int(<4 x float> %a0, <4 x float> %a1) optsize {1925; CHECK-LABEL: stack_fold_rcpss_int:1926; CHECK:       # %bb.0:1927; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1928; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1929; CHECK-NEXT:    #APP1930; CHECK-NEXT:    nop1931; CHECK-NEXT:    #NO_APP1932; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1933; CHECK-NEXT:    rcpss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1934; CHECK-NEXT:    retq1935  %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}"()1936  %2 = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %a1)1937  %3 = extractelement <4 x float> %2, i32 01938  %4 = insertelement <4 x float> %a0, float %3, i32 01939  ret <4 x float> %41940}1941declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>)1942 1943define <2 x double> @stack_fold_roundpd(<2 x double> %a0) {1944; CHECK-LABEL: stack_fold_roundpd:1945; CHECK:       # %bb.0:1946; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1947; CHECK-NEXT:    #APP1948; CHECK-NEXT:    nop1949; CHECK-NEXT:    #NO_APP1950; CHECK-NEXT:    roundpd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1951; CHECK-NEXT:    retq1952  %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}"()1953  %2 = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 7)1954  ret <2 x double> %21955}1956declare <2 x double> @llvm.x86.sse41.round.pd(<2 x double>, i32) nounwind readnone1957 1958define <4 x float> @stack_fold_roundps(<4 x float> %a0) {1959; CHECK-LABEL: stack_fold_roundps:1960; CHECK:       # %bb.0:1961; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1962; CHECK-NEXT:    #APP1963; CHECK-NEXT:    nop1964; CHECK-NEXT:    #NO_APP1965; CHECK-NEXT:    roundps $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1966; CHECK-NEXT:    retq1967  %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}"()1968  %2 = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 7)1969  ret <4 x float> %21970}1971declare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone1972 1973define double @stack_fold_roundsd(double %a0) optsize {1974; CHECK-LABEL: stack_fold_roundsd:1975; CHECK:       # %bb.0:1976; CHECK-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1977; CHECK-NEXT:    #APP1978; CHECK-NEXT:    nop1979; CHECK-NEXT:    #NO_APP1980; CHECK-NEXT:    xorps %xmm0, %xmm01981; CHECK-NEXT:    roundsd $9, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1982; CHECK-NEXT:    retq1983  %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}"()1984  %2 = call double @llvm.floor.f64(double %a0)1985  ret double %21986}1987declare double @llvm.floor.f64(double) nounwind readnone1988 1989define <2 x double> @stack_fold_roundsd_int(<2 x double> %a0, <2 x double> %a1) optsize {1990; CHECK-LABEL: stack_fold_roundsd_int:1991; CHECK:       # %bb.0:1992; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1993; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1994; CHECK-NEXT:    #APP1995; CHECK-NEXT:    nop1996; CHECK-NEXT:    #NO_APP1997; CHECK-NEXT:    movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1998; CHECK-NEXT:    roundsd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1999; CHECK-NEXT:    retq2000  %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}"()2001  %2 = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 7)2002  ret <2 x double> %22003}2004declare <2 x double> @llvm.x86.sse41.round.sd(<2 x double>, <2 x double>, i32) nounwind readnone2005 2006define float @stack_fold_roundss(float %a0) minsize {2007; CHECK-LABEL: stack_fold_roundss:2008; CHECK:       # %bb.0:2009; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2010; CHECK-NEXT:    #APP2011; CHECK-NEXT:    nop2012; CHECK-NEXT:    #NO_APP2013; CHECK-NEXT:    roundss $9, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload2014; CHECK-NEXT:    retq2015  %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}"()2016  %2 = call float @llvm.floor.f32(float %a0)2017  ret float %22018}2019declare float @llvm.floor.f32(float) nounwind readnone2020 2021define <4 x float> @stack_fold_roundss_int(<4 x float> %a0, <4 x float> %a1) optsize {2022; CHECK-LABEL: stack_fold_roundss_int:2023; CHECK:       # %bb.0:2024; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2025; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2026; CHECK-NEXT:    #APP2027; CHECK-NEXT:    nop2028; CHECK-NEXT:    #NO_APP2029; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2030; CHECK-NEXT:    roundss $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2031; CHECK-NEXT:    retq2032  %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}"()2033  %2 = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 7)2034  ret <4 x float> %22035}2036declare <4 x float> @llvm.x86.sse41.round.ss(<4 x float>, <4 x float>, i32) nounwind readnone2037 2038; TODO stack_fold_rsqrtps2039 2040define <4 x float> @stack_fold_rsqrtps_int(<4 x float> %a0) {2041; CHECK-LABEL: stack_fold_rsqrtps_int:2042; CHECK:       # %bb.0:2043; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2044; CHECK-NEXT:    #APP2045; CHECK-NEXT:    nop2046; CHECK-NEXT:    #NO_APP2047; CHECK-NEXT:    rsqrtps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2048; CHECK-NEXT:    retq2049  %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}"()2050  %2 = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0)2051  ret <4 x float> %22052}2053declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone2054 2055; TODO stack_fold_rsqrtss2056 2057define <4 x float> @stack_fold_rsqrtss_int(<4 x float> %a0, <4 x float> %a1) optsize {2058; CHECK-LABEL: stack_fold_rsqrtss_int:2059; CHECK:       # %bb.0:2060; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2061; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2062; CHECK-NEXT:    #APP2063; CHECK-NEXT:    nop2064; CHECK-NEXT:    #NO_APP2065; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2066; CHECK-NEXT:    rsqrtss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2067; CHECK-NEXT:    retq2068  %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}"()2069  %2 = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %a1)2070  %3 = extractelement <4 x float> %2, i32 02071  %4 = insertelement <4 x float> %a0, float %3, i32 02072  ret <4 x float> %42073}2074declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>)2075 2076define <2 x double> @stack_fold_shufpd(<2 x double> %a0, <2 x double> %a1) {2077; CHECK-LABEL: stack_fold_shufpd:2078; CHECK:       # %bb.0:2079; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2080; CHECK-NEXT:    #APP2081; CHECK-NEXT:    nop2082; CHECK-NEXT:    #NO_APP2083; CHECK-NEXT:    shufpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2084; CHECK-NEXT:    # xmm0 = xmm0[1],mem[0]2085; CHECK-NEXT:    xorpd %xmm1, %xmm12086; CHECK-NEXT:    addpd %xmm1, %xmm02087; CHECK-NEXT:    retq2088  %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}"()2089  %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 2>2090  ; fadd forces execution domain2091  %3 = fadd <2 x double> %2, <double 0x0, double 0x0>2092  ret <2 x double> %32093}2094 2095define <4 x float> @stack_fold_shufps(<4 x float> %a0, <4 x float> %a1) {2096; CHECK-LABEL: stack_fold_shufps:2097; CHECK:       # %bb.0:2098; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2099; CHECK-NEXT:    #APP2100; CHECK-NEXT:    nop2101; CHECK-NEXT:    #NO_APP2102; CHECK-NEXT:    shufps $200, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2103; CHECK-NEXT:    # xmm0 = xmm0[0,2],mem[0,3]2104; CHECK-NEXT:    retq2105  %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}"()2106  %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 2, i32 4, i32 7>2107  ret <4 x float> %22108}2109 2110define <2 x double> @stack_fold_sqrtpd(<2 x double> %a0) {2111; CHECK-LABEL: stack_fold_sqrtpd:2112; CHECK:       # %bb.0:2113; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2114; CHECK-NEXT:    #APP2115; CHECK-NEXT:    nop2116; CHECK-NEXT:    #NO_APP2117; CHECK-NEXT:    sqrtpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2118; CHECK-NEXT:    retq2119  %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}"()2120  %2 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %a0)2121  ret <2 x double> %22122}2123 2124define <4 x float> @stack_fold_sqrtps(<4 x float> %a0) {2125; CHECK-LABEL: stack_fold_sqrtps:2126; CHECK:       # %bb.0:2127; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2128; CHECK-NEXT:    #APP2129; CHECK-NEXT:    nop2130; CHECK-NEXT:    #NO_APP2131; CHECK-NEXT:    sqrtps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2132; CHECK-NEXT:    retq2133  %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}"()2134  %2 = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a0)2135  ret <4 x float> %22136}2137 2138define double @stack_fold_sqrtsd(double %a0) optsize {2139; CHECK-LABEL: stack_fold_sqrtsd:2140; CHECK:       # %bb.0:2141; CHECK-NEXT:    movsd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2142; CHECK-NEXT:    #APP2143; CHECK-NEXT:    nop2144; CHECK-NEXT:    #NO_APP2145; CHECK-NEXT:    xorps %xmm0, %xmm02146; CHECK-NEXT:    sqrtsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload2147; CHECK-NEXT:    retq2148  %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}"()2149  %2 = call double @llvm.sqrt.f64(double %a0)2150  ret double %22151}2152declare double @llvm.sqrt.f64(double) nounwind readnone2153 2154define <2 x double> @stack_fold_sqrtsd_int(<2 x double> %a0, <2 x double> %a1) optsize {2155; CHECK-LABEL: stack_fold_sqrtsd_int:2156; CHECK:       # %bb.0:2157; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2158; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2159; CHECK-NEXT:    #APP2160; CHECK-NEXT:    nop2161; CHECK-NEXT:    #NO_APP2162; CHECK-NEXT:    movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2163; CHECK-NEXT:    sqrtsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2164; CHECK-NEXT:    retq2165  %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}"()2166  %2 = extractelement <2 x double> %a1, i64 02167  %3 = call double @llvm.sqrt.f64(double %2)2168  %4 = insertelement <2 x double> %a1, double %3, i64 02169  %5 = extractelement <2 x double> %4, i32 02170  %6 = insertelement <2 x double> %a0, double %5, i32 02171  ret <2 x double> %62172}2173 2174define float @stack_fold_sqrtss(float %a0) minsize {2175; CHECK-LABEL: stack_fold_sqrtss:2176; CHECK:       # %bb.0:2177; CHECK-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2178; CHECK-NEXT:    #APP2179; CHECK-NEXT:    nop2180; CHECK-NEXT:    #NO_APP2181; CHECK-NEXT:    sqrtss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload2182; CHECK-NEXT:    retq2183  %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}"()2184  %2 = call float @llvm.sqrt.f32(float %a0)2185  ret float %22186}2187declare float @llvm.sqrt.f32(float) nounwind readnone2188 2189define <4 x float> @stack_fold_sqrtss_int(<4 x float> %a0, <4 x float> %a1) optsize {2190; CHECK-LABEL: stack_fold_sqrtss_int:2191; CHECK:       # %bb.0:2192; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2193; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2194; CHECK-NEXT:    #APP2195; CHECK-NEXT:    nop2196; CHECK-NEXT:    #NO_APP2197; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2198; CHECK-NEXT:    sqrtss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2199; CHECK-NEXT:    retq2200  %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}"()2201  %2 = extractelement <4 x float> %a1, i64 02202  %3 = call float @llvm.sqrt.f32(float %2)2203  %4 = insertelement <4 x float> %a1, float %3, i64 02204  %5 = extractelement <4 x float> %4, i32 02205  %6 = insertelement <4 x float> %a0, float %5, i32 02206  ret <4 x float> %62207}2208 2209define <2 x double> @stack_fold_subpd(<2 x double> %a0, <2 x double> %a1) {2210; CHECK-LABEL: stack_fold_subpd:2211; CHECK:       # %bb.0:2212; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2213; CHECK-NEXT:    #APP2214; CHECK-NEXT:    nop2215; CHECK-NEXT:    #NO_APP2216; CHECK-NEXT:    subpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2217; CHECK-NEXT:    retq2218  %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}"()2219  %2 = fsub <2 x double> %a0, %a12220  ret <2 x double> %22221}2222 2223define <4 x float> @stack_fold_subps(<4 x float> %a0, <4 x float> %a1) {2224; CHECK-LABEL: stack_fold_subps:2225; CHECK:       # %bb.0:2226; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2227; CHECK-NEXT:    #APP2228; CHECK-NEXT:    nop2229; CHECK-NEXT:    #NO_APP2230; CHECK-NEXT:    subps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-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 = fsub <4 x float> %a0, %a12234  ret <4 x float> %22235}2236 2237define double @stack_fold_subsd(double %a0, double %a1) {2238; CHECK-LABEL: stack_fold_subsd:2239; CHECK:       # %bb.0:2240; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2241; CHECK-NEXT:    #APP2242; CHECK-NEXT:    nop2243; CHECK-NEXT:    #NO_APP2244; CHECK-NEXT:    subsd {{[-0-9]+}}(%r{{[sb]}}p), %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 = fsub double %a0, %a12248  ret double %22249}2250 2251define <2 x double> @stack_fold_subsd_int(<2 x double> %a0, <2 x double> %a1) {2252; CHECK-LABEL: stack_fold_subsd_int:2253; CHECK:       # %bb.0:2254; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2255; CHECK-NEXT:    #APP2256; CHECK-NEXT:    nop2257; CHECK-NEXT:    #NO_APP2258; CHECK-NEXT:    subsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2259; CHECK-NEXT:    retq2260  %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}"()2261  %2 = extractelement <2 x double> %a0, i32 02262  %3 = extractelement <2 x double> %a1, i32 02263  %4 = fsub double %2, %32264  %5 = insertelement <2 x double> %a0, double %4, i32 02265  ret <2 x double> %52266}2267 2268define float @stack_fold_subss(float %a0, float %a1) {2269; CHECK-LABEL: stack_fold_subss:2270; CHECK:       # %bb.0:2271; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2272; CHECK-NEXT:    #APP2273; CHECK-NEXT:    nop2274; CHECK-NEXT:    #NO_APP2275; CHECK-NEXT:    subss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload2276; CHECK-NEXT:    retq2277  %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}"()2278  %2 = fsub float %a0, %a12279  ret float %22280}2281 2282define <4 x float> @stack_fold_subss_int(<4 x float> %a0, <4 x float> %a1) {2283; CHECK-LABEL: stack_fold_subss_int:2284; CHECK:       # %bb.0:2285; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2286; CHECK-NEXT:    #APP2287; CHECK-NEXT:    nop2288; CHECK-NEXT:    #NO_APP2289; CHECK-NEXT:    subss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-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 = extractelement <4 x float> %a0, i32 02293  %3 = extractelement <4 x float> %a1, i32 02294  %4 = fsub float %2, %32295  %5 = insertelement <4 x float> %a0, float %4, i32 02296  ret <4 x float> %52297}2298 2299define i32 @stack_fold_ucomisd(double %a0, double %a1) {2300; CHECK-LABEL: stack_fold_ucomisd:2301; CHECK:       # %bb.0:2302; CHECK-NEXT:    movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill2303; CHECK-NEXT:    #APP2304; CHECK-NEXT:    nop2305; CHECK-NEXT:    #NO_APP2306; CHECK-NEXT:    xorl %eax, %eax2307; CHECK-NEXT:    ucomisd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload2308; CHECK-NEXT:    sete %al2309; CHECK-NEXT:    leal -1(%rax,%rax), %eax2310; CHECK-NEXT:    retq2311  %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}"()2312  %2 = fcmp ueq double %a0, %a12313  %3 = select i1 %2, i32 1, i32 -12314  ret i32 %32315}2316 2317define i32 @stack_fold_ucomisd_int(<2 x double> %a0, <2 x double> %a1) {2318; CHECK-LABEL: stack_fold_ucomisd_int:2319; CHECK:       # %bb.0:2320; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2321; CHECK-NEXT:    #APP2322; CHECK-NEXT:    nop2323; CHECK-NEXT:    #NO_APP2324; CHECK-NEXT:    ucomisd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2325; CHECK-NEXT:    setnp %al2326; CHECK-NEXT:    sete %cl2327; CHECK-NEXT:    andb %al, %cl2328; CHECK-NEXT:    movzbl %cl, %eax2329; CHECK-NEXT:    retq2330  %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}"()2331  %2 = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1)2332  ret i32 %22333}2334declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>) nounwind readnone2335 2336define i32 @stack_fold_ucomiss(float %a0, float %a1) {2337; CHECK-LABEL: stack_fold_ucomiss:2338; CHECK:       # %bb.0:2339; CHECK-NEXT:    movss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill2340; CHECK-NEXT:    #APP2341; CHECK-NEXT:    nop2342; CHECK-NEXT:    #NO_APP2343; CHECK-NEXT:    xorl %eax, %eax2344; CHECK-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload2345; CHECK-NEXT:    sete %al2346; CHECK-NEXT:    leal -1(%rax,%rax), %eax2347; CHECK-NEXT:    retq2348  %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}"()2349  %2 = fcmp ueq float %a0, %a12350  %3 = select i1 %2, i32 1, i32 -12351  ret i32 %32352}2353 2354define i32 @stack_fold_ucomiss_int(<4 x float> %a0, <4 x float> %a1) {2355; CHECK-LABEL: stack_fold_ucomiss_int:2356; CHECK:       # %bb.0:2357; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2358; CHECK-NEXT:    #APP2359; CHECK-NEXT:    nop2360; CHECK-NEXT:    #NO_APP2361; CHECK-NEXT:    ucomiss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2362; CHECK-NEXT:    setnp %al2363; CHECK-NEXT:    sete %cl2364; CHECK-NEXT:    andb %al, %cl2365; CHECK-NEXT:    movzbl %cl, %eax2366; CHECK-NEXT:    retq2367  %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}"()2368  %2 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)2369  ret i32 %22370}2371declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone2372 2373define <2 x double> @stack_fold_unpckhpd(<2 x double> %a0, <2 x double> %a1) {2374; CHECK-LABEL: stack_fold_unpckhpd:2375; CHECK:       # %bb.0:2376; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2377; CHECK-NEXT:    #APP2378; CHECK-NEXT:    nop2379; CHECK-NEXT:    #NO_APP2380; CHECK-NEXT:    unpckhpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2381; CHECK-NEXT:    # xmm0 = xmm0[1],mem[1]2382; CHECK-NEXT:    xorpd %xmm1, %xmm12383; CHECK-NEXT:    addpd %xmm1, %xmm02384; CHECK-NEXT:    retq2385  %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}"()2386  %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 3>2387  ; fadd forces execution domain2388  %3 = fadd <2 x double> %2, <double 0x0, double 0x0>2389  ret <2 x double> %32390}2391 2392define <4 x float> @stack_fold_unpckhps(<4 x float> %a0, <4 x float> %a1) {2393; CHECK-LABEL: stack_fold_unpckhps:2394; CHECK:       # %bb.0:2395; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2396; CHECK-NEXT:    #APP2397; CHECK-NEXT:    nop2398; CHECK-NEXT:    #NO_APP2399; CHECK-NEXT:    unpckhps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2400; CHECK-NEXT:    # xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]2401; CHECK-NEXT:    xorps %xmm1, %xmm12402; CHECK-NEXT:    addps %xmm1, %xmm02403; CHECK-NEXT:    retq2404  %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}"()2405  %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>2406  ; fadd forces execution domain2407  %3 = fadd <4 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0>2408  ret <4 x float> %32409}2410 2411define <2 x double> @stack_fold_unpcklpd(<2 x double> %a0, <2 x double> %a1) {2412; CHECK-LABEL: stack_fold_unpcklpd:2413; CHECK:       # %bb.0:2414; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2415; CHECK-NEXT:    #APP2416; CHECK-NEXT:    nop2417; CHECK-NEXT:    #NO_APP2418; CHECK-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2419; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0]2420; CHECK-NEXT:    xorpd %xmm1, %xmm12421; CHECK-NEXT:    addpd %xmm1, %xmm02422; CHECK-NEXT:    retq2423  %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}"()2424  %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 0, i32 2>2425  ; fadd forces execution domain2426  %3 = fadd <2 x double> %2, <double 0x0, double 0x0>2427  ret <2 x double> %32428}2429 2430define <4 x float> @stack_fold_unpcklps(<4 x float> %a0, <4 x float> %a1) {2431; CHECK-LABEL: stack_fold_unpcklps:2432; CHECK:       # %bb.0:2433; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2434; CHECK-NEXT:    #APP2435; CHECK-NEXT:    nop2436; CHECK-NEXT:    #NO_APP2437; CHECK-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2438; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2439; CHECK-NEXT:    xorps %xmm1, %xmm12440; CHECK-NEXT:    addps %xmm1, %xmm02441; CHECK-NEXT:    retq2442  %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}"()2443  %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>2444  ; fadd forces execution domain2445  %3 = fadd <4 x float> %2, <float 0x0, float 0x0, float 0x0, float 0x0>2446  ret <4 x float> %32447}2448 2449define <2 x double> @stack_fold_xorpd(<2 x double> %a0, <2 x double> %a1) {2450; CHECK-LABEL: stack_fold_xorpd:2451; CHECK:       # %bb.0:2452; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2453; CHECK-NEXT:    #APP2454; CHECK-NEXT:    nop2455; CHECK-NEXT:    #NO_APP2456; CHECK-NEXT:    xorpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2457; CHECK-NEXT:    xorpd %xmm1, %xmm12458; CHECK-NEXT:    addpd %xmm1, %xmm02459; 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 = bitcast <2 x double> %a0 to <2 x i64>2462  %3 = bitcast <2 x double> %a1 to <2 x i64>2463  %4 = xor <2 x i64> %2, %32464  %5 = bitcast <2 x i64> %4 to <2 x double>2465  ; fadd forces execution domain2466  %6 = fadd <2 x double> %5, <double 0x0, double 0x0>2467  ret <2 x double> %62468}2469 2470define <4 x float> @stack_fold_xorps(<4 x float> %a0, <4 x float> %a1) {2471; CHECK-LABEL: stack_fold_xorps:2472; CHECK:       # %bb.0:2473; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2474; CHECK-NEXT:    #APP2475; CHECK-NEXT:    nop2476; CHECK-NEXT:    #NO_APP2477; CHECK-NEXT:    xorps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2478; CHECK-NEXT:    xorps %xmm1, %xmm12479; CHECK-NEXT:    addps %xmm1, %xmm02480; CHECK-NEXT:    retq2481  %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}"()2482  %2 = bitcast <4 x float> %a0 to <2 x i64>2483  %3 = bitcast <4 x float> %a1 to <2 x i64>2484  %4 = xor <2 x i64> %2, %32485  %5 = bitcast <2 x i64> %4 to <4 x float>2486  ; fadd forces execution domain2487  %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>2488  ret <4 x float> %62489}2490 2491declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)2492declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)2493