cplxlower: Avoid a transform when looking at a default definition
authorMartin Jambor <mjambor@suse.cz>
Mon, 19 Oct 2020 17:21:10 +0000 (19:21 +0200)
committerMartin Jambor <mjambor@suse.cz>
Mon, 19 Oct 2020 17:21:10 +0000 (19:21 +0200)
commit619f91eaa8c8a50f1f9d3e7b96ee837037f0e806
tree8c28e2be81ab94d7fd0b751250a9c43d4559fc64
parentfc77484c4a4feb308c64371233cb65b280333953
cplxlower: Avoid a transform when looking at a default definition

In PR 97456, IPA-SRA triggers a bug in tree-complex.c where it
converts:

 <bb 2>
   a$_M_value_21 = COMPLEX_EXPR <ISRA.18_10(D), ISRA.18_10(D)>;

(where ISRA.18 is IPA-SRA created PARM_DECL with DECL_IGNORED_P set,
which is why it only happens with IPA-SRA) into:

  <bb 2>
    a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_10(D), a$_M_value$real_10(D)>;

i.e. it replaces two uses of the parameter default-def with two
uninitialized default-defs of a new variable - all in hope to produce
code with better debug info.

This patch fixes it by avoiding the transform when the SSA_NAME to be
replaced is a default definition.

gcc/ChangeLog:

2020-10-19  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/97456
* tree-complex.c (set_component_ssa_name): Do not replace ignored decl
default definitions with new component vars.  Reorder if conditions.

gcc/testsuite/ChangeLog:

2020-10-19  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/97456
* gcc.dg/tree-ssa/pr97456.c: New test.
gcc/testsuite/gcc.dg/tree-ssa/pr97456.c [new file with mode: 0644]
gcc/tree-complex.c