[PATCH] D118376: [x86] try harder to scalarize a vector load with extracted integer op uses
    Eli Friedman via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Feb  4 14:50:54 PST 2022
    
    
  
efriedma added inline comments.
================
Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:43115
+    SDValue Chain = Load.getValue(1);
+    SDValue From[] = {SDValue(N, 0), SDValue(LoadVec, 1)};
+    SDValue To[] = {Load, Chain};
----------------
lebedev.ri wrote:
> I think i don't quite understand what is going on here,
> but i really don't understand why we'd want to
> replace `SDValue(LoadVec, 1)` (which is, i guess, `LoadVec->getChain()`?)
> with the new `Chain`?
> We only simply replace the extract with a new load,
> why could we possibly invalidate the other memory chains?
> 
> This *reeks*. (Yes, this is copied from `DAGCombiner::scalarizeExtractedVectorLoad()`)
`LoadVec->getChain()` is the chain operand; `SDValue(LoadVec, 1)` is the chain result.
I suspect the issue here is that the chains aren't connected correctly.  The current code RAUW's the chain output of LoadVec with the chain output of Load... and leaves the chain of LoadVec dangling.  If LoadVec isn't dead, this is wrong; the chain result of LoadVec needs to stay connected.
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118376/new/
https://reviews.llvm.org/D118376
    
    
More information about the llvm-commits
mailing list