[llvm-branch-commits] [clang] [llvm] Move {load, store}(llvm.protected.field.ptr) lowering to InstCombine. (PR #186548)
Peter Collingbourne via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Apr 3 17:05:56 PDT 2026
================
@@ -3294,33 +3294,33 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
}
case Intrinsic::ptrauth_auth:
case Intrinsic::ptrauth_resign: {
- // We don't support this optimization on intrinsic calls with deactivation
- // symbols, which are represented using operand bundles.
- if (II->hasOperandBundles())
- break;
-
// (sign|resign) + (auth|resign) can be folded by omitting the middle
// sign+auth component if the key and discriminator match.
bool NeedSign = II->getIntrinsicID() == Intrinsic::ptrauth_resign;
Value *Ptr = II->getArgOperand(0);
Value *Key = II->getArgOperand(1);
Value *Disc = II->getArgOperand(2);
+ Value *DS = nullptr;
+ if (auto Bundle = II->getOperandBundle(LLVMContext::OB_deactivation_symbol))
+ DS = Bundle->Inputs[0];
// AuthKey will be the key we need to end up authenticating against in
// whatever we replace this sequence with.
Value *AuthKey = nullptr, *AuthDisc = nullptr, *BasePtr;
if (const auto *CI = dyn_cast<CallBase>(Ptr)) {
- // We don't support this optimization on intrinsic calls with deactivation
- // symbols, which are represented using operand bundles.
- if (CI->hasOperandBundles())
+ Value *OtherDS = nullptr;
+ if (auto Bundle =
+ CI->getOperandBundle(LLVMContext::OB_deactivation_symbol))
+ OtherDS = Bundle->Inputs[0];
+ if (DS != OtherDS)
break;
BasePtr = CI->getArgOperand(0);
if (CI->getIntrinsicID() == Intrinsic::ptrauth_sign) {
if (CI->getArgOperand(1) != Key || CI->getArgOperand(2) != Disc)
----------------
pcc wrote:
I originally added it to resign because we don't support deactivation symbols for resign, which means that having a DS for resign is invalid IR. But having given it more thought, I think it would be better to do `assert(!DS)` below with an explanatory comment. I've done that.
https://github.com/llvm/llvm-project/pull/186548
More information about the llvm-branch-commits
mailing list