[llvm-commits] [llvm] r50775 - in /llvm/trunk: include/llvm/IntrinsicInst.h include/llvm/Value.h lib/CodeGen/Collector.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp lib/CodeGen/ShadowStackCollector.cpp lib/Transforms/Scalar/InstructionCombining.cpp lib/VMCore/Function.cpp lib/VMCore/Value.cpp lib/VMCore/Verifier.cpp

Chris Lattner clattner at apple.com
Tue May 6 18:03:06 PDT 2008


On May 6, 2008, at 3:52 PM, Anton Korobeynikov wrote:
> URL: http://llvm.org/viewvc/llvm-project?rev=50775&view=rev
> Log:
> Make StripPointerCast a common function (should we mak it method of  
> Value instead?)

Nice!  I'd prefer that this was a method on Value.  For bonus points,  
it would be nice to be able to pass in an enum saying what to skip  
over.  For example, getUnderlyingObject in BasicAliasAnalysis.cpp  
really wants to skip through GEP instructions regardless of their index.

Maybe something like:
   V = V->SkipThrough(V, xx::bitcast|xx::gepzero|xx::gepany);

?

-Chris

>
>
> Modified:
>    llvm/trunk/include/llvm/IntrinsicInst.h
>    llvm/trunk/include/llvm/Value.h
>    llvm/trunk/lib/CodeGen/Collector.cpp
>    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
>    llvm/trunk/lib/CodeGen/ShadowStackCollector.cpp
>    llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>    llvm/trunk/lib/VMCore/Function.cpp
>    llvm/trunk/lib/VMCore/Value.cpp
>    llvm/trunk/lib/VMCore/Verifier.cpp
>
> Modified: llvm/trunk/include/llvm/IntrinsicInst.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IntrinsicInst.h?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/include/llvm/IntrinsicInst.h (original)
> +++ llvm/trunk/include/llvm/IntrinsicInst.h Tue May  6 17:52:30 2008
> @@ -38,12 +38,6 @@
>     IntrinsicInst(const IntrinsicInst&);  // DO NOT IMPLEMENT
>     void operator=(const IntrinsicInst&); // DO NOT IMPLEMENT
>   public:
> -
> -    /// StripPointerCasts - This static method strips off any  
> unneeded pointer
> -    /// casts from the specified value, returning the original  
> uncasted value.
> -    /// Note that the returned value is guaranteed to have pointer  
> type.
> -    static Value *StripPointerCasts(Value *Ptr);
> -
>     /// getIntrinsicID - Return the intrinsic ID of this intrinsic.
>     ///
>     Intrinsic::ID getIntrinsicID() const {
>
> Modified: llvm/trunk/include/llvm/Value.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Value.h?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/include/llvm/Value.h (original)
> +++ llvm/trunk/include/llvm/Value.h Tue May  6 17:52:30 2008
> @@ -272,6 +272,11 @@
>   return isa<GlobalVariable>(Val) || isa<Function>(Val) ||  
> isa<GlobalAlias>(Val);
> }
>
> +/// StripPointerCasts - This function strips off any unneeded pointer
> +/// casts from the specified value, returning the original uncasted  
> value.
> +/// Note that the returned value is guaranteed to have pointer type.
> +Value *StripPointerCasts(Value *Ptr);
> +
> } // End llvm namespace
>
> #endif
>
> Modified: llvm/trunk/lib/CodeGen/Collector.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Collector.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/Collector.cpp (original)
> +++ llvm/trunk/lib/CodeGen/Collector.cpp Tue May  6 17:52:30 2008
> @@ -178,8 +178,8 @@
>   SmallPtrSet<AllocaInst*,16> InitedRoots;
>   for (; !CouldBecomeSafePoint(IP); ++IP)
>     if (StoreInst *SI = dyn_cast<StoreInst>(IP))
> -      if (AllocaInst *AI = dyn_cast<AllocaInst>(
> -            IntrinsicInst::StripPointerCasts(SI->getOperand(1))))
> +      if (AllocaInst *AI =
> +          dyn_cast<AllocaInst>(StripPointerCasts(SI->getOperand(1))))
>         InitedRoots.insert(AI);
>
>   // Add root initializers.
> @@ -294,7 +294,7 @@
>             // Initialize the GC root, but do not delete the  
> intrinsic. The
>             // backend needs the intrinsic to flag the stack slot.
>             Roots.push_back(cast<AllocaInst>(
> -              IntrinsicInst::StripPointerCasts(CI->getOperand(1))));
> +                              StripPointerCasts(CI->getOperand(1))));
>           }
>           break;
>         default:
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  
> (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Tue  
> May  6 17:52:30 2008
> @@ -2712,7 +2712,7 @@
>
> /// ExtractTypeInfo - Returns the type info, possibly bitcast,  
> encoded in V.
> static GlobalVariable *ExtractTypeInfo (Value *V) {
> -  V = IntrinsicInst::StripPointerCasts(V);
> +  V = StripPointerCasts(V);
>   GlobalVariable *GV = dyn_cast<GlobalVariable>(V);
>   assert ((GV || isa<ConstantPointerNull>(V)) &&
>           "TypeInfo must be a global variable or NULL");
> @@ -3150,8 +3150,7 @@
>     return 0;
>
>   case Intrinsic::init_trampoline: {
> -    const Function *F =
> -       
> cast<Function>(IntrinsicInst::StripPointerCasts(I.getOperand(2)));
> +    const Function *F =  
> cast<Function>(StripPointerCasts(I.getOperand(2)));
>
>     SDOperand Ops[6];
>     Ops[0] = getRoot();
>
> Modified: llvm/trunk/lib/CodeGen/ShadowStackCollector.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ShadowStackCollector.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/ShadowStackCollector.cpp (original)
> +++ llvm/trunk/lib/CodeGen/ShadowStackCollector.cpp Tue May  6  
> 17:52:30 2008
> @@ -325,8 +325,7 @@
>         if (Function *F = CI->getCalledFunction())
>           if (F->getIntrinsicID() == Intrinsic::gcroot) {
>             std::pair<CallInst*,AllocaInst*> Pair = std::make_pair(
> -              CI, cast<AllocaInst>(
> -                    IntrinsicInst::StripPointerCasts(CI- 
> >getOperand(1))));
> +              CI, cast<AllocaInst>(StripPointerCasts(CI- 
> >getOperand(1))));
>             if (IsNullValue(CI->getOperand(2)))
>               Roots.push_back(Pair);
>             else
>
> Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp  
> (original)
> +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Tue  
> May  6 17:52:30 2008
> @@ -9131,8 +9131,7 @@
>   IntrinsicInst *Tramp =
>     cast<IntrinsicInst>(cast<BitCastInst>(Callee)->getOperand(0));
>
> -  Function *NestF =
> -    cast<Function>(IntrinsicInst::StripPointerCasts(Tramp- 
> >getOperand(2)));
> +  Function *NestF = cast<Function>(StripPointerCasts(Tramp- 
> >getOperand(2)));
>   const PointerType *NestFPTy = cast<PointerType>(NestF->getType());
>   const FunctionType *NestFTy = cast<FunctionType>(NestFPTy- 
> >getElementType());
>
>
> Modified: llvm/trunk/lib/VMCore/Function.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/VMCore/Function.cpp (original)
> +++ llvm/trunk/lib/VMCore/Function.cpp Tue May  6 17:52:30 2008
> @@ -357,28 +357,4 @@
>                                           getType(id, Tys, numTys)));
> }
>
> -Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
> -  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr)) {
> -    if (CE->getOpcode() == Instruction::BitCast) {
> -      if (isa<PointerType>(CE->getOperand(0)->getType()))
> -        return StripPointerCasts(CE->getOperand(0));
> -    } else if (CE->getOpcode() == Instruction::GetElementPtr) {
> -      for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
> -        if (!CE->getOperand(i)->isNullValue())
> -          return Ptr;
> -      return StripPointerCasts(CE->getOperand(0));
> -    }
> -    return Ptr;
> -  }
> -
> -  if (BitCastInst *CI = dyn_cast<BitCastInst>(Ptr)) {
> -    if (isa<PointerType>(CI->getOperand(0)->getType()))
> -      return StripPointerCasts(CI->getOperand(0));
> -  } else if (GetElementPtrInst *GEP =  
> dyn_cast<GetElementPtrInst>(Ptr)) {
> -    if (GEP->hasAllZeroIndices())
> -      return StripPointerCasts(GEP->getOperand(0));
> -  }
> -  return Ptr;
> -}
> -
> // vim: sw=2 ai
>
> Modified: llvm/trunk/lib/VMCore/Value.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Value.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/VMCore/Value.cpp (original)
> +++ llvm/trunk/lib/VMCore/Value.cpp Tue May  6 17:52:30 2008
> @@ -12,6 +12,7 @@
> // 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
>
> #include "llvm/Constant.h"
> +#include "llvm/Constants.h"
> #include "llvm/DerivedTypes.h"
> #include "llvm/InstrTypes.h"
> #include "llvm/Instructions.h"
> @@ -331,3 +332,30 @@
>     }
> }
>
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +//                            Utility functions
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +
> +Value *llvm::StripPointerCasts(Value *Ptr) {
> +  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr)) {
> +    if (CE->getOpcode() == Instruction::BitCast) {
> +      if (isa<PointerType>(CE->getOperand(0)->getType()))
> +        return StripPointerCasts(CE->getOperand(0));
> +    } else if (CE->getOpcode() == Instruction::GetElementPtr) {
> +      for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
> +        if (!CE->getOperand(i)->isNullValue())
> +          return Ptr;
> +      return StripPointerCasts(CE->getOperand(0));
> +    }
> +    return Ptr;
> +  }
> +
> +  if (BitCastInst *CI = dyn_cast<BitCastInst>(Ptr)) {
> +    if (isa<PointerType>(CI->getOperand(0)->getType()))
> +      return StripPointerCasts(CI->getOperand(0));
> +  } else if (GetElementPtrInst *GEP =  
> dyn_cast<GetElementPtrInst>(Ptr)) {
> +    if (GEP->hasAllZeroIndices())
> +      return StripPointerCasts(GEP->getOperand(0));
> +  }
> +  return Ptr;
> +}
>
> Modified: llvm/trunk/lib/VMCore/Verifier.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=50775&r1=50774&r2=50775&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/VMCore/Verifier.cpp (original)
> +++ llvm/trunk/lib/VMCore/Verifier.cpp Tue May  6 17:52:30 2008
> @@ -1271,8 +1271,7 @@
>                 "Intrinsic parameter #1 is not i8**.", &CI);
>         Assert1(CI.getOperand(2)->getType() == PtrTy,
>                 "Intrinsic parameter #2 is not i8*.", &CI);
> -        Assert1(isa<AllocaInst>(
> -                   
> IntrinsicInst::StripPointerCasts(CI.getOperand(1))),
> +        Assert1(isa<AllocaInst>(StripPointerCasts(CI.getOperand(1))),
>                 "llvm.gcroot parameter #1 must be an alloca.", &CI);
>         Assert1(isa<Constant>(CI.getOperand(2)),
>                 "llvm.gcroot parameter #2 must be a constant.", &CI);
> @@ -1298,7 +1297,7 @@
>               &CI);
>     } break;
>   case Intrinsic::init_trampoline:
> -     
> Assert1 
> (isa<Function>(IntrinsicInst::StripPointerCasts(CI.getOperand(2))),
> +    Assert1(isa<Function>(StripPointerCasts(CI.getOperand(2))),
>             "llvm.init_trampoline parameter #2 must resolve to a  
> function.",
>             &CI);
>     break;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list