[pushed] IRA: Make profitability calculation of RA conflict presentations independent of host compiler type sizes of RA conflict presentations independent of host compiler type sizes [PR102147]

Message ID 32f7c5a4-cb26-0810-b96c-1fa251a6fba0@redhat.com
State Committed
Headers
Series [pushed] IRA: Make profitability calculation of RA conflict presentations independent of host compiler type sizes of RA conflict presentations independent of host compiler type sizes [PR102147] |

Commit Message

Vladimir Makarov Sept. 24, 2021, 3:27 p.m. UTC
  The following patch solves

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

The patch was successfully bootstrapped and tested on x86-64.


commit ec4c30b64942e615b4bb4b9761cd3b2635158608 (HEAD -> master)
Author: Vladimir N. Makarov <vmakarov@redhat.com>
Date:   Fri Sep 24 10:06:45 2021 -0400

     Make profitability calculation of RA conflict presentations 
independent of host compiler type sizes. [PR102147]

     gcc/ChangeLog:

     2021-09-24  Vladimir Makarov  <vmakarov@redhat.com>

             PR rtl-optimization/102147
             * ira-build.c (ira_conflict_vector_profitable_p): Make
             profitability calculation independent of host compiler 
pointer and
             IRA_INT_BITS sizes.


@@ -638,9 +638,14 @@ ira_conflict_vector_profitable_p (ira_object_t obj, 
int num)
         in allocation.  */
      return false;

-  nw = (max - min + IRA_INT_BITS) / IRA_INT_BITS;
-  return (2 * sizeof (ira_object_t) * (num + 1)
-         < 3 * nw * sizeof (IRA_INT_TYPE));
+  nbytes = (max - min) / 8 + 1;
+  STATIC_ASSERT (sizeof (ira_object_t) <= 8);
+  /* Don't use sizeof (ira_object_t), use constant 8.  Size of 
ira_object_t (a
+     pointer) is different on 32-bit and 64-bit targets.  Usage sizeof
+     (ira_object_t) can result in different code generation by GCC 
built as 32-
+     and 64-bit program.  In any case the profitability is just an 
estimation
+     and border cases are rare.  */
+  return (2 * 8 /* sizeof (ira_object_t) */ * (num + 1) < 3 * nbytes);
  }

  /* Allocates and initialize the conflict vector of OBJ for NUM
  

Patch

diff --git a/gcc/ira-build.c b/gcc/ira-build.c
index 42120656366..2a30efc4f2f 100644
--- a/gcc/ira-build.c
+++ b/gcc/ira-build.c
@@ -629,7 +629,7 @@  ior_hard_reg_conflicts (ira_allocno_t a, 
const_hard_reg_set set)
  bool
  ira_conflict_vector_profitable_p (ira_object_t obj, int num)
  {
-  int nw;
+  int nbytes;
    int max = OBJECT_MAX (obj);
    int min = OBJECT_MIN (obj);