[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2023-10-11 Thread bergner at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #9 from Peter Bergner  ---
(In reply to CVS Commits from comment #8)
> The master branch has been updated by Vladimir Makarov
> :
> 
> https://gcc.gnu.org/g:51ca05031959d3accffe873e87d4bc4fbd22e9e9
> 
> commit r12-3881-g51ca05031959d3accffe873e87d4bc4fbd22e9e9
> Author: Vladimir N. Makarov 
> 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  
> 
> 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.

Can we mark this as RESOLVED / FIXED now?

[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2021-09-24 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #8 from CVS Commits  ---
The master branch has been updated by Vladimir Makarov :

https://gcc.gnu.org/g:51ca05031959d3accffe873e87d4bc4fbd22e9e9

commit r12-3881-g51ca05031959d3accffe873e87d4bc4fbd22e9e9
Author: Vladimir N. Makarov 
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  

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.

[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2021-09-22 Thread vmakarov at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #7 from Vladimir Makarov  ---
I've been thinking about ways to fix this problem but only come to the
following patch.  The patch results in working mostly the same for 64-bit
targets and different for 32-bit targets. In any case the profitability is only
an estimation so I think the patch is ok.  Avoiding 4 stage bootstrap is more
important than a bit slower RA on 32-bit targets (which is questionable) on few
border cases.

I am going to commit the patch this Friday.

--- 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);

@@ -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

[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2021-09-01 Thread vmakarov at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #6 from Vladimir Makarov  ---
(In reply to David Edelsohn from comment #5)
> Vlad privately commented: "I suspect order of processing conflicts might
> depend on their representation."
> 
> The two representations may produce different results and the heuristics to
> choose the representation depend on the pointer size.

Yes.

I'll be working on the PR.  It is an interesting type of problem.  I think GCC
output should be the same independently what type of compiler (64-bit or 32-bit
one) we use for building GCC.

[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2021-09-01 Thread dje at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #5 from David Edelsohn  ---
Vlad privately commented: "I suspect order of processing conflicts might depend
on their representation."

The two representations may produce different results and the heuristics to
choose the representation depend on the pointer size.

[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2021-09-01 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #4 from Richard Biener  ---
btw, using bootstrap4 might be another solution.

[Bug rtl-optimization/102147] IRA dependent on 32-bit vs 64-bit pointer size

2021-09-01 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102147

--- Comment #3 from Richard Biener  ---
Well, ira_conflict_vector_profitable_p is dependent on sizeof (ira_object_t)
but it's a decision about the representation of conflicts.  The question is now
whether at any point processing of the two representations can yield different
answers.  That might happen if we somewhere iterate over conflicts?

I suppose the simplest fix for the actual bootstrap issue is to make
ira_conflict_vector_profitable_p independent of sizeof (ira_object_t)
and sizeof (IRA_INT_TYPE) and simplify

  return (2 * sizeof (ira_object_t) * (num + 1)
  < 3 * nw * sizeof (IRA_INT_TYPE));

for example to

  return (2 * (num + 1) < 3 * nw);

(note 'nw' is also rounded up to IRA_INT_BITS).