<div dir="ltr">Can you please LGTM this if this looks fine?</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 11, 2017 at 10:46 AM, Craig Topper <span dir="ltr"><<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Nevermind. I guess the correct answer from this function doesn't care about that. So forget I said anything.</div><div class="gmail_extra"><span class="HOEnZb"><font color="#888888"><br clear="all"><div><div class="m_-7542037983513955375gmail_signature" data-smartmail="gmail_signature">~Craig</div></div></font></span><div><div class="h5">
<br><div class="gmail_quote">On Tue, Apr 11, 2017 at 10:43 AM, Easwaran Raman <span dir="ltr"><<a href="mailto:eraman@google.com" target="_blank">eraman@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Why should the chain operand be equal in areLoadsFromSameBasePtr? Or do you want an assert in the caller?<div><br></div><div>Thanks,</div><div>Easwaran</div><div><br></div></div><div class="m_-7542037983513955375HOEnZb"><div class="m_-7542037983513955375h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 10, 2017 at 6:07 PM, Craig Topper <span dir="ltr"><<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Can you leave an assert for the Chain being equal?</div><div class="m_-7542037983513955375m_-1300371137583149808HOEnZb"><div class="m_-7542037983513955375m_-1300371137583149808h5"><div><br><div class="gmail_quote"><div>On Mon, Apr 10, 2017 at 5:52 PM Easwaran Raman via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">eraman updated this revision to Diff 94762.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
eraman added a comment.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
Used getOperand(X86::AddrBaseReg) etc instead of getOperand(0). Also removed if the chain operands match. This check shouldn't be in areLoadsFromSameBasePtr and the caller already passes two loads that are uses of the same chain node.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<a href="https://reviews.llvm.org/D31833" rel="noreferrer" class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg" target="_blank">https://reviews.llvm.org/D3183<wbr>3</a><br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
Files:<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
  lib/Target/X86/X86InstrInfo.cp<wbr>p<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
  test/CodeGen/X86/load-slice.ll<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
Index: test/CodeGen/X86/load-slice.ll<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
--- test/CodeGen/X86/load-slice.ll<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+++ test/CodeGen/X86/load-slice.ll<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
@@ -19,10 +19,10 @@<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; STRESS-LABEL: t1:<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Load out[out_start + 8].real, this is base + 8 * 8 + 0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; STRESS: vmovss 64([[BASE:[^(]+]]), [[OUT_Real:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-; Add low slice: out[out_start].real, this is base + 0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-; STRESS-NEXT: vaddss ([[BASE]]), [[OUT_Real]], [[RES_Real:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Load out[out_start + 8].imm, this is base + 8 * 8 + 4.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; STRESS-NEXT: vmovss 68([[BASE]]), [[OUT_Imm:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+; Add low slice: out[out_start].real, this is base + 0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+; STRESS-NEXT: vaddss ([[BASE]]), [[OUT_Real]], [[RES_Real:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Add high slice: out[out_start].imm, this is base + 4.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; STRESS-NEXT: vaddss 4([[BASE]]), [[OUT_Imm]], [[RES_Imm:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Swap Imm and Real.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
@@ -34,10 +34,10 @@<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; REGULAR-LABEL: t1:<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Load out[out_start + 8].real, this is base + 8 * 8 + 0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; REGULAR: vmovss 64([[BASE:[^)]+]]), [[OUT_Real:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-; Add low slice: out[out_start].real, this is base + 0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-; REGULAR-NEXT: vaddss ([[BASE]]), [[OUT_Real]], [[RES_Real:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Load out[out_start + 8].imm, this is base + 8 * 8 + 4.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; REGULAR-NEXT: vmovss 68([[BASE]]), [[OUT_Imm:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+; Add low slice: out[out_start].real, this is base + 0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+; REGULAR-NEXT: vaddss ([[BASE]]), [[OUT_Real]], [[RES_Real:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Add high slice: out[out_start].imm, this is base + 4.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; REGULAR-NEXT: vaddss 4([[BASE]]), [[OUT_Imm]], [[RES_Imm:%xmm[0-9]+]]<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 ; Swap Imm and Real.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
Index: lib/Target/X86/X86InstrInfo.cp<wbr>p<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
--- lib/Target/X86/X86InstrInfo.cp<wbr>p<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+++ lib/Target/X86/X86InstrInfo.cp<wbr>p<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
@@ -8980,28 +8980,25 @@<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
     break;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
   }<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  // Check if chain operands and base addresses match.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  if (Load1->getOperand(0) != Load2->getOperand(0) ||<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-      Load1->getOperand(5) != Load2->getOperand(5))<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  // Lambda to check if both the loads have the same value for an operand index.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  auto HasSameOp = [&](int I) {<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+    return Load1->getOperand(I) == Load2->getOperand(I);<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  };<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  // All operands except the displacement should match.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  if (!HasSameOp(X86::AddrBaseReg) || !HasSameOp(X86::AddrScaleAmt) ||<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+      !HasSameOp(X86::AddrIndexReg) || !HasSameOp(X86::AddrSegmentReg<wbr>))<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
     return false;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  // Segment operands should match as well.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  if (Load1->getOperand(4) != Load2->getOperand(4))<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  // Now let's examine if the displacements are constants.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  auto Disp1 = dyn_cast<ConstantSDNode>(Load1<wbr>->getOperand(X86::AddrDisp));<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  auto Disp2 = dyn_cast<ConstantSDNode>(Load2<wbr>->getOperand(X86::AddrDisp));<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  if (!Disp1 || !Disp2)<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
     return false;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  // Scale should be 1, Index should be Reg0.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  if (Load1->getOperand(1) == Load2->getOperand(1) &&<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-      Load1->getOperand(2) == Load2->getOperand(2)) {<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-    if (cast<ConstantSDNode>(Load1->g<wbr>etOperand(1))->getZExtValue() != 1)<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-      return false;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-    // Now let's examine the displacements.<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-    if (isa<ConstantSDNode>(Load1->ge<wbr>tOperand(3)) &&<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-        isa<ConstantSDNode>(Load2->get<wbr>Operand(3))) {<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-      Offset1 = cast<ConstantSDNode>(Load1->ge<wbr>tOperand(3))->getSExtValue();<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-      Offset2 = cast<ConstantSDNode>(Load2->ge<wbr>tOperand(3))->getSExtValue();<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-      return true;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-    }<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  }<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
-  return false;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  Offset1 = Disp1->getSExtValue();<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  Offset2 = Disp2->getSExtValue();<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
+  return true;<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 }<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
 bool X86InstrInfo::shouldScheduleLo<wbr>adsNear(SDNode *Load1, SDNode *Load2,<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
<br class="m_-7542037983513955375m_-1300371137583149808m_-368049350463833662gmail_msg">
</blockquote></div></div></div></div><span class="m_-7542037983513955375m_-1300371137583149808HOEnZb"><font color="#888888"><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature">~Craig</div>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div>
</blockquote></div><br></div>