================ @@ -817,10 +817,44 @@ bool AArch64ExpandPseudo::expandCALL_RVMARKER( MachineInstr &MI = *MBBI; MachineOperand &RVTarget = MI.getOperand(0); assert(RVTarget.isGlobal() && "invalid operand for attached call"); - MachineInstr *OriginalCall = - createCall(MBB, MBBI, TII, MI.getOperand(1), - // Regmask starts after the RV and call targets. - /*RegMaskStartIdx=*/2); + + MachineInstr *OriginalCall = nullptr; + + if (MI.getOpcode() == AArch64::BLRA_RVMARKER) { + // Pointer auth call. + MachineOperand &Key = MI.getOperand(2); + assert((Key.getImm() == 0 || Key.getImm() == 1) && + "invalid key for ptrauth call"); + MachineOperand &IntDisc = MI.getOperand(3); + MachineOperand &AddrDisc = MI.getOperand(4); + + OriginalCall = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(AArch64::BLRA)) + .getInstr(); + OriginalCall->addOperand(MI.getOperand(1)); + OriginalCall->addOperand(Key); + OriginalCall->addOperand(IntDisc); + OriginalCall->addOperand(AddrDisc); + + unsigned RegMaskStartIdx = 5; + // Skip register arguments. Those are added during ISel, but are not + // needed for the concrete branch. + while (!MI.getOperand(RegMaskStartIdx).isRegMask()) { + auto MOP = MI.getOperand(RegMaskStartIdx); ---------------- ahmedbougacha wrote:
The helper indeed shouldn't use plain auto, but we can reuse that helper with a bit of generalization. I'm pretty sure this code predates it ;) https://github.com/llvm/llvm-project/pull/85736 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits