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 | 0cf8ed61cc93010edd79b8f6456897fe5e10d38a (patch) | |
tree | ce00c7b5961c8cc1b1a7c125f49fd6b7eccd26ee /llvm/lib | |
parent | ff7eac2ee91753b2deb67dea625ac1da3a37a77c (diff) | |
download | bcm5719-llvm-0cf8ed61cc93010edd79b8f6456897fe5e10d38a.tar.gz bcm5719-llvm-0cf8ed61cc93010edd79b8f6456897fe5e10d38a.zip |
Simplify handling of llvm.dbg intrinsic operands to one spot.
llvm-svn: 26987
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/VMCore/IntrinsicInst.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/llvm/lib/VMCore/IntrinsicInst.cpp b/llvm/lib/VMCore/IntrinsicInst.cpp new file mode 100644 index 00000000000..e34cd5bbefd --- /dev/null +++ b/llvm/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(); +} + +//===----------------------------------------------------------------------===// |