[llvm] r275431 - Don't optimize movs to pushes in -O0 builds.
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 18 10:48:05 PDT 2016
Would be handy to have more details in the commit message (as there were in
the code review) explaining the motivation for the change.
On Thu, Jul 14, 2016 at 8:47 AM Nico Weber via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: nico
> Date: Thu Jul 14 10:40:22 2016
> New Revision: 275431
>
> URL: http://llvm.org/viewvc/llvm-project?rev=275431&view=rev
> Log:
> Don't optimize movs to pushes in -O0 builds.
>
> https://reviews.llvm.org/D22362
>
> Modified:
> llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> llvm/trunk/test/CodeGen/X86/fast-isel-call.ll
> llvm/trunk/test/CodeGen/X86/win32_sret.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=275431&r1=275430&r2=275431&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Thu Jul 14 10:40:22 2016
> @@ -307,9 +307,9 @@ void X86PassConfig::addPreRegAlloc() {
> if (getOptLevel() != CodeGenOpt::None) {
> addPass(createX86FixupSetCC());
> addPass(createX86OptimizeLEAs());
> + addPass(createX86CallFrameOptimization());
> }
>
> - addPass(createX86CallFrameOptimization());
> addPass(createX86WinAllocaExpander());
> }
>
>
> Modified: llvm/trunk/test/CodeGen/X86/fast-isel-call.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fast-isel-call.ll?rev=275431&r1=275430&r2=275431&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/fast-isel-call.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/fast-isel-call.ll Thu Jul 14 10:40:22 2016
> @@ -23,12 +23,12 @@ define void @test2(%struct.s* %d) nounwi
> call void @foo2(%struct.s* byval %d )
> ret void
> ; CHECK-LABEL: test2:
> -; CHECK: movl (%eax), %[[reg1:e[a-d]x]]
> -; CHECK: movl 4(%eax), %[[reg2:e[a-d]x]]
> -; CHECK: movl 8(%eax), %[[reg3:e[a-d]x]]
> -; CHECK: pushl %[[reg3]]
> -; CHECK: pushl %[[reg2]]
> -; CHECK: pushl %[[reg1]]
> +; CHECK: movl (%eax), %ecx
> +; CHECK: movl %ecx, (%esp)
> +; CHECK: movl 4(%eax), %ecx
> +; CHECK: movl %ecx, 4(%esp)
> +; CHECK: movl 8(%eax), %eax
> +; CHECK: movl %eax, 8(%esp)
> }
>
> declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1)
> nounwind
>
> Modified: llvm/trunk/test/CodeGen/X86/win32_sret.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/win32_sret.ll?rev=275431&r1=275430&r2=275431&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/win32_sret.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/win32_sret.ll Thu Jul 14 10:40:22 2016
> @@ -139,7 +139,7 @@ entry:
> ; (through %ecx in the -O0 build).
> ; WIN32: leal {{[0-9]*}}(%esp), %e{{[a-d]}}x
> ; WIN32: leal {{[0-9]*}}(%esp), %ecx
> -; WIN32: pushl %e{{[a-d]}}x
> +; WIN32: {{pushl %e[a-d]x|movl %e[a-d]x, \(%esp\)}}
> ; WIN32-NEXT: calll "?foo at C5@@QAE?AUS5@@XZ"
> ; WIN32: retl
> ret void
> @@ -154,21 +154,21 @@ define void @test6_f(%struct.test6* %x)
> ; LINUX-LABEL: test6_f:
>
> ; The %x argument is moved to %ecx. It will be the this pointer.
> -; WIN32: movl 16(%esp), %ecx
> +; WIN32: movl {{16|20}}(%esp), %ecx
>
>
> ; The sret pointer is (%esp)
> -; WIN32: leal (%esp), %[[REG:e[a-d]x]]
> -; WIN32-NEXT: pushl %[[REG]]
> +; WIN32: leal {{4?}}(%esp), %eax
> +; WIN32-NEXT: {{pushl %eax|movl %eax, \(%esp\)}}
>
> ; The sret pointer is %ecx
> ; The %x argument is moved to (%esp). It will be the this pointer.
> -; MINGW_X86: leal (%esp), %ecx
> -; MINGW_X86-NEXT: pushl 16(%esp)
> +; MINGW_X86: leal {{4?}}(%esp), %ecx
> +; MINGW_X86-NEXT: {{pushl 16\(%esp\)|movl %eax, \(%esp\)}}
> ; MINGW_X86-NEXT: calll _test6_g
>
> -; CYGWIN: leal (%esp), %ecx
> -; CYGWIN-NEXT: pushl 16(%esp)
> +; CYGWIN: leal {{4?}}(%esp), %ecx
> +; CYGWIN-NEXT: {{pushl 16\(%esp\)|movl %eax, \(%esp\)}}
> ; CYGWIN-NEXT: calll _test6_g
>
> %tmp = alloca %struct.test6, align 4
> @@ -186,17 +186,17 @@ define void @test7_f(%struct.test7* %x)
> ; LINUX-LABEL: test7_f:
>
> ; The %x argument is moved to %ecx on all OSs. It will be the this
> pointer.
> -; WIN32: movl 16(%esp), %ecx
> -; MINGW_X86: movl 16(%esp), %ecx
> -; CYGWIN: movl 16(%esp), %ecx
> +; WIN32: movl {{16|20}}(%esp), %ecx
> +; MINGW_X86: movl {{16|20}}(%esp), %ecx
> +; CYGWIN: movl {{16|20}}(%esp), %ecx
>
> ; The sret pointer is (%esp)
> -; WIN32: leal (%esp), %[[REG:e[a-d]x]]
> -; WIN32-NEXT: pushl %[[REG]]
> -; MINGW_X86: leal (%esp), %[[REG:e[a-d]x]]
> -; MINGW_X86-NEXT: pushl %[[REG]]
> -; CYGWIN: leal (%esp), %[[REG:e[a-d]x]]
> -; CYGWIN-NEXT: pushl %[[REG]]
> +; WIN32: leal {{4?}}(%esp), %eax
> +; WIN32-NEXT: {{pushl %eax|movl %eax, \(%esp\)}}
> +; MINGW_X86: leal {{4?}}(%esp), %eax
> +; MINGW_X86-NEXT: {{pushl %eax|movl %eax, \(%esp\)}}
> +; CYGWIN: leal {{4?}}(%esp), %eax
> +; CYGWIN-NEXT: {{pushl %eax|movl %eax, \(%esp\)}}
>
> %tmp = alloca %struct.test7, align 4
> call x86_thiscallcc void @test7_g(%struct.test7* %x, %struct.test7*
> sret %tmp)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160718/43374aeb/attachment.html>
More information about the llvm-commits
mailing list