This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: More on gimplify:create_tmp_var


    No, I don't.  Why?  Because get_inner_reference is not type safe.

I don't follow.  The issue isn't type safety.

For access efficiency, we want to nest ARRAY_REF, COMPONENT_REF, and
the other references.  These are all handled in get_inner_reference as
a single access, by merging all the offsets.  So *anything* that it can
handle should be gone "inside" by this routine.

    I think you should be generating <INDIRECT_REF <NOP_EXPR <VAR>>>
    instead of using VIEW_CONVERT_EXPR after the fact.

That seems *far* worse.  Because then the INDIRECT_REF will *have* to
make a temporary and that temporary is often variable-sized.  It seems
we'd have lots of copies.

    Except that as a short-term hack you'll have to use a non-aliasing
    type variant of the original type for the INDIRECT_REF.

I don't follow.

The point is that a very deep nest of COMPONENT_REF, VIEW_CONVERT_EXPR,
and ARRAY_REF is quite common in Ada.  We don't need to make a temporary
(or want to) of any of the aggregates in between.  We also don't want to
take their address since they are non-addressable.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]