[llvm] [InstCombine] Combine ptrauth intrin. callee into same-key bundle. (PR #94707)
Daniil Kovalev via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 17 06:49:28 PDT 2024
================
@@ -3665,6 +3665,78 @@ static IntrinsicInst *findInitTrampoline(Value *Callee) {
return nullptr;
}
+Instruction *InstCombinerImpl::foldPtrAuthIntrinsicCallee(CallBase &Call) {
+ Value *Callee = Call.getCalledOperand();
+ auto *IPC = dyn_cast<IntToPtrInst>(Callee);
+ if (!IPC || !IPC->isNoopCast(DL))
+ return nullptr;
+
+ IntrinsicInst *II = dyn_cast<IntrinsicInst>(IPC->getOperand(0));
+ if (!II)
+ return nullptr;
+
+ // Isolate the ptrauth bundle from the others.
+ std::optional<OperandBundleUse> PtrAuthBundleOrNone;
+ SmallVector<OperandBundleDef, 2> NewBundles;
+ for (unsigned BI = 0, BE = Call.getNumOperandBundles(); BI != BE; ++BI) {
+ OperandBundleUse Bundle = Call.getOperandBundleAt(BI);
+ if (Bundle.getTagID() == LLVMContext::OB_ptrauth)
+ PtrAuthBundleOrNone = Bundle;
+ else
+ NewBundles.emplace_back(Bundle);
+ }
+
----------------
kovdan01 wrote:
I'd probably add smth like this here to return early:
```
if (!PtrAuthBundleOrNone)
return nullptr;
```
With this, you can delete corresponding checks below.
https://github.com/llvm/llvm-project/pull/94707
More information about the llvm-commits
mailing list