This is the mail archive of the gcc-patches@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: [PATCH, tree-optimization]: Fix PR tree-optimization/33920, [4.3 Regression] Segfault in combine_blocks/tree-if-conv.c


On 10/27/07, Uros Bizjak <ubizjak@gmail.com> wrote:

> When SSA diamond degenerates into:
>
>     11
>     | \
>     |  \
>     |   12
>     |  /
>     | /
>     13
>
> then bb 11 is not required to have a condition predicate set in its
> bb->aux field.

This is not quite what is happening.  The diamond is not degenerating,
the problem is that the predicate is in block 10, and the presence of
the user label in block 11 prevents us from merging the two blocks,
that's why block 11 needs no conditional predicate.

  V653 = ((char *) V654->v.v_self)[V648];
  V659 = (object) V654 + V653;
T1261:
  V658 =
    (object)
     V659 ? (object) & Ct_body : (object) & Cnil_body;
  if (V658 == (object) & Cnil_body)
    goto T1249;
  goto T1224;

What should be happening here is for block 11 to inherit the
conditional saved in block 10.  Your patch is only masking the bug.


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