From fc734382d1cc65ee8f7021e3f696d1b6c6f393cf Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Tue, 3 Aug 2010 13:50:25 +0200 Subject: [PATCH] tree-sra.c (completely_scalarize_record): New parameter REF, create its own access->expr intead of using build_ref_for_offset. 2010-08-03 Martin Jambor * tree-sra.c (completely_scalarize_record): New parameter REF, create its own access->expr intead of using build_ref_for_offset. From-SVN: r162841 --- gcc/ChangeLog | 5 +++++ gcc/tree-sra.c | 21 +++++++++------------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d6601b..023a461 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-08-03 Martin Jambor + + * tree-sra.c (completely_scalarize_record): New parameter REF, create + its own access->expr intead of using build_ref_for_offset. + 2010-08-03 Joseph Myers * config/alpha/alpha.h (SWITCH_TAKES_ARG): Define. diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 3e510a6..372139f 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -843,10 +843,12 @@ type_consists_of_records_p (tree type) /* Create total_scalarization accesses for all scalar type fields in DECL that must be of a RECORD_TYPE conforming to type_consists_of_records_p. BASE must be the top-most VAR_DECL representing the variable, OFFSET must be the - offset of DECL within BASE. */ + offset of DECL within BASE. REF must be the memory reference expression for + the given decl. */ static void -completely_scalarize_record (tree base, tree decl, HOST_WIDE_INT offset) +completely_scalarize_record (tree base, tree decl, HOST_WIDE_INT offset, + tree ref) { tree fld, decl_type = TREE_TYPE (decl); @@ -855,28 +857,23 @@ completely_scalarize_record (tree base, tree decl, HOST_WIDE_INT offset) { HOST_WIDE_INT pos = offset + int_bit_position (fld); tree ft = TREE_TYPE (fld); + tree nref = build3 (COMPONENT_REF, TREE_TYPE (fld), ref, fld, + NULL_TREE); if (is_gimple_reg_type (ft)) { struct access *access; HOST_WIDE_INT size; - tree expr; - bool ok; size = tree_low_cst (DECL_SIZE (fld), 1); - expr = base; - ok = build_ref_for_offset (&expr, TREE_TYPE (base), pos, - ft, false); - gcc_assert (ok); - access = create_access_1 (base, pos, size); - access->expr = expr; + access->expr = nref; access->type = ft; access->total_scalarization = 1; /* Accesses for intraprocedural SRA can have their stmt NULL. */ } else - completely_scalarize_record (base, fld, pos); + completely_scalarize_record (base, fld, pos, nref); } } @@ -2067,7 +2064,7 @@ analyze_all_variable_accesses (void) <= max_total_scalarization_size) && type_consists_of_records_p (TREE_TYPE (var))) { - completely_scalarize_record (var, var, 0); + completely_scalarize_record (var, var, 0, var); if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Will attempt to totally scalarize "); -- 2.7.4