X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FIntrinsicInst.cpp;h=c37d5b03cdc801a0259f39e343ffa7b1d9aae780;hb=62b50656ceb854eb0be265d63b2a1d46e7400d8a;hp=b4395e1cd32b7e31d986f0417d539f9c37f02ecf;hpb=6df60a9effe4d20a48cfd9d105c0ab3c5dc3e690;p=oota-llvm.git diff --git a/lib/VMCore/IntrinsicInst.cpp b/lib/VMCore/IntrinsicInst.cpp index b4395e1cd32..c37d5b03cdc 100644 --- a/lib/VMCore/IntrinsicInst.cpp +++ b/lib/VMCore/IntrinsicInst.cpp @@ -2,17 +2,13 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by James M. Laskey and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file implements methods that make it really easy to deal with intrinsic -// functions with the isa/dyncast family of functions. In particular, this -// allows you to do things like: -// -// if (DbgStopPointInst *SPI = dyn_cast(Inst)) -// ... SPI->getFileName() ... SPI->getDirectory() ... +// functions. // // All intrinsic function calls are instances of the call instruction, so these // are all subclasses of the CallInst class. Note that none of these classes @@ -26,10 +22,9 @@ //===----------------------------------------------------------------------===// #include "llvm/IntrinsicInst.h" - #include "llvm/Constants.h" #include "llvm/GlobalVariable.h" - +#include "llvm/Metadata.h" using namespace llvm; //===----------------------------------------------------------------------===// @@ -38,7 +33,7 @@ using namespace llvm; static Value *CastOperand(Value *C) { if (ConstantExpr *CE = dyn_cast(C)) - if (CE->getOpcode() == Instruction::Cast) + if (CE->isCast()) return CE->getOperand(0); return NULL; } @@ -55,23 +50,24 @@ Value *DbgInfoIntrinsic::StripCast(Value *C) { } //===----------------------------------------------------------------------===// -/// DbgStopPointInst - This represents the llvm.dbg.stoppoint instruction. +/// DbgDeclareInst - This represents the llvm.dbg.declare instruction. /// -std::string DbgStopPointInst::getFileName() const { - GlobalVariable *GV = cast(getContext()); - ConstantStruct *CS = cast(GV->getInitializer()); - return CS->getOperand(4)->getStringValue(); +Value *DbgDeclareInst::getAddress() const { + if (MDNode* MD = cast_or_null(getOperand(1))) + return MD->getOperand(0); + else + return NULL; } -std::string DbgStopPointInst::getDirectory() const { - GlobalVariable *GV = cast(getContext()); - ConstantStruct *CS = cast(GV->getInitializer()); - return CS->getOperand(5)->getStringValue(); +//===----------------------------------------------------------------------===// +/// DbgValueInst - This represents the llvm.dbg.value instruction. +/// + +const Value *DbgValueInst::getValue() const { + return cast(getOperand(1))->getOperand(0); } -//===----------------------------------------------------------------------===// -/// LinkIntrinsicInstStub -- This is a hack to make sure that programs that -/// #include IntrinsicInst.h also link this file. See Support/IncludeFile.h -/// for further details. -char llvm::LinkIntrinsicInstStub; +Value *DbgValueInst::getValue() { + return cast(getOperand(1))->getOperand(0); +}