OSDN Git Service

PR middle-end/27745
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 May 2006 16:01:16 +0000 (16:01 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 May 2006 16:01:16 +0000 (16:01 +0000)
* lambda-code.c (perfect_nestify): Don't copy statements
in the inner loop: move them to the inner loop header.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114205 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lambda-code.c

index eba12e7..dc310f6 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-29  Sebastian Pop  <pop@cri.ensmp.fr>
+
+       PR middle-end/27745
+       * lambda-code.c (perfect_nestify): Don't copy statements
+       in the inner loop: move them to the inner loop header.
+
 2006-05-29  Diego Novillo  <dnovillo@redhat.com>
 
        PR 26237
index 8ed9610..2a03fd3 100644 (file)
@@ -2506,50 +2506,22 @@ perfect_nestify (struct loops *loops,
 
          if (dominated_by_p (CDI_DOMINATORS, loop->inner->header, bbs[i]))
            {
-             for (bsi = bsi_last (bbs[i]); !bsi_end_p (bsi);)
+             block_stmt_iterator header_bsi 
+               = bsi_after_labels (loop->inner->header);
+
+             for (bsi = bsi_start (bbs[i]); !bsi_end_p (bsi);)
                { 
-                 use_operand_p use_p;
-                 imm_use_iterator imm_iter;
-                 tree imm_stmt;
                  tree stmt = bsi_stmt (bsi);
 
                  if (stmt == exit_condition
                      || not_interesting_stmt (stmt)
                      || stmt_is_bumper_for_loop (loop, stmt))
                    {
-                     if (!bsi_end_p (bsi))
-                       bsi_prev (&bsi);
+                     bsi_next (&bsi);
                      continue;
                    }
-                 
-                 /* Make copies of this statement to put it back next
-                    to its uses.  */
-                 FOR_EACH_IMM_USE_STMT (imm_stmt, imm_iter, 
-                                        TREE_OPERAND (stmt, 0))
-                   {
-                     if (!exit_phi_for_loop_p (loop->inner, imm_stmt))
-                       {
-                         block_stmt_iterator tobsi;
-                         tree newname;
-                         tree newstmt;
-                        
-                         newstmt  = unshare_expr (stmt);
-                         tobsi = bsi_after_labels (bb_for_stmt (imm_stmt));
-                         newname = TREE_OPERAND (newstmt, 0);
-                         newname = SSA_NAME_VAR (newname);
-                         newname = make_ssa_name (newname, newstmt);
-                         TREE_OPERAND (newstmt, 0) = newname;
-
-                         FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
-                           SET_USE (use_p, newname);
-
-                         bsi_insert_before (&tobsi, newstmt, BSI_SAME_STMT);
-                         update_stmt (newstmt);
-                         update_stmt (imm_stmt);
-                       } 
-                   }
-                 if (!bsi_end_p (bsi))
-                   bsi_prev (&bsi);                      
+
+                 bsi_move_before (&bsi, &header_bsi);
                }
            }
          else