diff mbox

[Cilkplus] Did an induction variable optimization

Message ID BF230D13CA30DD48930C31D4099330000F267DFE@FMSMSX102.amr.corp.intel.com
State New
Headers show

Commit Message

Iyer, Balaji V June 6, 2012, 12:59 a.m. UTC
Hello Everyone,
   This patch is for the Cilkplus branch affecting the C compiler. This patch will remove an unwanted conversion of the induction variable in the cilk_for function.

Thanking You,

Yours Sincerely,

Balaji V. Iyer.
diff mbox

Patch

Index: gcc/cilk-spawn.c
===================================================================
--- gcc/cilk-spawn.c	(revision 188251)
+++ gcc/cilk-spawn.c	(working copy)
@@ -2290,9 +2290,6 @@ 
   int incr_sign = cfd->incr_sign;
   enum tree_code add_op = incr_sign >= 0 ? PLUS_EXPR : MINUS_EXPR;
 
-  gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (loop_var)) ==
-	      TYPE_MAIN_VARIANT (count_type));
-
   /* Compute an expression to be added or subtracted.
 
      We want to add or subtract LOOP_VAR * INCR.  INCR may be negative.
@@ -2374,8 +2371,8 @@ 
   tree body, block;
   tree lower_bound;
   tree loop_var;
-  tree count_type;
   tree tempx,tempy;
+
   declare_cilk_for_parms (cfd);
 
   cfd->wd.fntype = build_function_type (void_type_node, cfd->wd.argtypes);
@@ -2420,14 +2417,12 @@ 
       lower_bound = hack;
     }
   loop_var = build_decl (UNKNOWN_LOCATION, VAR_DECL, NULL_TREE,
-			 TREE_TYPE (cfd->min_parm));
+			 cfd->var_type);
   DECL_CONTEXT (loop_var) = fndecl;
-  add_stmt (build2 (INIT_EXPR, void_type_node, loop_var, cfd->min_parm));
+  add_stmt (build_modify_expr (UNKNOWN_LOCATION, loop_var, TREE_TYPE (loop_var),
+			       NOP_EXPR, UNKNOWN_LOCATION,
+			       cfd->min_parm, TREE_TYPE (cfd->min_parm)));
 
-  count_type = cfd->count_type;
-  gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (loop_var)) ==
-	      TYPE_MAIN_VARIANT (count_type));
-
   /* The new loop body is
 
      var2 = (T)((control variable) * INCR + (lower bound));
@@ -2464,14 +2459,15 @@ 
     add_stmt (loop_body);
 
     tempx = build2 (MODIFY_EXPR, void_type_node, loop_var,
-		    build2 (PLUS_EXPR, count_type,
+		    build2 (PLUS_EXPR, TREE_TYPE (loop_var),
 			    loop_var,
-			    build_int_cst (count_type, 1)));
+			    build_int_cst (TREE_TYPE (loop_var), 1)));
     add_stmt(tempx);
     
     tempy = build3 (COND_EXPR, void_type_node,
 		    build2 (LT_EXPR, boolean_type_node, loop_var,
-			    cfd->max_parm),
+			    build_c_cast (UNKNOWN_LOCATION,
+					  TREE_TYPE (loop_var), cfd->max_parm)),
 		    build1 (GOTO_EXPR, void_type_node, lab),
 		    build_empty_stmt (UNKNOWN_LOCATION));
 
Index: gcc/ChangeLog.cilk
===================================================================
--- gcc/ChangeLog.cilk	(revision 188251)
+++ gcc/ChangeLog.cilk	(working copy)
@@ -1,3 +1,10 @@ 
+2012-06-05  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+	* cilk-spawn.c (compute_loop_var): Removed an unwanted assert.
+	(build_cilk_for_body): Changed var type from min_parms's to the original
+	var_type. This change is propagated in several places with the
+	appropriate type conversions.
+
 2012-06-02  Balaji V. Iyer  <balaji.v.iyer@intel.com>
 
 	* tree-inline.c (remap_gimple_op_r): Added a check for NON-NULL