===================================================================
@@ -1,3 +1,17 @@
+2012-12-13 Balaji V. Iyer <balaji.v.iyer@intel.com>
+
+ * tree-vect-loop.c (vect_determine_vectorization_factor): Added a
+ check if assert is requested in simd pragma.
+ (vect_analyze_loop_form): Likewise.
+ (vect_analyze_loop_operations): Likewise.
+ (vect_analyze_loop): Likewise.
+ * tree-cfgcleanup.c (remove_forwarder_block): Copied the pragma
+ simd struct index from the removed bb to the destination basic block.
+ * cfgloop.c (flow_loops_find): Added flag_enable_cilk check.
+ * tree-cfg.c (gimple_merge_blocks): Copied the pragma simd struct
+ index from the source to destination.
+ (remove_bb): Likewise.
+
2012-12-12 Balaji V. Iyer <balaji.v.iyer@intel.com>
* c/c-objc-common.h (LANG_HOOKS_CILK_CHECK_CTRL_FLOW): New define.
===================================================================
@@ -234,8 +234,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by Pragma SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
}
return false;
}
@@ -412,8 +412,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by PRAGMA SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by PRAGMA SIMD");
}
return false;
}
@@ -429,8 +429,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by PRAGMA SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by PRAGMA SIMD");
}
return false;
}
@@ -470,8 +470,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by PRAGMA SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by PRAGMA SIMD");
}
return false;
}
@@ -518,8 +518,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by PRAGMA SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by PRAGMA SIMD");
}
return false;
}
@@ -541,8 +541,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by PRAGMA SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by PRAGMA SIMD");
}
return false;
}
@@ -607,8 +607,8 @@
if (flag_enable_cilk && pragma_simd_assert_requested_p
(loop->pragma_simd_index))
{
- error ("Loop not vectorized. "
- "Exiting as requested by Pragma SIMD");
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
}
return false;
}
@@ -1188,18 +1188,26 @@
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- "not vectorized: control flow in loop.");
+ "not vectorized: control flow in loop.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return NULL;
}
if (empty_block_p (loop->header))
- {
+ {
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: empty loop.");
- return NULL;
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
+ return NULL;
+ }
}
- }
else
{
struct loop *innerloop = loop->inner;
@@ -1227,6 +1235,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: multiple nested loops.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return NULL;
}
@@ -1237,6 +1249,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: Bad inner loop.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return NULL;
}
@@ -1246,6 +1262,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: inner-loop count not invariant.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
}
@@ -1255,6 +1275,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: control flow in loop.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
}
@@ -1271,6 +1295,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: unsupported outerloop form.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
}
@@ -1286,11 +1314,21 @@
if (dump_enabled_p ())
{
if (!single_exit (loop))
- dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- "not vectorized: multiple exits.");
+ {
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "not vectorized: multiple exits.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
+ }
else if (EDGE_COUNT (loop->header->preds) != 2)
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: too many incoming edges.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
}
if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, true);
@@ -1307,6 +1345,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: unexpected loop form.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
@@ -1327,6 +1369,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: abnormal loop exit edge.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
@@ -1339,6 +1385,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: complicated exit condition.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
@@ -1350,6 +1400,10 @@
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: number of iterations cannot be "
"computed.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, true);
return NULL;
@@ -1379,6 +1433,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: number of iterations = 0.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
if (inner_loop_vinfo)
destroy_loop_vec_info (inner_loop_vinfo, false);
return NULL;
@@ -1540,6 +1598,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: value used after loop.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1550,6 +1612,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: scalar dependence cycle.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1568,6 +1634,10 @@
"not vectorized: relevant phi not "
"supported: ");
dump_gimple_stmt (MSG_MISSED_OPTIMIZATION, TDF_SLIM, phi, 0);
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
}
return false;
}
@@ -1595,6 +1665,10 @@
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: redundant loop. no profit to "
"vectorize.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1616,6 +1690,10 @@
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: iteration count smaller than "
"vectorization factor.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1638,6 +1716,10 @@
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: vector version will never be "
"profitable.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1665,6 +1747,10 @@
"not vectorized: iteration count smaller than user "
"specified loop bound parameter or minimum profitable "
"iterations (whichever is more conservative).");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1682,6 +1768,10 @@
"than specified loop bound parameter or minimum "
"profitable iterations (whichever is more "
"conservative).");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
@@ -1696,6 +1786,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: can't create epilog loop 1.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
if (!slpeel_can_duplicate_loop_p (loop, single_exit (loop)))
@@ -1703,6 +1797,10 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"not vectorized: can't create epilog loop 2.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
return false;
}
}
@@ -1735,7 +1833,7 @@
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- "bad data references.");
+ "bad data references.");
return false;
}
@@ -1903,6 +2001,13 @@
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"bad loop form.");
+ if (flag_enable_cilk && pragma_simd_assert_requested_p
+ (loop->pragma_simd_index))
+ {
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
+ }
+
return NULL;
}
@@ -1918,8 +2023,13 @@
vector_sizes &= ~current_vector_size;
if (vector_sizes == 0
|| current_vector_size == 0)
- return NULL;
-
+ {
+ if (flag_enable_cilk
+ && pragma_simd_assert_requested_p (loop->pragma_simd_index))
+ fatal_error ("Loop not vectorized. "
+ "Exiting as requested by Pragma SIMD");
+ return NULL;
+ }
/* Try the next biggest vector size. */
current_vector_size = 1 << floor_log2 (vector_sizes);
if (dump_enabled_p ())
===================================================================
@@ -346,6 +346,11 @@
if (dest == bb)
return false;
+ if (flag_enable_cilk && bb->pragma_simd_index != 0
+ && (dest->pragma_simd_index == 0
+ || dest->pragma_simd_index == INVALID_PRAGMA_SIMD_SLOT))
+ dest->pragma_simd_index = bb->pragma_simd_index;
+
/* If the destination block consists of a nonlocal label or is a
EH landing pad, do not merge it. */
label = first_stmt (dest);
===================================================================
@@ -423,8 +423,11 @@
bitmap_set_bit (headers, header->index);
/* Here we are going to copy the pragma simd value from
the latch to the header. */
- if ((header->pragma_simd_index == 0)
- && (latch->pragma_simd_index != 0))
+ if (flag_enable_cilk
+ && (header->pragma_simd_index == 0
+ || header->pragma_simd_index == INVALID_PRAGMA_SIMD_SLOT)
+ && (latch->pragma_simd_index != 0
+ || latch->pragma_simd_index != INVALID_PRAGMA_SIMD_SLOT))
header->pragma_simd_index = latch->pragma_simd_index;
num_loops++;
}
@@ -466,7 +469,8 @@
loop->header = header;
loop->num = num_loops;
- loop->pragma_simd_index = header->pragma_simd_index;
+ if (flag_enable_cilk)
+ loop->pragma_simd_index = header->pragma_simd_index;
num_loops++;
===================================================================
@@ -1631,6 +1631,11 @@
if (dump_file)
fprintf (dump_file, "Merging blocks %d and %d\n", a->index, b->index);
+ if (flag_enable_cilk && b->pragma_simd_index != 0
+ && (a->pragma_simd_index == 0
+ || a->pragma_simd_index == INVALID_PRAGMA_SIMD_SLOT))
+ a->pragma_simd_index = b->pragma_simd_index;
+
/* Remove all single-valued PHI nodes from block B of the form
V_i = PHI <V_j> by propagating V_j to all the uses of V_i. */
gsi = gsi_last_bb (a);
@@ -1897,7 +1902,11 @@
remove_phi_nodes_and_edges_for_unreachable_block (bb);
bb->il.gimple.seq = NULL;
bb->il.gimple.phi_nodes = NULL;
- bb->next_bb->pragma_simd_index = bb->pragma_simd_index;
+ if (flag_enable_cilk
+ && bb->next_bb->pragma_simd_index == 0
+ && bb->pragma_simd_index != 0
+ && bb->pragma_simd_index != INVALID_PRAGMA_SIMD_SLOT)
+ bb->next_bb->pragma_simd_index = bb->pragma_simd_index;
}