IntrinsicInst.cpp revision 256281
1132033Sdfr//===-- InstrinsicInst.cpp - Intrinsic Instruction Wrappers -----*- C++ -*-===// 2132033Sdfr// 3132033Sdfr// The LLVM Compiler Infrastructure 4132033Sdfr// 5132033Sdfr// This file is distributed under the University of Illinois Open Source 6132033Sdfr// License. See LICENSE.TXT for details. 7132033Sdfr// 8132033Sdfr//===----------------------------------------------------------------------===// 9220371Suqs// 10132033Sdfr// This file implements methods that make it really easy to deal with intrinsic 11132033Sdfr// functions. 12132033Sdfr// 13132033Sdfr// All intrinsic function calls are instances of the call instruction, so these 14151350Syar// are all subclasses of the CallInst class. Note that none of these classes 15132033Sdfr// has state or virtual methods, which is an important part of this gross/neat 16132033Sdfr// hack working. 17151350Syar// 18132033Sdfr// In some cases, arguments to intrinsics need to be generic and are defined as 19132033Sdfr// type pointer to empty struct { }*. To access the real item of interest the 20132033Sdfr// cast instruction needs to be stripped away. 21132033Sdfr// 22//===----------------------------------------------------------------------===// 23 24#include "llvm/IR/IntrinsicInst.h" 25#include "llvm/IR/Constants.h" 26#include "llvm/IR/GlobalVariable.h" 27#include "llvm/IR/Metadata.h" 28using namespace llvm; 29 30//===----------------------------------------------------------------------===// 31/// DbgInfoIntrinsic - This is the common base class for debug info intrinsics 32/// 33 34static Value *CastOperand(Value *C) { 35 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) 36 if (CE->isCast()) 37 return CE->getOperand(0); 38 return NULL; 39} 40 41Value *DbgInfoIntrinsic::StripCast(Value *C) { 42 if (Value *CO = CastOperand(C)) { 43 C = StripCast(CO); 44 } else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) { 45 if (GV->hasInitializer()) 46 if (Value *CO = CastOperand(GV->getInitializer())) 47 C = StripCast(CO); 48 } 49 return dyn_cast<GlobalVariable>(C); 50} 51 52//===----------------------------------------------------------------------===// 53/// DbgDeclareInst - This represents the llvm.dbg.declare instruction. 54/// 55 56Value *DbgDeclareInst::getAddress() const { 57 if (MDNode* MD = cast_or_null<MDNode>(getArgOperand(0))) 58 return MD->getOperand(0); 59 else 60 return NULL; 61} 62 63//===----------------------------------------------------------------------===// 64/// DbgValueInst - This represents the llvm.dbg.value instruction. 65/// 66 67const Value *DbgValueInst::getValue() const { 68 return cast<MDNode>(getArgOperand(0))->getOperand(0); 69} 70 71Value *DbgValueInst::getValue() { 72 return cast<MDNode>(getArgOperand(0))->getOperand(0); 73} 74