<div dir="ltr">I mixed up bug numbers that should have been PR46315 instead of PR43014<div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Aug 8, 2020 at 11:33 AM Craig Topper 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Craig Topper<br>
Date: 2020-08-08T11:29:41-07:00<br>
New Revision: 44b260cb0aab387d85e4d59c16fc7b8866264f5e<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/44b260cb0aab387d85e4d59c16fc7b8866264f5e" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/44b260cb0aab387d85e4d59c16fc7b8866264f5e</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/44b260cb0aab387d85e4d59c16fc7b8866264f5e.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/44b260cb0aab387d85e4d59c16fc7b8866264f5e.diff</a><br>
<br>
LOG: [X86] Increase the number of instructions searched for isSafeToClobberEFLAGS in a couple places<br>
<br>
Previously this function searched 4 instructions forwards or<br>
backwards to determine if it was ok to clobber eflags.<br>
<br>
This is called in 3 places: rematerialization, turning 2 operand<br>
leas into adds or splitting 3 ops leas into an lea and add on some<br>
CPU targets.<br>
<br>
This patch increases the search limit to 10 instructions for<br>
rematerialization and 2 operand lea to add. I've left the old<br>
treshold for 3 ops lea spliting as that increases code size.<br>
<br>
Fixes PR47024 and PR43014<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    llvm/lib/Target/X86/X86FixupLEAs.cpp<br>
    llvm/lib/Target/X86/X86InstrInfo.cpp<br>
    llvm/lib/Target/X86/X86InstrInfo.h<br>
    llvm/test/CodeGen/X86/optimize-max-0.ll<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/llvm/lib/Target/X86/X86FixupLEAs.cpp b/llvm/lib/Target/X86/X86FixupLEAs.cpp<br>
index 424279038921..fcc3e8f781a3 100644<br>
--- a/llvm/lib/Target/X86/X86FixupLEAs.cpp<br>
+++ b/llvm/lib/Target/X86/X86FixupLEAs.cpp<br>
@@ -376,7 +376,7 @@ bool FixupLEAPass::optTwoAddrLEA(MachineBasicBlock::iterator &I,<br>
   const MachineOperand &Segment = MI.getOperand(1 + X86::AddrSegmentReg);<br>
<br>
   if (Segment.getReg() != 0 || !Disp.isImm() || Scale.getImm() > 1 ||<br>
-      !TII->isSafeToClobberEFLAGS(MBB, I))<br>
+      !TII->isSafeToClobberEFLAGS(MBB, I, 10))<br>
     return false;<br>
<br>
   Register DestReg = MI.getOperand(0).getReg();<br>
<br>
diff  --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp<br>
index c753880fc92c..b27959ad9bf5 100644<br>
--- a/llvm/lib/Target/X86/X86InstrInfo.cpp<br>
+++ b/llvm/lib/Target/X86/X86InstrInfo.cpp<br>
@@ -1127,7 +1127,7 @@ void X86InstrInfo::reMaterialize(MachineBasicBlock &MBB,<br>
                                  const MachineInstr &Orig,<br>
                                  const TargetRegisterInfo &TRI) const {<br>
   bool ClobbersEFLAGS = Orig.modifiesRegister(X86::EFLAGS, &TRI);<br>
-  if (ClobbersEFLAGS && !isSafeToClobberEFLAGS(MBB, I)) {<br>
+  if (ClobbersEFLAGS && !isSafeToClobberEFLAGS(MBB, I, 10)) {<br>
     // The instruction clobbers EFLAGS. Re-materialize as MOV32ri to avoid side<br>
     // effects.<br>
     int Value;<br>
<br>
diff  --git a/llvm/lib/Target/X86/X86InstrInfo.h b/llvm/lib/Target/X86/X86InstrInfo.h<br>
index c345a8217168..60b7d51bf9e4 100644<br>
--- a/llvm/lib/Target/X86/X86InstrInfo.h<br>
+++ b/llvm/lib/Target/X86/X86InstrInfo.h<br>
@@ -442,8 +442,9 @@ class X86InstrInfo final : public X86GenInstrInfo {<br>
   /// conservative. If it cannot definitely determine the safety after visiting<br>
   /// a few instructions in each direction it assumes it's not safe.<br>
   bool isSafeToClobberEFLAGS(MachineBasicBlock &MBB,<br>
-                             MachineBasicBlock::iterator I) const {<br>
-    return MBB.computeRegisterLiveness(&RI, X86::EFLAGS, I, 4) ==<br>
+                             MachineBasicBlock::iterator I,<br>
+                             unsigned Neighborhood = 4) const {<br>
+    return MBB.computeRegisterLiveness(&RI, X86::EFLAGS, I, Neighborhood) ==<br>
            MachineBasicBlock::LQR_Dead;<br>
   }<br>
<br>
<br>
diff  --git a/llvm/test/CodeGen/X86/optimize-max-0.ll b/llvm/test/CodeGen/X86/optimize-max-0.ll<br>
index e7f885625b76..5367f390d1cb 100644<br>
--- a/llvm/test/CodeGen/X86/optimize-max-0.ll<br>
+++ b/llvm/test/CodeGen/X86/optimize-max-0.ll<br>
@@ -85,7 +85,7 @@ define void @foo(i8* %r, i32 %s, i32 %w, i32 %x, i8* %j, i32 %d) nounwind {<br>
 ; CHECK-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax ## 4-byte Reload<br>
 ; CHECK-NEXT:    addl %ecx, %eax<br>
 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; CHECK-NEXT:    leal 2(%esi), %esi<br>
+; CHECK-NEXT:    addl $2, %esi<br>
 ; CHECK-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Spill<br>
 ; CHECK-NEXT:    movl (%esp), %esi ## 4-byte Reload<br>
 ; CHECK-NEXT:    addl %esi, %ecx<br>
@@ -513,7 +513,7 @@ define void @bar(i8* %r, i32 %s, i32 %w, i32 %x, i8* %j, i32 %d) nounwind {<br>
 ; CHECK-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx ## 4-byte Reload<br>
 ; CHECK-NEXT:    addl %eax, %ecx<br>
 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
-; CHECK-NEXT:    leal 2(%edx), %edx<br>
+; CHECK-NEXT:    addl $2, %edx<br>
 ; CHECK-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Spill<br>
 ; CHECK-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx ## 4-byte Reload<br>
 ; CHECK-NEXT:    addl %edx, %eax<br>
<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="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>