re PR tree-optimization/32160 (ICE with -O3 in verify_ssa)
PR tree-optimization/32160 * tree-predcom.c (predcom_tmp_var): New function. Mark created variable as gimple reg. (initialize_root_vars, initialize_root_vars_lm): Use predcom_tmp_var. * gfortran.dg/predcom-1.f: New test. From-SVN: r125228
This commit is contained in:
parent
01e4dd0dad
commit
2664efb66b
@ -1,3 +1,10 @@
|
||||
2007-05-31 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/32160
|
||||
* tree-predcom.c (predcom_tmp_var): New function. Mark created
|
||||
variable as gimple reg.
|
||||
(initialize_root_vars, initialize_root_vars_lm): Use predcom_tmp_var.
|
||||
|
||||
2007-05-31 Kazu Hirata <kazu@codesourcery.com>
|
||||
|
||||
* gcc.c (main): Don't consider linker options when issuing the
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-05-31 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/32160
|
||||
* gfortran.dg/predcom-1.f: New test.
|
||||
|
||||
2007-05-31 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* g++.dg/other/str_empty.C: Move...
|
||||
|
16
gcc/testsuite/gfortran.dg/predcom-1.f
Normal file
16
gcc/testsuite/gfortran.dg/predcom-1.f
Normal file
@ -0,0 +1,16 @@
|
||||
! PR 32160, complex temporary variables were not marked as gimple registers
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O3" }
|
||||
|
||||
REAL FUNCTION CLANHT( N, E )
|
||||
INTEGER N
|
||||
COMPLEX E( * )
|
||||
INTEGER I
|
||||
REAL ANORM
|
||||
INTRINSIC ABS
|
||||
DO 20 I = 1, N
|
||||
ANORM = ANORM +ABS( E( I ) )+ ABS( E( I-1 ) )
|
||||
20 CONTINUE
|
||||
CLANHT = ANORM
|
||||
RETURN
|
||||
END
|
@ -1401,6 +1401,26 @@ mark_virtual_ops_for_renaming_list (tree list)
|
||||
mark_virtual_ops_for_renaming (tsi_stmt (tsi));
|
||||
}
|
||||
|
||||
/* Returns a new temporary variable used for the I-th variable carrying
|
||||
value of REF. The variable's uid is marked in TMP_VARS. */
|
||||
|
||||
static tree
|
||||
predcom_tmp_var (tree ref, unsigned i, bitmap tmp_vars)
|
||||
{
|
||||
tree type = TREE_TYPE (ref);
|
||||
tree var = create_tmp_var (type, get_lsm_tmp_name (ref, i));
|
||||
|
||||
/* We never access the components of the temporary variable in predictive
|
||||
commoning. */
|
||||
if (TREE_CODE (type) == COMPLEX_TYPE
|
||||
|| TREE_CODE (type) == VECTOR_TYPE)
|
||||
DECL_GIMPLE_REG_P (var) = 1;
|
||||
|
||||
add_referenced_var (var);
|
||||
bitmap_set_bit (tmp_vars, DECL_UID (var));
|
||||
return var;
|
||||
}
|
||||
|
||||
/* Creates the variables for CHAIN, as well as phi nodes for them and
|
||||
initialization on entry to LOOP. Uids of the newly created
|
||||
temporary variables are marked in TMP_VARS. */
|
||||
@ -1429,9 +1449,7 @@ initialize_root_vars (struct loop *loop, chain_p chain, bitmap tmp_vars)
|
||||
|
||||
for (i = 0; i < n + (reuse_first ? 0 : 1); i++)
|
||||
{
|
||||
var = create_tmp_var (TREE_TYPE (ref), get_lsm_tmp_name (ref, i));
|
||||
add_referenced_var (var);
|
||||
bitmap_set_bit (tmp_vars, DECL_UID (var));
|
||||
var = predcom_tmp_var (ref, i, tmp_vars);
|
||||
VEC_quick_push (tree, chain->vars, var);
|
||||
}
|
||||
if (reuse_first)
|
||||
@ -1499,9 +1517,7 @@ initialize_root_vars_lm (struct loop *loop, dref root, bool written,
|
||||
init = VEC_index (tree, inits, 0);
|
||||
|
||||
*vars = VEC_alloc (tree, heap, written ? 2 : 1);
|
||||
var = create_tmp_var (TREE_TYPE (ref), get_lsm_tmp_name (ref, 0));
|
||||
add_referenced_var (var);
|
||||
bitmap_set_bit (tmp_vars, DECL_UID (var));
|
||||
var = predcom_tmp_var (ref, 0, tmp_vars);
|
||||
VEC_quick_push (tree, *vars, var);
|
||||
if (written)
|
||||
VEC_quick_push (tree, *vars, VEC_index (tree, *vars, 0));
|
||||
|
Loading…
Reference in New Issue
Block a user