diff options
Diffstat (limited to 'llvm/lib/IR/Constants.cpp')
| -rw-r--r-- | llvm/lib/IR/Constants.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp index 70803c153d8c..a1c9e925a024 100644 --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -2098,6 +2098,18 @@ Value *ConstantPtrAuth::handleOperandChangeImpl(Value *From, Value *ToV) { Values, this, From, To, NumUpdated, OperandNo); } +bool ConstantPtrAuth::hasSpecialAddressDiscriminator(uint64_t Value) const { + const auto *CastV = dyn_cast<ConstantExpr>(getAddrDiscriminator()); + if (!CastV || CastV->getOpcode() != Instruction::IntToPtr) + return false; + + const auto *IntVal = dyn_cast<ConstantInt>(CastV->getOperand(0)); + if (!IntVal) + return false; + + return IntVal->getValue() == Value; +} + bool ConstantPtrAuth::isKnownCompatibleWith(const Value *Key, const Value *Discriminator, const DataLayout &DL) const { |
