X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FIR%2FInstruction.cpp;h=86421c4ae9ffcfd6319efde23da9c04e58d4e216;hb=fd0a8133e56e6c48d04e395290da69c3926a48d1;hp=28cc4cb9f136c4931fd0d1c791e29172b32f9bf5;hpb=d4ffb93bf764b5b515beb2cad9bf80c600ac32dc;p=oota-llvm.git diff --git a/lib/IR/Instruction.cpp b/lib/IR/Instruction.cpp index 28cc4cb9f13..86421c4ae9f 100644 --- a/lib/IR/Instruction.cpp +++ b/lib/IR/Instruction.cpp @@ -145,31 +145,31 @@ void Instruction::setFastMathFlags(FastMathFlags FMF) { /// Determine whether the unsafe-algebra flag is set. bool Instruction::hasUnsafeAlgebra() const { - assert(isa(this) && "setting fast-math flag on invalid op"); + assert(isa(this) && "getting fast-math flag on invalid op"); return cast(this)->hasUnsafeAlgebra(); } /// Determine whether the no-NaNs flag is set. bool Instruction::hasNoNaNs() const { - assert(isa(this) && "setting fast-math flag on invalid op"); + assert(isa(this) && "getting fast-math flag on invalid op"); return cast(this)->hasNoNaNs(); } /// Determine whether the no-infs flag is set. bool Instruction::hasNoInfs() const { - assert(isa(this) && "setting fast-math flag on invalid op"); + assert(isa(this) && "getting fast-math flag on invalid op"); return cast(this)->hasNoInfs(); } /// Determine whether the no-signed-zeros flag is set. bool Instruction::hasNoSignedZeros() const { - assert(isa(this) && "setting fast-math flag on invalid op"); + assert(isa(this) && "getting fast-math flag on invalid op"); return cast(this)->hasNoSignedZeros(); } /// Determine whether the allow-reciprocal flag is set. bool Instruction::hasAllowReciprocal() const { - assert(isa(this) && "setting fast-math flag on invalid op"); + assert(isa(this) && "getting fast-math flag on invalid op"); return cast(this)->hasAllowReciprocal(); } @@ -177,7 +177,7 @@ bool Instruction::hasAllowReciprocal() const { /// operator which supports these flags. See LangRef.html for the meaning of /// these flats. FastMathFlags Instruction::getFastMathFlags() const { - assert(isa(this) && "setting fast-math flag on invalid op"); + assert(isa(this) && "getting fast-math flag on invalid op"); return cast(this)->getFastMathFlags(); } @@ -300,6 +300,7 @@ static bool haveSameSpecialState(const Instruction *I1, const Instruction *I2, FI->getSynchScope() == cast(I2)->getSynchScope(); if (const AtomicCmpXchgInst *CXI = dyn_cast(I1)) return CXI->isVolatile() == cast(I2)->isVolatile() && + CXI->isWeak() == cast(I2)->isWeak() && CXI->getSuccessOrdering() == cast(I2)->getSuccessOrdering() && CXI->getFailureOrdering() == @@ -331,6 +332,10 @@ bool Instruction::isIdenticalToWhenDefined(const Instruction *I) const { getType() != I->getType()) return false; + // If both instructions have no operands, they are identical. + if (getNumOperands() == 0 && I->getNumOperands() == 0) + return haveSameSpecialState(this, I); + // We have two instructions of identical opcode and #operands. Check to see // if all operands are the same. if (!std::equal(op_begin(), op_end(), I->op_begin()))