diff options
author | Daniel Sanders <daniel_l_sanders@apple.com> | 2022-04-05 11:23:51 -0700 |
---|---|---|
committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2022-04-05 11:55:07 -0700 |
commit | 93977f37e67eae26d9bc88e5c3970c11d8861dfc (patch) | |
tree | 43818e5623fb4b98f07c5955e819ea5d8f47f95c | |
parent | 9bcaf6ddfe34943e6ae6a319097524c117908913 (diff) | |
download | llvm-93977f37e67eae26d9bc88e5c3970c11d8861dfc.zip llvm-93977f37e67eae26d9bc88e5c3970c11d8861dfc.tar.gz llvm-93977f37e67eae26d9bc88e5c3970c11d8861dfc.tar.bz2 |
Check if register class was changed in constrainOperandRegClass()
NFC
When no actual change happens there's no need to notify the
observers about the fact the register class is being constrained.
So we should avoid notifying observers when no change has
happened, because this can dramatically affect compile
time for particular test cases.
Reviewed By: dsanders, arsenm
Differential Revision: https://reviews.llvm.org/D122615
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Utils.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 9888374..1544268 100644 --- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -58,6 +58,11 @@ Register llvm::constrainOperandRegClass( // Assume physical registers are properly constrained. assert(Register::isVirtualRegister(Reg) && "PhysReg not implemented"); + // Save the old register class to check whether + // the change notifications will be required. + // TODO: A better approach would be to pass + // the observers to constrainRegToClass(). + auto *OldRegClass = MRI.getRegClassOrNull(Reg); Register ConstrainedReg = constrainRegToClass(MRI, TII, RBI, Reg, RegClass); // If we created a new virtual register because the class is not compatible // then create a copy between the new and the old register. @@ -83,7 +88,7 @@ Register llvm::constrainOperandRegClass( if (GISelChangeObserver *Observer = MF.getObserver()) { Observer->changedInstr(*RegMO.getParent()); } - } else { + } else if (OldRegClass != MRI.getRegClassOrNull(Reg)) { if (GISelChangeObserver *Observer = MF.getObserver()) { if (!RegMO.isDef()) { MachineInstr *RegDef = MRI.getVRegDef(Reg); |