summaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Constants.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/IR/Constants.cpp')
-rw-r--r--llvm/lib/IR/Constants.cpp12
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 {