diff options
author | Jim Laskey <jlaskey@mac.com> | 2006-03-23 18:05:12 +0000 |
---|---|---|
committer | Jim Laskey <jlaskey@mac.com> | 2006-03-23 18:05:12 +0000 |
commit | 4556ce5d115f93ad6809d77810b9b770e5f737f2 (patch) | |
tree | 77102581207ed224cfc22114479d06e88e36e13d /lib | |
parent | c14897e673a34916041479c6ead823af8d3fd165 (diff) |
Simplify handling of llvm.dbg intrinsic operands to one spot.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26987 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VMCore/IntrinsicInst.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/VMCore/IntrinsicInst.cpp b/lib/VMCore/IntrinsicInst.cpp new file mode 100644 index 0000000000..e34cd5bbef --- /dev/null +++ b/lib/VMCore/IntrinsicInst.cpp @@ -0,0 +1,55 @@ +//===-- InstrinsicInst.cpp - Intrinsic Instruction Wrappers -----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/IntrinsicInst.h" + +#include "llvm/Constants.h" +#include "llvm/GlobalVariable.h" + +using namespace llvm; + +//===----------------------------------------------------------------------===// +/// DbgInfoIntrinsic - This is the common base class for debug info intrinsics +/// + +static Value *CastOperand(Value *C) { + if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) + if (CE->getOpcode() == Instruction::Cast) + return CE->getOperand(0); + return NULL; +} + +Value *DbgInfoIntrinsic::StripCast(Value *C) { + if (Value *CO = CastOperand(C)) { + return StripCast(CO); + } else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) { + if (GV->hasInitializer()) + if (Value *CO = CastOperand(GV->getInitializer())) + return StripCast(CO); + } + return C; +} + +//===----------------------------------------------------------------------===// +/// DbgStopPointInst - This represents the llvm.dbg.stoppoint instruction. +/// + +std::string DbgStopPointInst::getFileName() const { + GlobalVariable *GV = cast<GlobalVariable>(getContext()); + ConstantStruct *CS = cast<ConstantStruct>(GV->getInitializer()); + return CS->getOperand(4)->getStringValue(); +} + +std::string DbgStopPointInst::getDirectory() const { + GlobalVariable *GV = cast<GlobalVariable>(getContext()); + ConstantStruct *CS = cast<ConstantStruct>(GV->getInitializer()); + return CS->getOperand(5)->getStringValue(); +} + +//===----------------------------------------------------------------------===// |