nikic added inline comments.
================ Comment at: llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:2336 + // Try to reassociate loop invariant index calculations to enable LICM. + if (Idx && (Idx->getOpcode() == Instruction::Add)) { + Value *Ptr = GEP.getOperand(0); ---------------- This needs a one-use check. The transform is not profitable if we have to keep *both* the add and the gep. Can also use `match(GEP.getOperand(1), m_Add(...))` here. ================ Comment at: llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:2339 + Value *InvIdx = Idx->getOperand(0); + Value *NonInvIdx = Idx->getOperand(1); + ---------------- This no longer checks for loop invariance, so we should remove any invariance-related terminology. ================ Comment at: llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:2351 + NewPtr, NonInvIdx); + NewGEP->setIsInBounds(GEP.isInBounds()); + return NewGEP; ---------------- This inbounds preservation is incorrect: https://alive2.llvm.org/ce/z/bJZvQG It's even incorrect if the add is also nsw. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D155688/new/ https://reviews.llvm.org/D155688 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits