[Bug c/77750] [7 Regression] gcc build not working with -O0
louis.krupp at zoho dot com
gcc-bugzilla@gcc.gnu.org
Tue Sep 27 07:52:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77750
--- Comment #3 from louis.krupp at zoho dot com ---
I agree. But in the interests of reporting the bug and proposing a patch as
soon as possible, I decided to minimize the risk of unintended consequences by
keeping things as simple as I could.
If you like, I could follow your suggestions and clean this up and check it in,
but I wouldn't be able to do it tonight. I believe I'm an hour ahead of you,
and I've learned that when I try to do things in a hurry, I usually regret it.
Louis
---- On Tue, 27 Sep 2016 00:38:29 -0700 pinskia at gcc dot gnu.org
<gcc-bugzilla@gcc.gnu.org> wrote ----
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77750
>
> --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
> Comment on attachment 39694
> --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39694
> Possible patch (correctly formatted magic "fall through" comments)
>
> >Index: gcc/combine.c
> >===================================================================
> >--- gcc/combine.c (revision 240520)
> >+++ gcc/combine.c (working copy)
> >@@ -11370,6 +11370,8 @@ simplify_compare_const (enum rtx_code code, machin
> > else
> > break;
> >
> >+ /* fall through. */
> >+
>
> Yes this is correct but maybe it is better to rewrite this code slightly:
> if (const_op <= 0)
> break;
>
> const_op -= 1;
> code = LE;
> /* fall through. */
>
>
> > case LE:
> > /* <= C is equivalent to < (C + 1); we do this for C < 0 */
> > if (const_op < 0)
> >@@ -11399,6 +11401,8 @@ simplify_compare_const (enum rtx_code code, machin
> > else
> > break;
> >
> >+ /* fall through. */
>
> Likewise.
>
> >+
> > case GT:
> > /* > C is equivalent to >= (C + 1); we do this for C < 0. */
> > if (const_op < 0)
> >@@ -11927,7 +11931,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0
> > else
> > break;
> >
> >- /* ... fall through ... */
> >+ /* fall through. */
>
> Likewise.
>
> >
> > case ZERO_EXTEND:
> > mode = GET_MODE (XEXP (op0, 0));
> >@@ -12339,7 +12343,8 @@ simplify_comparison (enum rtx_code code, rtx *pop0
> > continue;
> > }
> >
> >- /* ... fall through ... */
> >+ /* fall through. */
>
> Do something similar:
> /* If the inner mode is narrower and we are extracting the low
part,
> we can treat the SUBREG as if it were a ZERO_EXTEND. */
> if (!subreg_lowpart_p (op0)
> &|| GET_MODE_PRECISION (GET_MODE (SUBREG_REG (op0))) >=
> mode_width)
> break;
>
> /* fall through */
>
>
> >+
> > case LSHIFTRT:
> > /* If we have (compare (xshiftrt FOO N) (const_int C)) and
> > the low order N bits of FOO are known to be zero, we can do this
> >Index: gcc/fold-const.c
> >===================================================================
> >--- gcc/fold-const.c (revision 240520)
> >+++ gcc/fold-const.c (working copy)
> >@@ -6284,7 +6284,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code c
> > return omit_one_operand (type, integer_zero_node, op0);
> > }
> >
> >- /* ... fall through ... */
> >+ /* fall through. */
>
> This one is obvious.
>
> >
> > case TRUNC_DIV_EXPR: case CEIL_DIV_EXPR: case FLOOR_DIV_EXPR:
> > case ROUND_DIV_EXPR: case EXACT_DIV_EXPR:
>
> --
> You are receiving this mail because:
> You reported the bug.
More information about the Gcc-bugs
mailing list