re PR regression/40001 (r146817 broke libgloss build for SPU)
2009-05-02 Richard Guenther <rguenther@suse.de> PR middle-end/40001 * tree-ssa.c (execute_update_addresses_taken): Properly check if we can mark a variable DECL_GIMPLE_REG_P. * gimple.c (is_gimple_reg): Re-order check for DECL_GIMPLE_REG_P back to the end of the function. (is_gimple_reg_type): Remove complex type special casing. * gimplify.c (gimplify_bind_expr): Do not set DECL_GIMPLE_REG_P if not optimizing. * gcc.target/spu/pr40001.c: New testcase. From-SVN: r147064
This commit is contained in:
parent
25195e8264
commit
4636b850f6
|
@ -1,3 +1,14 @@
|
|||
2009-05-02 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/40001
|
||||
* tree-ssa.c (execute_update_addresses_taken): Properly check
|
||||
if we can mark a variable DECL_GIMPLE_REG_P.
|
||||
* gimple.c (is_gimple_reg): Re-order check for DECL_GIMPLE_REG_P
|
||||
back to the end of the function.
|
||||
(is_gimple_reg_type): Remove complex type special casing.
|
||||
* gimplify.c (gimplify_bind_expr): Do not set DECL_GIMPLE_REG_P
|
||||
if not optimizing.
|
||||
|
||||
2009-05-02 Ben Elliston <bje@au.ibm.com>
|
||||
|
||||
* doc/collect2.texi (Collect2): Document search path behaviour
|
||||
|
|
20
gcc/gimple.c
20
gcc/gimple.c
|
@ -2805,13 +2805,7 @@ is_gimple_id (tree t)
|
|||
bool
|
||||
is_gimple_reg_type (tree type)
|
||||
{
|
||||
/* In addition to aggregate types, we also exclude complex types if not
|
||||
optimizing because they can be subject to partial stores in GNU C by
|
||||
means of the __real__ and __imag__ operators and we cannot promote
|
||||
them to total stores (see gimplify_modify_expr_complex_part). */
|
||||
return !(AGGREGATE_TYPE_P (type)
|
||||
|| (TREE_CODE (type) == COMPLEX_TYPE && !optimize));
|
||||
|
||||
return !AGGREGATE_TYPE_P (type);
|
||||
}
|
||||
|
||||
/* Return true if T is a non-aggregate register variable. */
|
||||
|
@ -2825,12 +2819,6 @@ is_gimple_reg (tree t)
|
|||
if (!is_gimple_variable (t))
|
||||
return false;
|
||||
|
||||
/* Complex and vector values must have been put into SSA-like form.
|
||||
That is, no assignments to the individual components. */
|
||||
if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
|
||||
|| TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
|
||||
return DECL_GIMPLE_REG_P (t);
|
||||
|
||||
if (!is_gimple_reg_type (TREE_TYPE (t)))
|
||||
return false;
|
||||
|
||||
|
@ -2857,6 +2845,12 @@ is_gimple_reg (tree t)
|
|||
if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t))
|
||||
return false;
|
||||
|
||||
/* Complex and vector values must have been put into SSA-like form.
|
||||
That is, no assignments to the individual components. */
|
||||
if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
|
||||
|| TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
|
||||
return DECL_GIMPLE_REG_P (t);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1218,9 +1218,14 @@ gimplify_bind_expr (tree *expr_p, gimple_seq *pre_p)
|
|||
|
||||
/* Preliminarily mark non-addressed complex variables as eligible
|
||||
for promotion to gimple registers. We'll transform their uses
|
||||
as we find them. */
|
||||
if ((TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
|
||||
|| TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
|
||||
as we find them.
|
||||
We exclude complex types if not optimizing because they can be
|
||||
subject to partial stores in GNU C by means of the __real__ and
|
||||
__imag__ operators and we cannot promote them to total stores
|
||||
(see gimplify_modify_expr_complex_part). */
|
||||
if (optimize
|
||||
&& (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
|
||||
|| TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
|
||||
&& !TREE_THIS_VOLATILE (t)
|
||||
&& (TREE_CODE (t) == VAR_DECL && !DECL_HARD_REGISTER (t))
|
||||
&& !needs_to_live_in_memory (t))
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-05-02 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/40001
|
||||
* gcc.target/spu/pr40001.c: New testcase.
|
||||
|
||||
2009-04-30 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* gcc.dg/ssp-1.c (__stack_chk_fail): Remove static.
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O" } */
|
||||
|
||||
void *
|
||||
sbrk (unsigned int increment)
|
||||
{
|
||||
volatile register
|
||||
__attribute__ ((__spu_vector__)) unsigned int sp_r1 __asm__ ("1");
|
||||
unsigned int sps;
|
||||
|
||||
sps = __builtin_spu_extract (sp_r1, 0);
|
||||
if (sps - 4096 >= increment)
|
||||
return 0;
|
||||
else
|
||||
return ((void *) -1);
|
||||
}
|
||||
|
|
@ -1573,7 +1573,9 @@ execute_update_addresses_taken (bool do_optimize)
|
|||
if (!DECL_GIMPLE_REG_P (var)
|
||||
&& !bitmap_bit_p (not_reg_needs, DECL_UID (var))
|
||||
&& (TREE_CODE (TREE_TYPE (var)) == COMPLEX_TYPE
|
||||
|| TREE_CODE (TREE_TYPE (var)) == VECTOR_TYPE))
|
||||
|| TREE_CODE (TREE_TYPE (var)) == VECTOR_TYPE)
|
||||
&& !TREE_THIS_VOLATILE (var)
|
||||
&& (TREE_CODE (var) != VAR_DECL || !DECL_HARD_REGISTER (var)))
|
||||
{
|
||||
DECL_GIMPLE_REG_P (var) = 1;
|
||||
mark_sym_for_renaming (var);
|
||||
|
|
Loading…
Reference in New Issue