================ @@ -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); ---------------- kovdan01 wrote:
Just above `auto` is not used in the same kind of assignments. IMHO things should be kept consistent, so either `const auto &` or `const MachineOperand &` should be used for all such cases in this context. 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