~ryan-rmarcus/pocl/pocl

« back to all changes in this revision

Viewing changes to lib/llvmopencl/WorkitemReplication.cc

  • Committer: Carlos Sánchez de La Lama
  • Date: 2011-11-11 11:10:37 UTC
  • mto: This revision was merged to the branch mainline in revision 70.
  • Revision ID: carlos.delalama@urjc.es-20111111111037-zngd437tgipgnvh4
Corrected indexing the the reference maps when creating workitems (!!!)
WorkitemReplication pass is now teste using graphs also.

Show diffs side-by-side

added added

removed removed

Lines of Context:
217
217
}
218
218
 
219
219
void
 
220
WorkitemReplication::SetBasicBlockNames(const BasicBlockSet &subgraph)
 
221
{
 
222
  for (BasicBlockSet::iterator i = subgraph.begin(), e = subgraph.end();
 
223
       i != e; ++i) {
 
224
    BasicBlock *bb = *i;
 
225
    StringRef s = bb->getName();
 
226
    for (int z = 0; z < LocalSize[2]; ++z) {
 
227
      for (int y = 0; y < LocalSize[1]; ++y) {
 
228
        for (int x = 0; x < LocalSize[0] ; ++x) {
 
229
          
 
230
          if ((z == 0) && (y == 0) && (x == 0))
 
231
            continue;
 
232
 
 
233
          int index = (LocalSize[1] * LocalSize[0] * z +
 
234
                       LocalSize[0] * y +
 
235
                       x) - 1;
 
236
          
 
237
          bb = cast<BasicBlock> (ReferenceMap[index][bb]);
 
238
          bb->setName(s + ".wi_" + Twine(x) + "_" + Twine(y) + "_" + Twine(z));
 
239
        }
 
240
      }
 
241
    }
 
242
 
 
243
    (*i)->setName(s + ".wi_0_0_0");
 
244
  }
 
245
}
 
246
 
 
247
void
220
248
WorkitemReplication::replicateWorkitemSubgraph(BasicBlockSet subgraph,
221
249
                                               BasicBlock *entry,
222
250
                                               BasicBlock *exit)
223
251
{
 
252
  BasicBlockSet original_subgraph = subgraph;
 
253
 
224
254
  BasicBlockSet s;
225
255
 
226
256
  assert (entry != NULL && exit != NULL);
241
271
                                                     32), x), LocalX);
242
272
          }
243
273
 
 
274
          SetBasicBlockNames(original_subgraph);
 
275
 
244
276
          // No need to update LoopInfo here, replicated code
245
277
          // is never replicated again (FALSE, fails without it).
246
278
          DT->runOnFunction(*(entry->getParent()));
249
281
          return;
250
282
        }
251
283
 
252
 
        int i = (z + 1) * (y + 1) * (x + 1) - 1;
 
284
        int i = (LocalSize[1] * LocalSize[0] * z +
 
285
                 LocalSize[0] * y +
 
286
                 x);
253
287
 
254
288
        replicateBasicblocks(s, ReferenceMap[i], subgraph);
255
289
        purge_subgraph(s, subgraph,