On Tue, Jan 4, 2022 at 9:59 AM Gary Oblock <g...@amperecomputing.com> wrote:
>
> Richard,
>
> Well during my exploration of pretty printing I spent
> a bunch of time looking at mem refs, hence the question.
>
> I understand GIMPLE is not an AST. I worked on a
> in house compiler someplace where the only IR was
> an AST and it was a really horrible IR so I'm glad GIMPLE
> isn't an AST. But the tree expressions seem to be chunks
> of AST (with some other stuff thrown in that could be thought of
> as node attributes.) Am I wrong to think of them that way?

trees are dual-purpose.  It simply shows that GCC evolved over
its lifetime ;)

Richard.

> Thanks,
>
> Gary
>
>
> ________________________________
> From: Richard Biener <richard.guent...@gmail.com>
> Sent: Monday, January 3, 2022 11:28 PM
> To: Gary Oblock <g...@amperecomputing.com>
> Cc: gcc@gcc.gnu.org <gcc@gcc.gnu.org>
> Subject: Re: Why do these two trees print differently
>
> [EXTERNAL EMAIL NOTICE: This email originated from an external sender. Please 
> be mindful of safe email handling and proprietary information protection 
> practices.]
>
>
> On Mon, Jan 3, 2022 at 9:16 PM Gary Oblock <g...@amperecomputing.com> wrote:
> >
> > Richard,
> >
> > I was able figure it out by looking for "MEM" is
> > tree-pretty-print.c. There is the condition included
> > at the end of the email (mostly to provoke a chuckle)
> > necessary for the "p->f" format. If it's not true then
> > the MEM form is emitted.
>
> Yes, there's some loss of information so we don't
> "pretty" print the MEM.
>
> >
> > What is most interesting from this whole exercise
> > the question of why am I seeing offsets in
> > the GIMPLE form? I'm seeing offsets where
> > the symbolic form using field seems to make
> > more sense. I'm also seeing accesses with
> > offsets that are multiples of the structure size.
> > That kind of idiom seems more appropriate at the
> > RTL level.
>
> That seems to be an unrelated question?  Note that GIMPLE
> is much closer to RTL than you think - GIMPLE is _not_ an AST.
> You see offsets whenever symbolic (COMPONENT_REF I suppose)
> is eventually not semantically correct.
>
> Richard.
>
> >
> > Thanks,
> >
> > Gary
> >
> > TREE_CODE (node) == MEM_REF
> >   && integer_zerop (TREE_OPERAND (node, 1))
> >   /* Dump the types of INTEGER_CSTs explicitly, for we can't
> >      infer them and MEM_ATTR caching will share MEM_REFs
> >      with differently-typed op0s.  */
> >   && TREE_CODE (TREE_OPERAND (node, 0)) != INTEGER_CST
> >   /* Released SSA_NAMES have no TREE_TYPE.  */
> >   && TREE_TYPE (TREE_OPERAND (node, 0)) != NULL_TREE
> >   /* Same pointer types, but ignoring POINTER_TYPE vs.
> >      REFERENCE_TYPE.  */
> >   && (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 0)))
> >       == TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1))))
> >   && (TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 0)))
> >       == TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1))))
> >   && (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0)))
> >       == TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1))))
> >   /* Same value types ignoring qualifiers.  */
> >   && (TYPE_MAIN_VARIANT (TREE_TYPE (node))
> >       == TYPE_MAIN_VARIANT
> >       (TREE_TYPE (TREE_TYPE (TREE_OPERAND (node, 1)))))
> >   && (!(flags & TDF_ALIAS)
> >       || MR_DEPENDENCE_CLIQUE (node) == 0))
> >
> > ________________________________
> > From: Richard Biener <richard.guent...@gmail.com>
> > Sent: Monday, January 3, 2022 5:49 AM
> > To: Gary Oblock <g...@amperecomputing.com>
> > Cc: gcc@gcc.gnu.org <gcc@gcc.gnu.org>
> > Subject: Re: Why do these two trees print differently
> >
> > [EXTERNAL EMAIL NOTICE: This email originated from an external sender. 
> > Please be mindful of safe email handling and proprietary information 
> > protection practices.]
> >
> >
> > On Wed, Dec 15, 2021 at 7:10 AM Gary Oblock via Gcc <gcc@gcc.gnu.org> wrote:
> > >
> > > This is one of those things that has always puzzled
> > > me so I thought I break down and finally ask.
> > >
> > > There are two ways a memory reference (tree) prints:
> > >
> > > MEM[(struct arc_t *)_684].flow
> > >
> > > and
> > >
> > > _684->flow
> > >
> > > Poking under the hood of them, the tree codes and
> > > operands are identical so what am I missing?
> >
> > Try dumping with -gimple, that should show you the difference.
> >
> > >
> > > Thanks,
> > >
> > > Gary
> > >
> > >
> > > CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, 
> > > is for the sole use of the intended recipient(s) and contains information 
> > > that is confidential and proprietary to Ampere Computing or its 
> > > subsidiaries. It is to be used solely for the purpose of furthering the 
> > > parties' business relationship. Any unauthorized review, copying, or 
> > > distribution of this email (or any attachments thereto) is strictly 
> > > prohibited. If you are not the intended recipient, please contact the 
> > > sender immediately and permanently delete the original and any copies of 
> > > this email and any attachments thereto.

Reply via email to