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