diff options
Diffstat (limited to 'src/transformations/loop.cc')
-rw-r--r-- | src/transformations/loop.cc | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/src/transformations/loop.cc b/src/transformations/loop.cc index 0839705..d176981 100644 --- a/src/transformations/loop.cc +++ b/src/transformations/loop.cc @@ -460,6 +460,22 @@ void Loop::buildIS(std::vector<ir_tree_node*> &ir_tree,std::vector<int> &lexical stmt[loc].loop_level[ii].payload = ii; stmt[loc].loop_level[ii].parallel_level = 0; } + // Lexical ordering + stmt[loc].xform = Relation(num_dep_dim, 2 * num_dep_dim + 1); + F_And *f_xform = stmt[loc].xform.add_and(); + + for (int j = 1; j <= num_dep_dim; j++) { + EQ_Handle h = f_xform->add_EQ(); + h.update_coef(stmt[i].xform.output_var(2 * j), 1); + h.update_coef(stmt[i].xform.input_var(j), -1); + } + + for (int j = 1; j <= 2 * num_dep_dim + 1; j += 2) { + EQ_Handle h = f_xform->add_EQ(); + h.update_coef(stmt[i].xform.output_var(j), 1); + h.update_const(-lexicalOrder[(j-1)/2]); + } + stmt[i].xform.simplify(); // Update lexical ordering for next statement lexicalOrder[lexicalOrder.size()-1]++; break; @@ -740,29 +756,6 @@ Loop::Loop(const IR_Control *control) { stmt[canReduce[i]].reductionOp = opType; } } - // cleanup the IR tree - - CHILL_DEBUG_PRINT("init dumb transformation relations\n"); - - // init dumb transformation relations e.g. [i, j] -> [ 0, i, 0, j, 0] - for (int i = 0; i < stmt.size(); i++) { - int n = stmt[i].IS.n_set(); - stmt[i].xform = Relation(n, 2 * n + 1); - F_And *f_root = stmt[i].xform.add_and(); - - for (int j = 1; j <= n; j++) { - EQ_Handle h = f_root->add_EQ(); - h.update_coef(stmt[i].xform.output_var(2 * j), 1); - h.update_coef(stmt[i].xform.input_var(j), -1); - } - - for (int j = 1; j <= 2 * n + 1; j += 2) { - EQ_Handle h = f_root->add_EQ(); - h.update_coef(stmt[i].xform.output_var(j), 1); - } - stmt[i].xform.simplify(); - } - CHILL_DEBUG_PRINT("done with dumb\n"); } Loop::~Loop() { |