Add a Constant version of stripPointerCasts.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 4 Jun 2014 19:01:48 +0000 (19:01 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 4 Jun 2014 19:01:48 +0000 (19:01 +0000)
Thanks to rnk for the suggestion.

llvm-svn: 210205

llvm/include/llvm/IR/Constant.h
llvm/lib/Analysis/ConstantFolding.cpp
llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp
llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

index f03e3dd..39c7c37 100644 (file)
@@ -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<Constant>(Value::stripPointerCasts());
+  }
+
+  const Constant *stripPointerCasts() const {
+    return const_cast<Constant*>(this)->stripPointerCasts();
+  }
 };
 
 } // End llvm namespace
index 0ac1cb5..f1294de 100644 (file)
@@ -706,7 +706,7 @@ static Constant *CastGEPIndices(ArrayRef<Constant *> Ops,
 static Constant* StripPtrCastKeepAS(Constant* Ptr) {
   assert(Ptr->getType()->isPointerTy() && "Not a pointer type");
   PointerType *OldPtrTy = cast<PointerType>(Ptr->getType());
-  Ptr = cast<Constant>(Ptr->stripPointerCasts());
+  Ptr = Ptr->stripPointerCasts();
   PointerType *NewPtrTy = cast<PointerType>(Ptr->getType());
 
   // Preserve the address space number of the pointer.
index f1c3bb2..7487055 100644 (file)
@@ -687,7 +687,7 @@ void *JITResolver::JITCompilerFn(void *Stub) {
 //
 
 static GlobalObject *getSimpleAliasee(Constant *C) {
-  C = cast<Constant>(C->stripPointerCasts());
+  C = C->stripPointerCasts();
   return dyn_cast<GlobalObject>(C);
 }
 
index 0fffc5a..991ad79 100644 (file)
@@ -2108,7 +2108,7 @@ Instruction *InstCombiner::visitLandingPadInst(LandingPadInst &LI) {
     if (LI.isCatch(i)) {
       // A catch clause.
       Constant *CatchClause = LI.getClause(i);
-      Constant *TypeInfo = cast<Constant>(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<Constant>(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;