re PR middle-end/37014 (internal compiler error: in expand_expr_real_1, at expr.c:8760)
PR middle-end/37014 * expr.c (expand_expr_real_1): Handle TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR. * dojump.c (do_jump): Likewise. * gcc.c-torture/compile/20080812-1.c: New test. From-SVN: r139029
This commit is contained in:
parent
4c29307df9
commit
c028590539
5 changed files with 36 additions and 6 deletions
|
@ -1,5 +1,10 @@
|
|||
2008-08-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/37014
|
||||
* expr.c (expand_expr_real_1): Handle TRUTH_ANDIF_EXPR
|
||||
and TRUTH_ORIF_EXPR.
|
||||
* dojump.c (do_jump): Likewise.
|
||||
|
||||
PR tree-optimization/37084
|
||||
* tree-inline.c (copy_bb): Call gimple_regimplify_operands
|
||||
if id->regimplify, don't assume stmt is a cast assignment.
|
||||
|
|
|
@ -304,8 +304,6 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
break;
|
||||
}
|
||||
|
||||
case TRUTH_ANDIF_EXPR:
|
||||
case TRUTH_ORIF_EXPR:
|
||||
case COMPOUND_EXPR:
|
||||
/* Lowered by gimplify.c. */
|
||||
gcc_unreachable ();
|
||||
|
@ -515,6 +513,7 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
if (BRANCH_COST >= 4 || TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 1)))
|
||||
goto normal;
|
||||
|
||||
case TRUTH_ANDIF_EXPR:
|
||||
if (if_false_label == NULL_RTX)
|
||||
{
|
||||
drop_through_label = gen_label_rtx ();
|
||||
|
@ -535,6 +534,7 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
|
|||
if (BRANCH_COST >= 4 || TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 1)))
|
||||
goto normal;
|
||||
|
||||
case TRUTH_ORIF_EXPR:
|
||||
if (if_true_label == NULL_RTX)
|
||||
{
|
||||
drop_through_label = gen_label_rtx ();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Convert tree expression to rtl instructions, for GNU compiler.
|
||||
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -8970,7 +8970,10 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
|
|||
/* If no set-flag instruction, must generate a conditional store
|
||||
into a temporary variable. Drop through and handle this
|
||||
like && and ||. */
|
||||
|
||||
/* Although TRUTH_{AND,OR}IF_EXPR aren't present in GIMPLE, they
|
||||
are occassionally created by folding during expansion. */
|
||||
case TRUTH_ANDIF_EXPR:
|
||||
case TRUTH_ORIF_EXPR:
|
||||
if (! ignore
|
||||
&& (target == 0
|
||||
|| modifier == EXPAND_STACK_PARM
|
||||
|
@ -9170,8 +9173,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
|
|||
case POSTDECREMENT_EXPR:
|
||||
case LOOP_EXPR:
|
||||
case EXIT_EXPR:
|
||||
case TRUTH_ANDIF_EXPR:
|
||||
case TRUTH_ORIF_EXPR:
|
||||
/* Lowered by gimplify.c. */
|
||||
gcc_unreachable ();
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2008-08-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/37014
|
||||
* gcc.c-torture/compile/20080812-1.c: New test.
|
||||
|
||||
PR tree-optimization/37084
|
||||
* g++.dg/tree-ssa/pr37084.C: New test.
|
||||
|
||||
|
|
21
gcc/testsuite/gcc.c-torture/compile/20080812-1.c
Normal file
21
gcc/testsuite/gcc.c-torture/compile/20080812-1.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* PR middle-end/37014 */
|
||||
|
||||
void bar (signed char *);
|
||||
|
||||
void
|
||||
foo (int x, int y)
|
||||
{
|
||||
int i;
|
||||
signed char a[123], b[123], c;
|
||||
for (i = 0; i < 123; i++)
|
||||
{
|
||||
int e = y - x;
|
||||
int d = e < 0 ? -e : e;
|
||||
c = d < 75;
|
||||
a[y] = c;
|
||||
b[y] = c;
|
||||
y--;
|
||||
}
|
||||
bar (b);
|
||||
bar (a);
|
||||
}
|
Loading…
Add table
Reference in a new issue