1 //===-- InstrinsicInst.cpp - Intrinsic Instruction Wrappers -----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements methods that make it really easy to deal with intrinsic
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
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.
22 //===----------------------------------------------------------------------===//
24 #include "llvm/IntrinsicInst.h"
25 #include "llvm/Constants.h"
26 #include "llvm/GlobalVariable.h"
27 #include "llvm/Analysis/ValueTracking.h"
28 #include "llvm/CodeGen/MachineModuleInfo.h"
31 //===----------------------------------------------------------------------===//
32 /// DbgInfoIntrinsic - This is the common base class for debug info intrinsics
35 static Value *CastOperand(Value *C) {
36 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
38 return CE->getOperand(0);
42 Value *DbgInfoIntrinsic::StripCast(Value *C) {
43 if (Value *CO = CastOperand(C)) {
45 } else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) {
46 if (GV->hasInitializer())
47 if (Value *CO = CastOperand(GV->getInitializer()))
50 return dyn_cast<GlobalVariable>(C);
53 //===----------------------------------------------------------------------===//
54 /// DbgDeclareInst - This represents the llvm.dbg.declare instruction.
57 Value *DbgDeclareInst::getAddress() const {
58 if (MDNode* MD = cast_or_null<MDNode>(getOperand(1)))
59 return MD->getOperand(0);
64 //===----------------------------------------------------------------------===//
65 /// DbgValueInst - This represents the llvm.dbg.value instruction.
68 const Value *DbgValueInst::getValue() const {
69 return cast<MDNode>(getOperand(1))->getOperand(0);
72 Value *DbgValueInst::getValue() {
73 return cast<MDNode>(getOperand(1))->getOperand(0);