On 06/17/2014 04:54 PM, Martin Jambor wrote:
Weird... does the following (untested) patch help?

diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 0afa197..747b1b6 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -3277,6 +3277,8 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator 
*gsi)

    if (modify_this_stmt
        || gimple_has_volatile_ops (*stmt)
+      || is_gimple_reg (lhs)
+      || is_gimple_reg (rhs)
        || contains_vce_or_bfcref_p (rhs)
        || contains_vce_or_bfcref_p (lhs)
        || stmt_ends_bb_p (*stmt))

Unfortunately not.

It is just a quick thought though.  If it does not, could you post the
access trees dumped by -fdump-tree-esra-details or
-fdump-tree-sra-details (depending on whether this is early or late
SRA)?  Or is it simple to set it up locally?

Not really. It needs a whole patch tree for the ptx port. I'm attaching the last two dump files.


Bernd

;; Function bar (bar, funcdef_no=0, decl_uid=1376, symbol_order=0)


Pass statistics:
----------------


Pass statistics:
----------------

bar (struct S xD.1375)
{
  struct S D.1385;
  struct S aD.1378;
  struct S D.1379;
  struct S D.1381;

;;   basic block 2, loop depth 0, count 0, freq 10000, maybe hot
;;    prev block 0, next block 1, flags: (NEW, REACHABLE)
;;    pred:       ENTRY [100.0%]  (FALLTHRU,EXECUTABLE)
  # .MEM_2 = VDEF <.MEM_1(D)>
  aD.1378 = xD.1375;
  # .MEM_3 = VDEF <.MEM_2>
  # USE = nonlocal 
  # CLB = nonlocal 
  _6 = fooD.1374 (aD.1378);
  # .MEM_7 = VDEF <.MEM_3>
  D.1379 = _6;
  # .MEM_4 = VDEF <.MEM_7>
  aD.1378 ={v} {CLOBBER};
  # .MEM_5 = VDEF <.MEM_4>
  D.1381 = D.1379;
  # VUSE <.MEM_5>
  return D.1381;
;;    succ:       EXIT [100.0%] 

}


;; Function bar (bar, funcdef_no=0, decl_uid=1376, symbol_order=0)


Pass statistics:
----------------

Candidate (1375): x
Candidate (1385): D.1385
Candidate (1378): a
Candidate (1379): D.1379
Candidate (1381): D.1381
Will attempt to totally scalarize D.1379 (UID: 1379): 
! Disqualifying D.1385 - No or inhibitingly overlapping accesses.
! Disqualifying x - No scalar replacements to be created.
! Disqualifying a - No scalar replacements to be created.
Created a replacement for D.1379 offset: 0, size: 32: SR$2

Access trees for D.1379 (UID: 1379): 
access { base = (1379)'D.1379', offset = 0, size = 32, expr = D.1379.len, type 
= unsigned int, grp_read = 1, grp_write = 1, grp_assignment_read = 1, 
grp_assignment_write = 1, grp_scalar_read = 1, grp_scalar_write = 0, 
grp_total_scalarization = 1, grp_hint = 1, grp_covered = 1, 
grp_unscalarizable_region = 0, grp_unscalarized_data = 0, grp_partial_lhs = 0, 
grp_to_be_replaced = 1, grp_to_be_debug_replaced = 0, grp_maybe_modified = 0, 
grp_not_necessarilly_dereferenced = 0

! Disqualifying D.1381 - No scalar replacements to be created.

Pass statistics:
----------------
Scalarized aggregates: 1
Modified expressions: 2
Separate LHS and RHS handling: 2
Scalar replacements created: 1


Updating SSA:
Registering new PHI nodes in block #0
Registering new PHI nodes in block #2
Updating SSA information for statement SR$2 = MEM[(struct S *)&_6];
Updating SSA information for statement MEM[(struct S *)&D.1381] = SR$2;

DFA Statistics for bar

---------------------------------------------------------
                                Number of        Memory
                                instances         used 
---------------------------------------------------------
USE operands                              1          8b
DEF operands                              2         16b
VUSE operands                             6         48b
VDEF operands                             4         32b
PHI nodes                                 0          0b
PHI arguments                             0          0b
---------------------------------------------------------
Total memory used by DFA/SSA data                  104b
---------------------------------------------------------



Hash table statistics:
    var_infos:   size 61, 1 elements, 0.000000 collision/search ratio


Symbols to be put in SSA form
{ D.1387 }
Incremental SSA update started at block: 0
Number of blocks in CFG: 3
Number of blocks to update: 2 ( 67%)
Affected blocks: 0 2


Reply via email to