Hi Prathamesh,
Am 12.07.24 um 15:31 schrieb Prathamesh Kulkarni:
It seems that component references are not currently handled even for static
size arrays ?
For eg:
subroutine test_dt (dt, y)
implicit none
real :: y (10, 20, 30)
type t
real :: x(10, 20, 30)
end type t
type(t) :: dt
y = 0
dt% x = 0
end subroutine
With trunk, it generates memset for 'y' but not for dt%x.
That happens because copyable_array_p returns false for dt%x,
because expr->ref->next is non NULL:
/* First check it's an array. */
if (expr->rank < 1 || !expr->ref || expr->ref->next)
return false;
and gfc_full_array_ref_p(expr) bails out if expr->ref->type != REF_ARRAY.
Indeed that check (as is) prevents the use of component refs.
(I just tried to modify the this part to cycle thru the refs,
but then I get regressions in the testsuite for some of the
coarray tests. Furthermore, gfc_trans_zero_assign would
need further changes to handle even the constant shapes
from above.)
Looking thru git history, it seems both the checks were added in 18eaa2c0cd20
to fix PR33370.
(Even after removing these checks, the previous patch bails out from
gfc_trans_zero_assign because
GFC_DESCRIPTOR_TYPE_P (type) returns false for component ref and ends up
returning NULL_TREE)
I am working on extending the patch to handle component refs for statically
sized as well as allocatable arrays.
Since it looks like a bigger change and an extension to current functionality,
will it be OK to commit the previous patch as-is (if it looks correct)
and address component refs in follow up one ?
I agree that it is reasonable to defer the handling of arrays as
components of derived types, and recommend to do the following:
- replace "&& gfc_is_simply_contiguous (expr, true, false))" in your
last patch by "&& gfc_is_simply_contiguous (expr, false, false))",
as that would also allow to treat
z(:,::1,:) = 0
as contiguous if z is allocatable or a contiguous pointer.
- open a PR in bugzilla to track the missed-optimization for
the cases we discussed here, and link the discussion in the ML.
Your patch then will be OK for mainline.
Thanks,
Harald
Thanks,
Prathamesh
Thanks,
Harald
Bootstrapped+tested on aarch64-linux-gnu.
Does the attached patch look OK ?
Signed-off-by: Prathamesh Kulkarni <prathame...@nvidia.com>
Thanks,
Prathamesh
Thanks,
Harald
Signed-off-by: Prathamesh Kulkarni <prathame...@nvidia.com>
Thanks,
Prathamesh