Skip to content
Snippets Groups Projects
Commit 5d5a7170 authored by Akash Kothari's avatar Akash Kothari :speech_balloon:
Browse files

Using concise module iterators for functions

parent 0d8677bc
No related branches found
No related tags found
No related merge requests found
......@@ -29,11 +29,11 @@ bool BuildDFG::runOnModule(Module &M) {
IntrinsicInst* II;
// Iterate over all functions in the module
for (Module::iterator mi = M.begin(), me = M.end(); mi != me; ++mi) {
Function* f = &*mi;
DEBUG(errs() << "Function: " << f->getName() << "\n");
for (auto &Func : M) {
Function* F = &Func;
DEBUG(errs() << "Function: " << F->getName() << "\n");
for (inst_iterator i = inst_begin(f), e = inst_end(f); i != e ; ++i) {
for (inst_iterator i = inst_begin(F), e = inst_end(F); i != e ; ++i) {
Instruction* I = &*i; // Grab pointer to Instruction
if (isViscLaunchIntrinsic(I)) {
DEBUG(errs() << "------------ Found launch site --------------\n");
......@@ -344,51 +344,45 @@ void BuildDFG::BuildGraph (DFInternalNode* N, Function *F) {
// Iterate over all the instructions of a function and look for visc
// intrinsics.
for(auto &BB : *F) {
for(auto &Inst : BB) {
Instruction* I = &Inst;
DEBUG(errs() << *I << "\n");
if(IntrinsicInst* II = dyn_cast<IntrinsicInst>(I)) {
DEBUG(errs() << "IntrinsicID = " << II->getIntrinsicID() << ": " << II->getCalledFunction()->getName()<<"\n");
switch(II->getIntrinsicID()) {
case Intrinsic::visc_createNode:
case Intrinsic::visc_createNode1D:
case Intrinsic::visc_createNode2D:
case Intrinsic::visc_createNode3D:
handleCreateNode (N, II);
break;
case Intrinsic::visc_createEdge:
handleCreateEdge(N, II);
break;
case Intrinsic::visc_bind_input:
handleBindInput(N, II);
break;
case Intrinsic::visc_bind_output:
handleBindOutput(N, II);
break;
//TODO: Reconsider launch within a dataflow graph (recursion?)
case Intrinsic::visc_wait:
case Intrinsic::visc_launch:
errs() << "Error: Launch/wait intrinsic used within a dataflow graph\n\t" << *II << "\n";
break;
default:
errs() << "Error: Invalid VISC Intrinsic inside Internal node!\n\t" << *II << "\n";
break;
}
continue;
}
if(!isa<ReturnInst>(I) && !isa<CastInst>(I)) {
errs() << "Non-intrinsic instruction: " << *I << "\n";
llvm_unreachable("Found non-intrinsic instruction inside an internal node. Only return instruction is allowed!");
}
}
}
for (inst_iterator i = inst_begin(F), e = inst_end(F); i != e ; ++i) {
Instruction* I = &*i; // Grab pointer to Instruction
DEBUG(errs() << *I << "\n");
if(IntrinsicInst* II = dyn_cast<IntrinsicInst>(I)) {
DEBUG(errs() << "IntrinsicID = " << II->getIntrinsicID() << ": " << II->getCalledFunction()->getName()<<"\n");
switch(II->getIntrinsicID()) {
case Intrinsic::visc_createNode:
case Intrinsic::visc_createNode1D:
case Intrinsic::visc_createNode2D:
case Intrinsic::visc_createNode3D:
handleCreateNode (N, II);
break;
case Intrinsic::visc_createEdge:
handleCreateEdge(N, II);
break;
case Intrinsic::visc_bind_input:
handleBindInput(N, II);
break;
case Intrinsic::visc_bind_output:
handleBindOutput(N, II);
break;
//TODO: Reconsider launch within a dataflow graph (recursion?)
case Intrinsic::visc_wait:
case Intrinsic::visc_launch:
errs() << "Error: Launch/wait intrinsic used within a dataflow graph\n\t" << *II << "\n";
break;
default:
errs() << "Error: Invalid VISC Intrinsic inside Internal node!\n\t" << *II << "\n";
break;
}
continue;
}
if(!isa<ReturnInst>(I) && !isa<CastInst>(I)) {
errs() << "Non-intrinsic instruction: " << *I << "\n";
llvm_unreachable("Found non-intrinsic instruction inside an internal node. Only return instruction is allowed!");
}
}
}
char BuildDFG::ID = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment