[PATCH] D20102: [ScheduleDAG] Make sure to process all def operands before any use operands

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue May 10 11:29:57 PDT 2016


MatzeB added inline comments.

================
Comment at: llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp:974-975
@@ +973,4 @@
+      const MachineOperand &MO = MI->getOperand(j);
+      if (!MO.isReg() || !MO.isUse())
+        continue;
+      unsigned Reg = MO.getReg();
----------------
MatzeB wrote:
> MatzeB wrote:
> > atrick wrote:
> > > MatzeB wrote:
> > > > This will subregister defs which are uses as well, should be `!MO.readsReg())!
> > > Matthias, can you clarify? We don't want addPhysRefDefs to be called twice for the same subreg!
> > Something like this:
> > `%vreg0:sub0 = ...` is both a definition and a use! (at least if lanemask tracking is not enabled), we still need to record it as a use. physregs never have subregister indexes so MO.readsReg() will never return true for physreg definitions.
> It would also be nice to split addPhysRegDeps() into addPhysRegUseDeps() and addPhysRegDefDeps().
Hmm it looks like the code before this patch only used output dependencies for this case. So this change is fine in preserving that behavior.


Repository:
  rL LLVM

http://reviews.llvm.org/D20102





More information about the llvm-commits mailing list