[PATCH] D95026: [SimplifyCFG] Update FoldBranchToCommonDest to be poison-safe

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 4 22:59:55 PST 2021


lebedev.ri added inline comments.


================
Comment at: llvm/lib/Transforms/Utils/SimplifyCFG.cpp:2964
+    NewCondV = Builder.CreateBinOp(Opc, PBI->getCondition(), BICond, "or.cond");
+  Instruction *NewCond = cast<Instruction>(NewCondV);
   PBI->setCondition(NewCond);
----------------
aqjune wrote:
> nikic wrote:
> > nikic wrote:
> > > Why do we need NewCondV and NewCond? setCondition should accept a Value without the Instruction cast.
> > Actually, one more note: What do you think about adding an impliesPoison check here? Otherwise, we may have a phase ordering issue for passes that run between SimplifyCFG and InstCombine, where one creates logical and/or and the other converts to binary. It's not a problem for folds performed by InstCombine itself, but there could be regressions for and/or folds by InstSimplify that can't happen in the meantime. Possibly this could also help LoopSimplify?
> This is a great idea!
> Cast is not necessary, yes. I'll fix it.
Please add a `FIXME: remove once select form is canonical`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D95026/new/

https://reviews.llvm.org/D95026



More information about the llvm-commits mailing list