IntrinsicInst.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. #include "llvm/IR/IntrinsicInst.h"
  24. #include "llvm/IR/Constants.h"
  25. #include "llvm/IR/GlobalVariable.h"
  26. #include "llvm/IR/Metadata.h"
  27. using namespace llvm;
  28. //===----------------------------------------------------------------------===//
  29. /// DbgInfoIntrinsic - This is the common base class for debug info intrinsics
  30. ///
  31. static Value *CastOperand(Value *C) {
  32. if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
  33. if (CE->isCast())
  34. return CE->getOperand(0);
  35. return nullptr;
  36. }
  37. Value *DbgInfoIntrinsic::StripCast(Value *C) {
  38. if (Value *CO = CastOperand(C)) {
  39. C = StripCast(CO);
  40. } else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) {
  41. if (GV->hasInitializer())
  42. if (Value *CO = CastOperand(GV->getInitializer()))
  43. C = StripCast(CO);
  44. }
  45. return dyn_cast<GlobalVariable>(C);
  46. }
  47. static Value *getValueImpl(Value *Op) {
  48. auto *MD = cast<MetadataAsValue>(Op)->getMetadata();
  49. if (auto *V = dyn_cast<ValueAsMetadata>(MD))
  50. return V->getValue();
  51. // When the value goes to null, it gets replaced by an empty MDNode.
  52. assert(!cast<MDNode>(MD)->getNumOperands() && "Expected an empty MDNode");
  53. return nullptr;
  54. }
  55. //===----------------------------------------------------------------------===//
  56. /// DbgDeclareInst - This represents the llvm.dbg.declare instruction.
  57. ///
  58. Value *DbgDeclareInst::getAddress() const {
  59. if (!getArgOperand(0))
  60. return nullptr;
  61. return getValueImpl(getArgOperand(0));
  62. }
  63. //===----------------------------------------------------------------------===//
  64. /// DbgValueInst - This represents the llvm.dbg.value instruction.
  65. ///
  66. const Value *DbgValueInst::getValue() const {
  67. return const_cast<DbgValueInst *>(this)->getValue();
  68. }
  69. Value *DbgValueInst::getValue() { return getValueImpl(getArgOperand(0)); }