diff --git a/llvm/lib/Target/X86/X86CallingConv.td b/llvm/lib/Target/X86/X86CallingConv.td --- a/llvm/lib/Target/X86/X86CallingConv.td +++ b/llvm/lib/Target/X86/X86CallingConv.td @@ -1160,7 +1160,7 @@ def CSR_64_HHVM : CalleeSavedRegs<(add R12)>; // Register calling convention preserves few GPR and XMM8-15 -def CSR_32_RegCall_NoSSE : CalleeSavedRegs<(add ESI, EDI, EBX, EBP, ESP)>; +def CSR_32_RegCall_NoSSE : CalleeSavedRegs<(add ESI, EDI, EBX, EBP)>; def CSR_32_RegCall : CalleeSavedRegs<(add CSR_32_RegCall_NoSSE, (sequence "XMM%u", 4, 7))>; def CSR_Win32_CFGuard_Check_NoSSE : CalleeSavedRegs<(add CSR_32_RegCall_NoSSE, ECX)>; diff --git a/llvm/test/CodeGen/X86/avx512-regcall-Mask.ll b/llvm/test/CodeGen/X86/avx512-regcall-Mask.ll --- a/llvm/test/CodeGen/X86/avx512-regcall-Mask.ll +++ b/llvm/test/CodeGen/X86/avx512-regcall-Mask.ll @@ -283,8 +283,7 @@ define dso_local x86_regcallcc i32 @test_argv32i1(<32 x i1> %x0, <32 x i1> %x1, <32 x i1> %x2) { ; X32-LABEL: test_argv32i1: ; X32: # %bb.0: # %entry -; X32-NEXT: pushl %esp -; X32-NEXT: subl $72, %esp +; X32-NEXT: subl $76, %esp ; X32-NEXT: vmovups %xmm7, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovups %xmm6, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovups %xmm5, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill @@ -303,8 +302,7 @@ ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm5 # 16-byte Reload ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm6 # 16-byte Reload ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm7 # 16-byte Reload -; X32-NEXT: addl $72, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $76, %esp ; X32-NEXT: vzeroupper ; X32-NEXT: retl ; @@ -518,8 +516,7 @@ define dso_local x86_regcallcc i16 @test_argv16i1(<16 x i1> %x0, <16 x i1> %x1, <16 x i1> %x2) { ; X32-LABEL: test_argv16i1: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $72, %esp +; X32-NEXT: subl $76, %esp ; X32-NEXT: vmovups %xmm7, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovups %xmm6, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovups %xmm5, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill @@ -539,8 +536,7 @@ ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm5 # 16-byte Reload ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm6 # 16-byte Reload ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm7 # 16-byte Reload -; X32-NEXT: addl $72, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $76, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_argv16i1: @@ -752,8 +748,7 @@ define dso_local x86_regcallcc i8 @test_argv8i1(<8 x i1> %x0, <8 x i1> %x1, <8 x i1> %x2) { ; X32-LABEL: test_argv8i1: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $72, %esp +; X32-NEXT: subl $76, %esp ; X32-NEXT: vmovups %xmm7, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovups %xmm6, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovups %xmm5, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill @@ -773,8 +768,7 @@ ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm5 # 16-byte Reload ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm6 # 16-byte Reload ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm7 # 16-byte Reload -; X32-NEXT: addl $72, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $76, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_argv8i1: diff --git a/llvm/test/CodeGen/X86/avx512-regcall-NoMask.ll b/llvm/test/CodeGen/X86/avx512-regcall-NoMask.ll --- a/llvm/test/CodeGen/X86/avx512-regcall-NoMask.ll +++ b/llvm/test/CodeGen/X86/avx512-regcall-NoMask.ll @@ -30,12 +30,10 @@ define dso_local x86_regcallcc i1 @test_CallargReti1(i1 %a) { ; X32-LABEL: test_CallargReti1: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: incb %al ; X32-NEXT: movzbl %al, %eax ; X32-NEXT: calll _test_argReti1 ; X32-NEXT: incb %al -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargReti1: @@ -96,12 +94,10 @@ define dso_local x86_regcallcc i8 @test_CallargReti8(i8 %a) { ; X32-LABEL: test_CallargReti8: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: incb %al ; X32-NEXT: movzbl %al, %eax ; X32-NEXT: calll _test_argReti8 ; X32-NEXT: incb %al -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargReti8: @@ -162,13 +158,11 @@ define dso_local x86_regcallcc i16 @test_CallargReti16(i16 %a) { ; X32-LABEL: test_CallargReti16: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: incl %eax ; X32-NEXT: calll _test_argReti16 ; X32-NEXT: # kill: def $ax killed $ax def $eax ; X32-NEXT: incl %eax ; X32-NEXT: # kill: def $ax killed $ax killed $eax -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargReti16: @@ -228,11 +222,9 @@ define dso_local x86_regcallcc i32 @test_CallargReti32(i32 %a) { ; X32-LABEL: test_CallargReti32: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: incl %eax ; X32-NEXT: calll _test_argReti32 ; X32-NEXT: incl %eax -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargReti32: @@ -291,13 +283,11 @@ define dso_local x86_regcallcc i64 @test_CallargReti64(i64 %a) { ; X32-LABEL: test_CallargReti64: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: addl $1, %eax ; X32-NEXT: adcl $0, %ecx ; X32-NEXT: calll _test_argReti64 ; X32-NEXT: addl $1, %eax ; X32-NEXT: adcl $0, %ecx -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargReti64: @@ -353,16 +343,14 @@ define dso_local x86_regcallcc float @test_CallargRetFloat(float %a) { ; X32-LABEL: test_CallargRetFloat: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $24, %esp +; X32-NEXT: subl $28, %esp ; X32-NEXT: vmovups %xmm4, (%esp) # 16-byte Spill ; X32-NEXT: vmovss {{.*#+}} xmm4 = mem[0],zero,zero,zero ; X32-NEXT: vaddss %xmm4, %xmm0, %xmm0 ; X32-NEXT: calll _test_argRetFloat ; X32-NEXT: vaddss %xmm4, %xmm0, %xmm0 ; X32-NEXT: vmovups (%esp), %xmm4 # 16-byte Reload -; X32-NEXT: addl $24, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $28, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRetFloat: @@ -433,16 +421,14 @@ define dso_local x86_regcallcc double @test_CallargRetDouble(double %a) { ; X32-LABEL: test_CallargRetDouble: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $24, %esp +; X32-NEXT: subl $28, %esp ; X32-NEXT: vmovups %xmm4, (%esp) # 16-byte Spill ; X32-NEXT: vmovsd {{.*#+}} xmm4 = mem[0],zero ; X32-NEXT: vaddsd %xmm4, %xmm0, %xmm0 ; X32-NEXT: calll _test_argRetDouble ; X32-NEXT: vaddsd %xmm4, %xmm0, %xmm0 ; X32-NEXT: vmovups (%esp), %xmm4 # 16-byte Reload -; X32-NEXT: addl $24, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $28, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRetDouble: @@ -544,11 +530,9 @@ define x86_regcallcc x86_fp80 @test_CallargRetf80(x86_fp80 %a) { ; X32-LABEL: test_CallargRetf80: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: fadd %st, %st(0) ; X32-NEXT: calll _test_argRetf80 ; X32-NEXT: fadd %st, %st(0) -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRetf80: @@ -583,11 +567,9 @@ define dso_local x86_regcallcc double @test_CallargParamf80(x86_fp80 %a) { ; X32-LABEL: test_CallargParamf80: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: fadd %st, %st(0) ; X32-NEXT: calll _test_argParamf80 ; X32-NEXT: vaddsd %xmm0, %xmm0, %xmm0 -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargParamf80: @@ -645,11 +627,9 @@ define dso_local x86_regcallcc [4 x i32]* @test_CallargRetPointer([4 x i32]* %a) { ; X32-LABEL: test_CallargRetPointer: ; X32: # %bb.0: -; X32-NEXT: pushl %esp ; X32-NEXT: incl %eax ; X32-NEXT: calll _test_argRetPointer ; X32-NEXT: incl %eax -; X32-NEXT: popl %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRetPointer: @@ -715,8 +695,7 @@ define dso_local x86_regcallcc <4 x i32> @test_CallargRet128Vector(<4 x i1> %x, <4 x i32> %a) { ; X32-LABEL: test_CallargRet128Vector: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $40, %esp +; X32-NEXT: subl $44, %esp ; X32-NEXT: vmovups %xmm4, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill ; X32-NEXT: vmovdqa %xmm1, %xmm4 ; X32-NEXT: vpslld $31, %xmm0, %xmm1 @@ -728,8 +707,7 @@ ; X32-NEXT: kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload ; X32-NEXT: vmovdqa32 %xmm4, %xmm0 {%k1} ; X32-NEXT: vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm4 # 16-byte Reload -; X32-NEXT: addl $40, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $44, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRet128Vector: @@ -812,8 +790,7 @@ define dso_local x86_regcallcc <8 x i32> @test_CallargRet256Vector(<8 x i1> %x, <8 x i32> %a) { ; X32-LABEL: test_CallargRet256Vector: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $88, %esp +; X32-NEXT: subl $92, %esp ; X32-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%e{{[sb]}}p) # 32-byte Spill ; X32-NEXT: kmovd %eax, %k1 ; X32-NEXT: kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill @@ -822,8 +799,7 @@ ; X32-NEXT: kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload ; X32-NEXT: vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %ymm1 # 32-byte Reload ; X32-NEXT: vmovdqa32 %ymm1, %ymm0 {%k1} -; X32-NEXT: addl $88, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $92, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRet256Vector: @@ -898,8 +874,7 @@ define dso_local x86_regcallcc <16 x i32> @test_CallargRet512Vector(<16 x i1> %x, <16 x i32> %a) { ; X32-LABEL: test_CallargRet512Vector: ; X32: # %bb.0: -; X32-NEXT: pushl %esp -; X32-NEXT: subl $184, %esp +; X32-NEXT: subl $188, %esp ; X32-NEXT: vmovdqu64 %zmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 64-byte Spill ; X32-NEXT: kmovd %eax, %k1 ; X32-NEXT: kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill @@ -908,8 +883,7 @@ ; X32-NEXT: kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload ; X32-NEXT: vmovdqu64 {{[-0-9]+}}(%e{{[sb]}}p), %zmm1 # 64-byte Reload ; X32-NEXT: vmovdqa32 %zmm1, %zmm0 {%k1} -; X32-NEXT: addl $184, %esp -; X32-NEXT: popl %esp +; X32-NEXT: addl $188, %esp ; X32-NEXT: retl ; ; WIN64-LABEL: test_CallargRet512Vector: