summaryrefslogtreecommitdiff
path: root/legacy/gcc6/lra-pentium.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2022-07-02 18:51:15 -0500
committerZach van Rijn <me@zv.io>2022-10-21 18:34:01 -0500
commit57b3454125ff268fb900c0d60b267535857bcd93 (patch)
treefb977ce1b0bdb0b6cbd6454809a86d1705277c8e /legacy/gcc6/lra-pentium.patch
parent04142312762064baaf4765e13b479d9e03cfad47 (diff)
downloadpackages-57b3454125ff268fb900c0d60b267535857bcd93.tar.gz
packages-57b3454125ff268fb900c0d60b267535857bcd93.tar.bz2
packages-57b3454125ff268fb900c0d60b267535857bcd93.tar.xz
packages-57b3454125ff268fb900c0d60b267535857bcd93.zip
legacy/gcc6: add buildable patches
Diffstat (limited to 'legacy/gcc6/lra-pentium.patch')
-rw-r--r--legacy/gcc6/lra-pentium.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/legacy/gcc6/lra-pentium.patch b/legacy/gcc6/lra-pentium.patch
new file mode 100644
index 000000000..e876bcc39
--- /dev/null
+++ b/legacy/gcc6/lra-pentium.patch
@@ -0,0 +1,48 @@
+--- trunk/gcc/lra-assigns.c 2017/03/10 20:53:18 246058
++++ trunk/gcc/lra-assigns.c 2017/03/10 21:17:13 246059
+@@ -889,6 +889,30 @@
+ live_pseudos_reg_renumber[regno] = hard_regno;
+ }
+
++/* Return true iff there is a reason why pseudo SPILL_REGNO should not
++ be spilled. */
++static bool
++must_not_spill_p (unsigned spill_regno)
++{
++ if ((pic_offset_table_rtx != NULL
++ && spill_regno == REGNO (pic_offset_table_rtx))
++ || ((int) spill_regno >= lra_constraint_new_regno_start
++ && ! bitmap_bit_p (&lra_inheritance_pseudos, spill_regno)
++ && ! bitmap_bit_p (&lra_split_regs, spill_regno)
++ && ! bitmap_bit_p (&lra_subreg_reload_pseudos, spill_regno)
++ && ! bitmap_bit_p (&lra_optional_reload_pseudos, spill_regno)))
++ return true;
++ /* A reload pseudo that requires a singleton register class should
++ not be spilled.
++ FIXME: this mitigates the issue on certain i386 patterns, but
++ does not solve the general case where existing reloads fully
++ cover a limited register class. */
++ if (!bitmap_bit_p (&non_reload_pseudos, spill_regno)
++ && reg_class_size [reg_preferred_class (spill_regno)] == 1)
++ return true;
++ return false;
++}
++
+ /* Array used for sorting reload pseudos for subsequent allocation
+ after spilling some pseudo. */
+ static int *sorted_reload_pseudos;
+@@ -960,13 +984,7 @@
+ /* Spill pseudos. */
+ static_p = false;
+ EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi)
+- if ((pic_offset_table_rtx != NULL
+- && spill_regno == REGNO (pic_offset_table_rtx))
+- || ((int) spill_regno >= lra_constraint_new_regno_start
+- && ! bitmap_bit_p (&lra_inheritance_pseudos, spill_regno)
+- && ! bitmap_bit_p (&lra_split_regs, spill_regno)
+- && ! bitmap_bit_p (&lra_subreg_reload_pseudos, spill_regno)
+- && ! bitmap_bit_p (&lra_optional_reload_pseudos, spill_regno)))
++ if (must_not_spill_p (spill_regno))
+ goto fail;
+ else if (non_spilled_static_chain_regno_p (spill_regno))
+ static_p = true;