mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 03:25:23 +00:00
fix a bug (possibly 8816) in the sadd forming xform: it isn't
profitable (or safe) to promote code when the add-with-constant has other uses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122175 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1588,6 +1588,16 @@ Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) {
|
||||
static Instruction *ProcessUGT_ADDCST_ADD(ICmpInst &I, Value *A, Value *B,
|
||||
ConstantInt *CI2, ConstantInt *CI1,
|
||||
InstCombiner::BuilderTy *Builder) {
|
||||
// The transformation we're trying to do here is to transform this into an
|
||||
// llvm.sadd.with.overflow. To do this, we have to replace the original add
|
||||
// with a narrower add, and discard the add-with-constant that is part of the
|
||||
// range check (if we can't eliminate it, this isn't profitable).
|
||||
|
||||
// In order to eliminate the add-with-constant, the compare can be its only
|
||||
// use.
|
||||
Value *AddWithCst = I.getOperand(0);
|
||||
if (!AddWithCst->hasOneUse()) return 0;
|
||||
|
||||
const IntegerType *WideType = cast<IntegerType>(CI1->getType());
|
||||
unsigned WideWidth = WideType->getBitWidth();
|
||||
unsigned NarrowWidth = WideWidth / 2;
|
||||
|
Reference in New Issue
Block a user