1 //===-- InstrinsicInst.cpp - Intrinsic Instruction Wrappers ---------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements methods that make it really easy to deal with intrinsic 11 // functions. 12 // 13 // All intrinsic function calls are instances of the call instruction, so these 14 // are all subclasses of the CallInst class. Note that none of these classes 15 // has state or virtual methods, which is an important part of this gross/neat 16 // hack working. 17 // 18 // In some cases, arguments to intrinsics need to be generic and are defined as 19 // type pointer to empty struct { }*. To access the real item of interest the 20 // cast instruction needs to be stripped away. 21 // 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" 28 using namespace llvm; 29 30 //===----------------------------------------------------------------------===// 31 /// DbgInfoIntrinsic - This is the common base class for debug info intrinsics 32 /// 33 CastOperand(Value * C)34static Value *CastOperand(Value *C) { 35 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) 36 if (CE->isCast()) 37 return CE->getOperand(0); 38 return nullptr; 39 } 40 StripCast(Value * C)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 getValueImpl(Value * Op)52static Value *getValueImpl(Value *Op) { 53 auto *MD = cast<MetadataAsValue>(Op)->getMetadata(); 54 if (auto *V = dyn_cast<ValueAsMetadata>(MD)) 55 return V->getValue(); 56 57 // When the value goes to null, it gets replaced by an empty MDNode. 58 assert(!cast<MDNode>(MD)->getNumOperands() && "Expected an empty MDNode"); 59 return nullptr; 60 } 61 62 //===----------------------------------------------------------------------===// 63 /// DbgDeclareInst - This represents the llvm.dbg.declare instruction. 64 /// 65 getAddress() const66Value *DbgDeclareInst::getAddress() const { 67 if (!getArgOperand(0)) 68 return nullptr; 69 70 return getValueImpl(getArgOperand(0)); 71 } 72 73 //===----------------------------------------------------------------------===// 74 /// DbgValueInst - This represents the llvm.dbg.value instruction. 75 /// 76 getValue() const77const Value *DbgValueInst::getValue() const { 78 return const_cast<DbgValueInst *>(this)->getValue(); 79 } 80 getValue()81Value *DbgValueInst::getValue() { return getValueImpl(getArgOperand(0)); } 82