aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Sanders <daniel_l_sanders@apple.com>2022-04-05 11:23:51 -0700
committerDaniel Sanders <daniel_l_sanders@apple.com>2022-04-05 11:55:07 -0700
commit93977f37e67eae26d9bc88e5c3970c11d8861dfc (patch)
tree43818e5623fb4b98f07c5955e819ea5d8f47f95c
parent9bcaf6ddfe34943e6ae6a319097524c117908913 (diff)
downloadllvm-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.cpp7
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);