diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-11-09 23:06:58 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-11-09 23:06:58 +0000 | 
| commit | cdfb80de1619a424efbd61b7ded35ee2b870d189 (patch) | |
| tree | c7d7f7521bf5c580e400a94a13abfbf8a28453c6 /llvm | |
| parent | 3f94a132ddb536857b7bda67c26d0326a26738c3 (diff) | |
| download | bcm5719-llvm-cdfb80de1619a424efbd61b7ded35ee2b870d189.tar.gz bcm5719-llvm-cdfb80de1619a424efbd61b7ded35ee2b870d189.zip  | |
fix ConstantFoldCompareInstOperands to take the LHS/RHS as
individual operands instead of taking a temporary array
llvm-svn: 86619
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Analysis/ConstantFolding.h | 2 | ||||
| -rw-r--r-- | llvm/lib/Analysis/ConstantFolding.cpp | 41 | ||||
| -rw-r--r-- | llvm/lib/Analysis/InstructionSimplify.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/CloneFunction.cpp | 4 | 
5 files changed, 28 insertions, 36 deletions
diff --git a/llvm/include/llvm/Analysis/ConstantFolding.h b/llvm/include/llvm/Analysis/ConstantFolding.h index 28402f2cc2f..06951c7e457 100644 --- a/llvm/include/llvm/Analysis/ConstantFolding.h +++ b/llvm/include/llvm/Analysis/ConstantFolding.h @@ -55,7 +55,7 @@ Constant *ConstantFoldInstOperands(unsigned Opcode, const Type *DestTy,  /// returns a constant expression of the specified operands.  ///  Constant *ConstantFoldCompareInstOperands(unsigned Predicate, -                                          Constant *const *Ops, unsigned NumOps, +                                          Constant *LHS, Constant *RHS,                                            const TargetData *TD = 0);  /// ConstantFoldLoadFromConstPtr - Return the value that a load from C would diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index 589bd321157..1cdadbfcea4 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -655,8 +655,8 @@ Constant *llvm::ConstantFoldInstruction(Instruction *I, const TargetData *TD) {        return 0;  // All operands not constant!    if (const CmpInst *CI = dyn_cast<CmpInst>(I)) -    return ConstantFoldCompareInstOperands(CI->getPredicate(), -                                           Ops.data(), Ops.size(), TD); +    return ConstantFoldCompareInstOperands(CI->getPredicate(), Ops[0], Ops[1], +                                           TD);    if (const LoadInst *LI = dyn_cast<LoadInst>(I))      return ConstantFoldLoadInst(LI, TD); @@ -675,8 +675,8 @@ Constant *llvm::ConstantFoldConstantExpression(ConstantExpr *CE,      Ops.push_back(cast<Constant>(*i));    if (CE->isCompare()) -    return ConstantFoldCompareInstOperands(CE->getPredicate(), -                                           Ops.data(), Ops.size(), TD); +    return ConstantFoldCompareInstOperands(CE->getPredicate(), Ops[0], Ops[1], +                                           TD);    return ConstantFoldInstOperands(CE->getOpcode(), CE->getType(),                                    Ops.data(), Ops.size(), TD);  } @@ -806,8 +806,7 @@ Constant *llvm::ConstantFoldInstOperands(unsigned Opcode, const Type *DestTy,  /// returns a constant expression of the specified operands.  ///  Constant *llvm::ConstantFoldCompareInstOperands(unsigned Predicate, -                                                Constant *const *Ops,  -                                                unsigned NumOps, +                                                Constant *Ops0, Constant *Ops1,                                                   const TargetData *TD) {    // fold: icmp (inttoptr x), null         -> icmp x, 0    // fold: icmp (ptrtoint x), 0            -> icmp x, null @@ -816,16 +815,16 @@ Constant *llvm::ConstantFoldCompareInstOperands(unsigned Predicate,    //    // ConstantExpr::getCompare cannot do this, because it doesn't have TD    // around to know if bit truncation is happening. -  if (ConstantExpr *CE0 = dyn_cast<ConstantExpr>(Ops[0])) { -    if (TD && Ops[1]->isNullValue()) { +  if (ConstantExpr *CE0 = dyn_cast<ConstantExpr>(Ops0)) { +    if (TD && Ops1->isNullValue()) {        const Type *IntPtrTy = TD->getIntPtrType(CE0->getContext());        if (CE0->getOpcode() == Instruction::IntToPtr) {          // Convert the integer value to the right size to ensure we get the          // proper extension or truncation.          Constant *C = ConstantExpr::getIntegerCast(CE0->getOperand(0),                                                     IntPtrTy, false); -        Constant *NewOps[] = { C, Constant::getNullValue(C->getType()) }; -        return ConstantFoldCompareInstOperands(Predicate, NewOps, 2, TD); +        Constant *Null = Constant::getNullValue(C->getType()); +        return ConstantFoldCompareInstOperands(Predicate, C, Null, TD);        }        // Only do this transformation if the int is intptrty in size, otherwise @@ -833,13 +832,12 @@ Constant *llvm::ConstantFoldCompareInstOperands(unsigned Predicate,        if (CE0->getOpcode() == Instruction::PtrToInt &&             CE0->getType() == IntPtrTy) {          Constant *C = CE0->getOperand(0); -        Constant *NewOps[] = { C, Constant::getNullValue(C->getType()) }; -        // FIXME! -        return ConstantFoldCompareInstOperands(Predicate, NewOps, 2, TD); +        Constant *Null = Constant::getNullValue(C->getType()); +        return ConstantFoldCompareInstOperands(Predicate, C, Null, TD);        }      } -    if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(Ops[1])) { +    if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(Ops1)) {        if (TD && CE0->getOpcode() == CE1->getOpcode()) {          const Type *IntPtrTy = TD->getIntPtrType(CE0->getContext()); @@ -850,24 +848,21 @@ Constant *llvm::ConstantFoldCompareInstOperands(unsigned Predicate,                                                        IntPtrTy, false);            Constant *C1 = ConstantExpr::getIntegerCast(CE1->getOperand(0),                                                        IntPtrTy, false); -          Constant *NewOps[] = { C0, C1 }; -          return ConstantFoldCompareInstOperands(Predicate, NewOps, 2, TD); +          return ConstantFoldCompareInstOperands(Predicate, C0, C1, TD);          }          // Only do this transformation if the int is intptrty in size, otherwise          // there is a truncation or extension that we aren't modeling.          if ((CE0->getOpcode() == Instruction::PtrToInt &&               CE0->getType() == IntPtrTy && -             CE0->getOperand(0)->getType() == CE1->getOperand(0)->getType())) { -          Constant *NewOps[] = {  -            CE0->getOperand(0), CE1->getOperand(0)  -          }; -          return ConstantFoldCompareInstOperands(Predicate, NewOps, 2, TD); -        } +             CE0->getOperand(0)->getType() == CE1->getOperand(0)->getType())) +          return ConstantFoldCompareInstOperands(Predicate, CE0->getOperand(0), +                                                 CE1->getOperand(0), TD);        }      }    } -  return ConstantExpr::getCompare(Predicate, Ops[0], Ops[1]); +   +  return ConstantExpr::getCompare(Predicate, Ops0, Ops1);  } diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 692236a0f22..03bc9a01ce9 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -39,10 +39,8 @@ Value *llvm::SimplifyCompare(unsigned Predicate, Value *LHS, Value *RHS,    CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;    if (Constant *CLHS = dyn_cast<Constant>(LHS)) -    if (Constant *CRHS = dyn_cast<Constant>(RHS)) { -      Constant *COps[] = {CLHS, CRHS}; -      return ConstantFoldCompareInstOperands(Pred, COps, 2, TD); -    } +    if (Constant *CRHS = dyn_cast<Constant>(RHS)) +      return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, TD);    // If this is an integer compare and the LHS and RHS are the same, fold it.    if (LHS == RHS) diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 8ead14e9a87..dc993ae5cc1 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -3826,11 +3826,10 @@ static Constant *EvaluateExpression(Value *V, Constant *PHIVal) {    }    if (const CmpInst *CI = dyn_cast<CmpInst>(I)) -    return ConstantFoldCompareInstOperands(CI->getPredicate(), -                                           &Operands[0], Operands.size()); -  else -    return ConstantFoldInstOperands(I->getOpcode(), I->getType(), -                                    &Operands[0], Operands.size()); +    return ConstantFoldCompareInstOperands(CI->getPredicate(), Operands[0], +                                           Operands[1]); +  return ConstantFoldInstOperands(I->getOpcode(), I->getType(), +                                  &Operands[0], Operands.size());  }  /// getConstantEvolutionLoopExitValue - If we know that the specified Phi is @@ -4037,7 +4036,7 @@ const SCEV *ScalarEvolution::computeSCEVAtScope(const SCEV *V, const Loop *L) {          Constant *C;          if (const CmpInst *CI = dyn_cast<CmpInst>(I))            C = ConstantFoldCompareInstOperands(CI->getPredicate(), -                                              &Operands[0], Operands.size()); +                                              Operands[0], Operands[1]);          else            C = ConstantFoldInstOperands(I->getOpcode(), I->getType(),                                         &Operands[0], Operands.size()); diff --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp index 61d8b9606a5..24542a5e4a3 100644 --- a/llvm/lib/Transforms/Utils/CloneFunction.cpp +++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp @@ -331,8 +331,8 @@ ConstantFoldMappedInstruction(const Instruction *I) {        return 0;  // All operands not constant!    if (const CmpInst *CI = dyn_cast<CmpInst>(I)) -    return ConstantFoldCompareInstOperands(CI->getPredicate(), -                                           &Ops[0], Ops.size(), TD); +    return ConstantFoldCompareInstOperands(CI->getPredicate(), Ops[0], Ops[1], +                                           TD);    if (const LoadInst *LI = dyn_cast<LoadInst>(I))      if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ops[0]))  | 

