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