]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rtl-optimization/110587 - speedup find_hard_regno_for_1
authorRichard Biener <rguenther@suse.de>
Tue, 25 Jul 2023 13:36:30 +0000 (15:36 +0200)
committerRichard Biener <rguenther@suse.de>
Wed, 9 Aug 2023 06:46:58 +0000 (08:46 +0200)
The following applies a micro-optimization to find_hard_regno_for_1,
re-ordering the check so we can easily jump-thread by using an else.
This reduces the time spent in this function by 15% for the testcase
in the PR.

PR rtl-optimization/110587
* lra-assigns.cc (find_hard_regno_for_1): Re-order checks.

gcc/lra-assigns.cc

index b8582dcafff81fa8de26e7c64451238aa87295bb..d2ebcfd50566ebabcc08b06fd79e1b61ace9ce03 100644 (file)
@@ -522,14 +522,15 @@ find_hard_regno_for_1 (int regno, int *cost, int try_only_hard_regno,
               r2 != NULL;
               r2 = r2->start_next)
            {
-             if (r2->regno >= lra_constraint_new_regno_start
+             if (live_pseudos_reg_renumber[r2->regno] < 0
+                 && r2->regno >= lra_constraint_new_regno_start
                  && lra_reg_info[r2->regno].preferred_hard_regno1 >= 0
-                 && live_pseudos_reg_renumber[r2->regno] < 0
                  && rclass_intersect_p[regno_allocno_class_array[r2->regno]])
                sparseset_set_bit (conflict_reload_and_inheritance_pseudos,
                                   r2->regno);
-             if (live_pseudos_reg_renumber[r2->regno] >= 0
-                 && rclass_intersect_p[regno_allocno_class_array[r2->regno]])
+             else if (live_pseudos_reg_renumber[r2->regno] >= 0
+                      && rclass_intersect_p
+                           [regno_allocno_class_array[r2->regno]])
                sparseset_set_bit (live_range_hard_reg_pseudos, r2->regno);
            }
        }