Commit 7ece48b1 by Jakub Jelinek Committed by Jakub Jelinek

re PR debug/43229 (ice expand_debug_expr, at cfgexpand.c:2957)

	PR debug/43229
	* cfgexpand.c (expand_debug_expr): Handle DOT_PROD_EXPR,
	WIDEN_MULT_EXPR and WIDEN_SUM_EXPR.  Return NULL without
	ICE for vector expressions, ADDR_SPACE_CONVERT_EXPR,
	FIXED_CONVERT_EXPR, OBJ_TYPE_REF and WITH_SIZE_EXPR.

	* gfortran.dg/pr43229.f90: New test.

From-SVN: r157191
parent 0508bed7
2010-03-03 Jakub Jelinek <jakub@redhat.com> 2010-03-03 Jakub Jelinek <jakub@redhat.com>
PR debug/43229
* cfgexpand.c (expand_debug_expr): Handle DOT_PROD_EXPR,
WIDEN_MULT_EXPR and WIDEN_SUM_EXPR. Return NULL without
ICE for vector expressions, ADDR_SPACE_CONVERT_EXPR,
FIXED_CONVERT_EXPR, OBJ_TYPE_REF and WITH_SIZE_EXPR.
PR debug/43237 PR debug/43237
* dwarf2out.c (add_bound_info): If a decl bound doesn't have decl_die, * dwarf2out.c (add_bound_info): If a decl bound doesn't have decl_die,
fallthrough to default handling, just with want_address 0 instead of 2. fallthrough to default handling, just with want_address 0 instead of 2.
......
...@@ -2230,6 +2230,7 @@ expand_debug_expr (tree exp) ...@@ -2230,6 +2230,7 @@ expand_debug_expr (tree exp)
switch (TREE_CODE (exp)) switch (TREE_CODE (exp))
{ {
case COND_EXPR: case COND_EXPR:
case DOT_PROD_EXPR:
goto ternary; goto ternary;
case TRUTH_ANDIF_EXPR: case TRUTH_ANDIF_EXPR:
...@@ -2950,6 +2951,81 @@ expand_debug_expr (tree exp) ...@@ -2950,6 +2951,81 @@ expand_debug_expr (tree exp)
case ERROR_MARK: case ERROR_MARK:
return NULL; return NULL;
/* Vector stuff. For most of the codes we don't have rtl codes. */
case REALIGN_LOAD_EXPR:
case REDUC_MAX_EXPR:
case REDUC_MIN_EXPR:
case REDUC_PLUS_EXPR:
case VEC_COND_EXPR:
case VEC_EXTRACT_EVEN_EXPR:
case VEC_EXTRACT_ODD_EXPR:
case VEC_INTERLEAVE_HIGH_EXPR:
case VEC_INTERLEAVE_LOW_EXPR:
case VEC_LSHIFT_EXPR:
case VEC_PACK_FIX_TRUNC_EXPR:
case VEC_PACK_SAT_EXPR:
case VEC_PACK_TRUNC_EXPR:
case VEC_RSHIFT_EXPR:
case VEC_UNPACK_FLOAT_HI_EXPR:
case VEC_UNPACK_FLOAT_LO_EXPR:
case VEC_UNPACK_HI_EXPR:
case VEC_UNPACK_LO_EXPR:
case VEC_WIDEN_MULT_HI_EXPR:
case VEC_WIDEN_MULT_LO_EXPR:
return NULL;
/* Misc codes. */
case ADDR_SPACE_CONVERT_EXPR:
case FIXED_CONVERT_EXPR:
case OBJ_TYPE_REF:
case WITH_SIZE_EXPR:
return NULL;
case DOT_PROD_EXPR:
if (SCALAR_INT_MODE_P (GET_MODE (op0))
&& SCALAR_INT_MODE_P (mode))
{
if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))))
op0 = gen_rtx_ZERO_EXTEND (mode, op0);
else
op0 = gen_rtx_SIGN_EXTEND (mode, op0);
if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 1))))
op1 = gen_rtx_ZERO_EXTEND (mode, op1);
else
op1 = gen_rtx_SIGN_EXTEND (mode, op1);
op0 = gen_rtx_MULT (mode, op0, op1);
return gen_rtx_PLUS (mode, op0, op2);
}
return NULL;
case WIDEN_MULT_EXPR:
if (SCALAR_INT_MODE_P (GET_MODE (op0))
&& SCALAR_INT_MODE_P (mode))
{
if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))))
op0 = gen_rtx_ZERO_EXTEND (mode, op0);
else
op0 = gen_rtx_SIGN_EXTEND (mode, op0);
if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 1))))
op1 = gen_rtx_ZERO_EXTEND (mode, op1);
else
op1 = gen_rtx_SIGN_EXTEND (mode, op1);
return gen_rtx_MULT (mode, op0, op1);
}
return NULL;
case WIDEN_SUM_EXPR:
if (SCALAR_INT_MODE_P (GET_MODE (op0))
&& SCALAR_INT_MODE_P (mode))
{
if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))))
op0 = gen_rtx_ZERO_EXTEND (mode, op0);
else
op0 = gen_rtx_SIGN_EXTEND (mode, op0);
return gen_rtx_PLUS (mode, op0, op1);
}
return NULL;
default: default:
flag_unsupported: flag_unsupported:
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
......
2010-03-03 Jakub Jelinek <jakub@redhat.com> 2010-03-03 Jakub Jelinek <jakub@redhat.com>
PR debug/43229
* gfortran.dg/pr43229.f90: New test.
PR debug/43237 PR debug/43237
* gcc.dg/debug/dwarf2/pr43237.c: New test. * gcc.dg/debug/dwarf2/pr43237.c: New test.
......
! PR debug/43229
! { dg-do compile }
! { dg-options "-g -O3 -ffast-math" }
! { dg-options "-g -O3 -ffast-math -msse3" { target { i?86-*-* x86_64-*-* } } }
function foo (c, d)
real(8) :: c(6), d(6), foo
x = sum (c * d)
foo = exp (-x)
end function foo
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment