Le 01/08/2024 à 12:30, Jakub Jelinek a écrit :
On Thu, Aug 01, 2024 at 12:12:38PM +0200, Mikael Morin wrote:
Yes, I've always wondered how much of a win these integer_zerop checks were,
probably not that much. In the cases we know they are useless, let's remove
them (patch pre-approved for gfc_get_array_descr_info).
Anyway, the following patch just does the minimal change,
bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Looks good, but as said removing the check seems preferable.
The following patch does that.
I've left the
t = base_decl;
if (!integer_zerop (data_off))
t = fold_build_pointer_plus (t, data_off);
earlier in, because at least in the current ABI data_off is always 0 and
integer_zerop is less expensive than getting through match.pd to find out
that POINTER_PLUS_EXPR something 0 is something, there are no other
integer_zerop calls in that file.
OK (again).
Thanks for the patch.
2024-08-01 Jakub Jelinek <ja...@redhat.com>
* trans-types.cc (gfc_get_array_descr_info): Don't test if
!integer_zerop (dtype_off), use fold_build_pointer_plus
unconditionally.
--- gcc/fortran/trans-types.cc.jj 2024-08-01 10:25:38.674615970 +0200
+++ gcc/fortran/trans-types.cc 2024-08-01 12:21:48.611602807 +0200
@@ -3599,14 +3599,11 @@ gfc_get_array_descr_info (const_tree typ
{
rank = 1;
info->ndimensions = 1;
- t = base_decl;
- if (!integer_zerop (dtype_off))
- t = fold_build_pointer_plus (t, dtype_off);
+ t = fold_build_pointer_plus (base_decl, dtype_off);
dtype = TYPE_MAIN_VARIANT (get_dtype_type_node ());
field = gfc_advance_chain (TYPE_FIELDS (dtype), GFC_DTYPE_RANK);
rank_off = byte_position (field);
- if (!integer_zerop (dtype_off))
- t = fold_build_pointer_plus (t, rank_off);
+ t = fold_build_pointer_plus (t, rank_off);
t = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (field)), t);
t = build1 (INDIRECT_REF, TREE_TYPE (field), t);
Jakub