From cfee6c49ea9186bd397766f51706521ff3dfa57f Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 4 Jun 2014 19:01:48 +0000 Subject: [PATCH] Add a Constant version of stripPointerCasts. Thanks to rnk for the suggestion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210205 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Constant.h | 8 ++++++++ lib/Analysis/ConstantFolding.cpp | 2 +- lib/ExecutionEngine/JIT/JITEmitter.cpp | 2 +- lib/Transforms/InstCombine/InstructionCombining.cpp | 6 +++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/llvm/IR/Constant.h b/include/llvm/IR/Constant.h index f03e3dd4553..39c7c37dafd 100644 --- a/include/llvm/IR/Constant.h +++ b/include/llvm/IR/Constant.h @@ -163,6 +163,14 @@ public: /// that want to check to see if a global is unused, but don't want to deal /// with potentially dead constants hanging off of the globals. void removeDeadConstantUsers() const; + + Constant *stripPointerCasts() { + return cast(Value::stripPointerCasts()); + } + + const Constant *stripPointerCasts() const { + return const_cast(this)->stripPointerCasts(); + } }; } // End llvm namespace diff --git a/lib/Analysis/ConstantFolding.cpp b/lib/Analysis/ConstantFolding.cpp index 0ac1cb56aa2..f1294dea978 100644 --- a/lib/Analysis/ConstantFolding.cpp +++ b/lib/Analysis/ConstantFolding.cpp @@ -706,7 +706,7 @@ static Constant *CastGEPIndices(ArrayRef Ops, static Constant* StripPtrCastKeepAS(Constant* Ptr) { assert(Ptr->getType()->isPointerTy() && "Not a pointer type"); PointerType *OldPtrTy = cast(Ptr->getType()); - Ptr = cast(Ptr->stripPointerCasts()); + Ptr = Ptr->stripPointerCasts(); PointerType *NewPtrTy = cast(Ptr->getType()); // Preserve the address space number of the pointer. diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp index f1c3bb274e8..74870551904 100644 --- a/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -687,7 +687,7 @@ void *JITResolver::JITCompilerFn(void *Stub) { // static GlobalObject *getSimpleAliasee(Constant *C) { - C = cast(C->stripPointerCasts()); + C = C->stripPointerCasts(); return dyn_cast(C); } diff --git a/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp index 0fffc5a1548..991ad796a7e 100644 --- a/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -2108,7 +2108,7 @@ Instruction *InstCombiner::visitLandingPadInst(LandingPadInst &LI) { if (LI.isCatch(i)) { // A catch clause. Constant *CatchClause = LI.getClause(i); - Constant *TypeInfo = cast(CatchClause->stripPointerCasts()); + Constant *TypeInfo = CatchClause->stripPointerCasts(); // If we already saw this clause, there is no point in having a second // copy of it. @@ -2181,8 +2181,8 @@ Instruction *InstCombiner::visitLandingPadInst(LandingPadInst &LI) { // catch-alls. If so, the filter can be discarded. bool SawCatchAll = false; for (unsigned j = 0; j != NumTypeInfos; ++j) { - Value *Elt = Filter->getOperand(j); - Constant *TypeInfo = cast(Elt->stripPointerCasts()); + Constant *Elt = Filter->getOperand(j); + Constant *TypeInfo = Elt->stripPointerCasts(); if (isCatchAll(Personality, TypeInfo)) { // This element is a catch-all. Bail out, noting this fact. SawCatchAll = true;