X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FIntrinsicInst.h;h=4e4d47513dd005046d335d0fa6dd9bbcb24d5a21;hb=7adb53e7b1a4ec0cda17cbc946da44147c141d69;hp=4c8f2cf6264886293bda0e61d73c8ed6c3a81fb8;hpb=41ff717e85267367bb82e5c0bb863adcba07d0f2;p=oota-llvm.git diff --git a/include/llvm/IntrinsicInst.h b/include/llvm/IntrinsicInst.h index 4c8f2cf6264..4e4d47513dd 100644 --- a/include/llvm/IntrinsicInst.h +++ b/include/llvm/IntrinsicInst.h @@ -28,6 +28,7 @@ #include "llvm/Function.h" #include "llvm/Instructions.h" #include "llvm/Intrinsics.h" +#include "llvm/System/IncludeFile.h" namespace llvm { /// IntrinsicInst - A useful wrapper class for inspecting calls to intrinsic @@ -66,16 +67,15 @@ namespace llvm { /// struct DbgInfoIntrinsic : public IntrinsicInst { - Value *getChain() const { return const_cast(getOperand(1)); } - // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const DbgInfoIntrinsic *) { return true; } static inline bool classof(const IntrinsicInst *I) { switch (I->getIntrinsicID()) { case Intrinsic::dbg_stoppoint: + case Intrinsic::dbg_func_start: case Intrinsic::dbg_region_start: case Intrinsic::dbg_region_end: - case Intrinsic::dbg_func_start: + case Intrinsic::dbg_declare: return true; default: return false; } @@ -83,21 +83,28 @@ namespace llvm { static inline bool classof(const Value *V) { return isa(V) && classof(cast(V)); } + + static Value *StripCast(Value *C); }; - - /// DbgStopPointInst - This represent llvm.dbg.stoppoint instructions. + /// DbgStopPointInst - This represents the llvm.dbg.stoppoint instruction. /// struct DbgStopPointInst : public DbgInfoIntrinsic { + Value *getLineValue() const { return const_cast(getOperand(1)); } + Value *getColumnValue() const { return const_cast(getOperand(2)); } + Value *getContext() const { + return StripCast(getOperand(3)); + } - unsigned getLineNo() const { - return unsigned(cast(getOperand(2))->getRawValue()); + unsigned getLine() const { + return unsigned(cast(getOperand(1))->getZExtValue()); } - unsigned getColNo() const { - return unsigned(cast(getOperand(3))->getRawValue()); + unsigned getColumn() const { + return unsigned(cast(getOperand(2))->getZExtValue()); } - Value *getContext() const { return const_cast(getOperand(4)); } - + + std::string getFileName() const; + std::string getDirectory() const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const DbgStopPointInst *) { return true; } @@ -108,6 +115,67 @@ namespace llvm { return isa(V) && classof(cast(V)); } }; + + /// DbgFuncStartInst - This represents the llvm.dbg.func.start instruction. + /// + struct DbgFuncStartInst : public DbgInfoIntrinsic { + Value *getSubprogram() const { return StripCast(getOperand(1)); } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const DbgFuncStartInst *) { return true; } + static inline bool classof(const IntrinsicInst *I) { + return I->getIntrinsicID() == Intrinsic::dbg_func_start; + } + static inline bool classof(const Value *V) { + return isa(V) && classof(cast(V)); + } + }; + + /// DbgRegionStartInst - This represents the llvm.dbg.region.start + /// instruction. + struct DbgRegionStartInst : public DbgInfoIntrinsic { + Value *getContext() const { return StripCast(getOperand(1)); } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const DbgRegionStartInst *) { return true; } + static inline bool classof(const IntrinsicInst *I) { + return I->getIntrinsicID() == Intrinsic::dbg_region_start; + } + static inline bool classof(const Value *V) { + return isa(V) && classof(cast(V)); + } + }; + + /// DbgRegionEndInst - This represents the llvm.dbg.region.end instruction. + /// + struct DbgRegionEndInst : public DbgInfoIntrinsic { + Value *getContext() const { return StripCast(getOperand(1)); } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const DbgRegionEndInst *) { return true; } + static inline bool classof(const IntrinsicInst *I) { + return I->getIntrinsicID() == Intrinsic::dbg_region_end; + } + static inline bool classof(const Value *V) { + return isa(V) && classof(cast(V)); + } + }; + + /// DbgDeclareInst - This represents the llvm.dbg.declare instruction. + /// + struct DbgDeclareInst : public DbgInfoIntrinsic { + Value *getAddress() const { return getOperand(1); } + Value *getVariable() const { return StripCast(getOperand(2)); } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const DbgDeclareInst *) { return true; } + static inline bool classof(const IntrinsicInst *I) { + return I->getIntrinsicID() == Intrinsic::dbg_declare; + } + static inline bool classof(const Value *V) { + return isa(V) && classof(cast(V)); + } + }; /// MemIntrinsic - This is the common base class for memset/memcpy/memmove. /// @@ -245,6 +313,11 @@ namespace llvm { return isa(V) && classof(cast(V)); } }; + } +// Ensure that the IntrinsicInst.cpp file gets added as a dependency of any +// file that includes this header +FORCE_DEFINING_FILE_TO_BE_LINKED(IntrinsicInst) + #endif