================ @@ -355,6 +389,46 @@ class SrcSafetyAnalysis { return Regs; } + // Returns all registers made trusted by this instruction. + SmallVector<MCPhysReg> getRegsMadeTrusted(const MCInst &Point, + const SrcState &Cur) const { + SmallVector<MCPhysReg> Regs; + const MCPhysReg NoReg = BC.MIB->getNoRegister(); + + // An authenticated pointer can be checked, or + MCPhysReg CheckedReg = + BC.MIB->getAuthCheckedReg(Point, /*MayOverwrite=*/false); + if (CheckedReg != NoReg && Cur.SafeToDerefRegs[CheckedReg]) + Regs.push_back(CheckedReg); + + if (CheckerSequenceInfo.contains(&Point)) { + MCPhysReg CheckedReg; + const MCInst *FirstCheckerInst; + std::tie(CheckedReg, FirstCheckerInst) = CheckerSequenceInfo.at(&Point); + + // FirstCheckerInst should belong to the same basic block, meaning + // it was deterministically processed a few steps before this instruction. + const SrcState &StateBeforeChecker = + getStateBefore(*FirstCheckerInst).get(); ---------------- kbeyls wrote:
Thanks, that all makes sense. https://github.com/llvm/llvm-project/pull/134146 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits