Hi,
On Thu, 27 Aug 2020 at 13:07, Richard Biener <rguent...@suse.de> wrote: > > The following streamlines TARGET_MEM_REF dumping building > on what we do for MEM_REF and thus dumping things like > access type, TBAA type and base/clique. I've changed it > to do semantic dumping aka base + offset + step * index > rather than the odd base: A, step: way. > > Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. > > 2020-08-27 Richard Biener <rguent...@suse.de> > > * tree-pretty-print.c (dump_mem_ref): Handle TARGET_MEM_REFs. > (dump_generic_node): Use dump_mem_ref also for TARGET_MEM_REF. > > * gcc.dg/tree-ssa/loop-19.c: Adjust. > * gcc.dg/tree-ssa/loop-2.c: Likewise. > * gcc.dg/tree-ssa/loop-3.c: Likewise. This introduced 2 regressions on arm (for instance --target arm-none-linux-gnueabihf --with-mode arm --with-cpu cortex-a9 --with-fpu neon-fp16): FAIL: gcc.dg/tree-ssa/scev-3.c scan-tree-dump-times ivopts "&a" 1 gcc.dg/tree-ssa/scev-3.c: pattern found 2 times FAIL: gcc.dg/tree-ssa/scev-5.c scan-tree-dump-times ivopts "&a" 1 gcc.dg/tree-ssa/scev-5.c: pattern found 2 times Christophe > --- > gcc/testsuite/gcc.dg/tree-ssa/loop-19.c | 4 +- > gcc/testsuite/gcc.dg/tree-ssa/loop-2.c | 1 - > gcc/testsuite/gcc.dg/tree-ssa/loop-3.c | 3 +- > gcc/tree-pretty-print.c | 89 ++++++++----------------- > 4 files changed, 30 insertions(+), 67 deletions(-) > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c > b/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c > index af7a3daddec..0c73111c1ee 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c > @@ -22,6 +22,6 @@ void tuned_STREAM_Copy() > However, due to a bug in jump threading, we end up peeling one iteration > from > the loop, which creates an additional occurrence. */ > > -/* { dg-final { scan-tree-dump-times "MEM.(base: &|symbol: )a," 2 > "optimized" } } */ > -/* { dg-final { scan-tree-dump-times "MEM.(base: &|symbol: )c," 2 > "optimized" } } */ > +/* { dg-final { scan-tree-dump-times "MEM\[^;\]*&a" 1 "optimized" } } */ > +/* { dg-final { scan-tree-dump-times "MEM\[^;\]*&c" 1 "optimized" } } */ > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-2.c > b/gcc/testsuite/gcc.dg/tree-ssa/loop-2.c > index bda25167353..e58561a6650 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/loop-2.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-2.c > @@ -27,7 +27,6 @@ void xxx(void) > > /* { dg-final { scan-tree-dump-times " \\* \[^\\n\\r\]*=" 0 "optimized" } } > */ > /* { dg-final { scan-tree-dump-times "\[^\\n\\r\]*= \\* " 0 "optimized" } } > */ > -/* { dg-final { scan-tree-dump-times "MEM\\\[base" 1 "optimized" } } */ > > /* 17 * iter should be strength reduced. */ > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-3.c > b/gcc/testsuite/gcc.dg/tree-ssa/loop-3.c > index d3b26b7ad19..74491f80e49 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/loop-3.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-3.c > @@ -20,8 +20,7 @@ void xxx(void) > /* Access to arr_base[iter].y should not be strength reduced, since > we have a memory mode including multiplication by 4. */ > > -/* { dg-final { scan-tree-dump-times "MEM" 1 "optimized" } } */ > -/* { dg-final { scan-tree-dump-times "step:" 1 "optimized" } } */ > +/* { dg-final { scan-tree-dump-times "MEM\[^;\]* \* 4" 1 "optimized" } } */ > > /* And original induction variable should be preserved. */ > > diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c > index 655061c174d..075a3fca766 100644 > --- a/gcc/tree-pretty-print.c > +++ b/gcc/tree-pretty-print.c > @@ -1441,7 +1441,7 @@ dump_omp_atomic_memory_order (pretty_printer *pp, enum > omp_memory_order mo) > static void > dump_mem_ref (pretty_printer *pp, tree node, int spc, dump_flags_t flags) > { > - if (flags & TDF_GIMPLE) > + if (TREE_CODE (node) == MEM_REF && (flags & TDF_GIMPLE)) > { > pp_string (pp, "__MEM <"); > dump_generic_node (pp, TREE_TYPE (node), > @@ -1472,7 +1472,8 @@ dump_mem_ref (pretty_printer *pp, tree node, int spc, > dump_flags_t flags) > } > pp_right_paren (pp); > } > - else if (integer_zerop (TREE_OPERAND (node, 1)) > + else if (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. */ > @@ -1541,12 +1542,33 @@ dump_mem_ref (pretty_printer *pp, tree node, int spc, > dump_flags_t flags) > dump_generic_node (pp, op1type, spc, flags | TDF_SLIM, false); > pp_right_paren (pp); > dump_generic_node (pp, op0, spc, flags, false); > - if (!integer_zerop (op1)) > - if (!integer_zerop (TREE_OPERAND (node, 1))) > + if (TREE_CODE (node) == MEM_REF > + && !integer_zerop (op1)) > { > pp_string (pp, " + "); > dump_generic_node (pp, op1, spc, flags, false); > } > + if (TREE_CODE (node) == TARGET_MEM_REF) > + { > + tree tmp = TMR_INDEX2 (node); > + if (tmp) > + { > + pp_string (pp, " + "); > + dump_generic_node (pp, tmp, spc, flags, false); > + } > + tmp = TMR_INDEX (node); > + if (tmp) > + { > + pp_string (pp, " + "); > + dump_generic_node (pp, tmp, spc, flags, false); > + tmp = TMR_STEP (node); > + pp_string (pp, " * "); > + if (tmp) > + dump_generic_node (pp, tmp, spc, flags, false); > + else > + pp_string (pp, "1"); > + } > + } > if ((flags & TDF_ALIAS) > && MR_DEPENDENCE_CLIQUE (node) != 0) > { > @@ -1854,65 +1876,8 @@ dump_generic_node (pretty_printer *pp, tree node, int > spc, dump_flags_t flags, > break; > > case MEM_REF: > - dump_mem_ref (pp, node, spc, flags); > - break; > - > case TARGET_MEM_REF: > - { > - const char *sep = ""; > - tree tmp; > - > - pp_string (pp, "MEM["); > - > - if (TREE_CODE (TMR_BASE (node)) == ADDR_EXPR) > - { > - pp_string (pp, sep); > - sep = ", "; > - pp_string (pp, "symbol: "); > - dump_generic_node (pp, TREE_OPERAND (TMR_BASE (node), 0), > - spc, flags, false); > - } > - else > - { > - pp_string (pp, sep); > - sep = ", "; > - pp_string (pp, "base: "); > - dump_generic_node (pp, TMR_BASE (node), spc, flags, false); > - } > - tmp = TMR_INDEX2 (node); > - if (tmp) > - { > - pp_string (pp, sep); > - sep = ", "; > - pp_string (pp, "base: "); > - dump_generic_node (pp, tmp, spc, flags, false); > - } > - tmp = TMR_INDEX (node); > - if (tmp) > - { > - pp_string (pp, sep); > - sep = ", "; > - pp_string (pp, "index: "); > - dump_generic_node (pp, tmp, spc, flags, false); > - } > - tmp = TMR_STEP (node); > - if (tmp) > - { > - pp_string (pp, sep); > - sep = ", "; > - pp_string (pp, "step: "); > - dump_generic_node (pp, tmp, spc, flags, false); > - } > - tmp = TMR_OFFSET (node); > - if (tmp) > - { > - pp_string (pp, sep); > - sep = ", "; > - pp_string (pp, "offset: "); > - dump_generic_node (pp, tmp, spc, flags, false); > - } > - pp_right_bracket (pp); > - } > + dump_mem_ref (pp, node, spc, flags); > break; > > case ARRAY_TYPE: > -- > 2.26.2