diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h --- a/llvm/include/llvm/Target/TargetMachine.h +++ b/llvm/include/llvm/Target/TargetMachine.h @@ -502,6 +502,9 @@ /// The default variant to use in unqualified `asm` instructions. /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`. virtual int unqualifiedInlineAsmVariant() const { return 0; } + + // MachineRegisterInfo callback function + virtual void registerMachineRegisterInfoCallback(MachineFunction &MF) const {} }; /// Helper method for getting the code model, returning Default if diff --git a/llvm/lib/CodeGen/MachineModuleInfo.cpp b/llvm/lib/CodeGen/MachineModuleInfo.cpp --- a/llvm/lib/CodeGen/MachineModuleInfo.cpp +++ b/llvm/lib/CodeGen/MachineModuleInfo.cpp @@ -106,6 +106,10 @@ const TargetSubtargetInfo &STI = *TM.getSubtargetImpl(F); MF = new MachineFunction(F, TM, STI, NextFnNum++, *this); MF->initTargetMachineFunctionInfo(STI); + + // MRI callback for target specific initializations. + TM.registerMachineRegisterInfoCallback(*MF); + // Update the set entry. I.first->second.reset(MF); } else { diff --git a/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp b/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp --- a/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp +++ b/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp @@ -22,6 +22,7 @@ #include "llvm/IR/DiagnosticInfo.h" #include "llvm/InitializePasses.h" #include "llvm/Support/Debug.h" +#include "llvm/Target/TargetMachine.h" using namespace llvm; #define DEBUG_TYPE "reset-machine-function" @@ -68,6 +69,10 @@ MF.reset(); MF.initTargetMachineFunctionInfo(MF.getSubtarget()); + const LLVMTargetMachine &TM = MF.getTarget(); + // MRI callback for target specific initializations. + TM.registerMachineRegisterInfoCallback(MF); + if (EmitFallbackDiag) { const Function &F = MF.getFunction(); DiagnosticInfoISelFallback DiagFallback(F);