diff --git a/hpvm/include/SupportVISC/DFG2LLVM.h b/hpvm/include/SupportVISC/DFG2LLVM.h index 439b6307546a8f8a356ca822dbf0e27b448ca81d..057f1042200c2725c680a48ce83157e91c9d937e 100644 --- a/hpvm/include/SupportVISC/DFG2LLVM.h +++ b/hpvm/include/SupportVISC/DFG2LLVM.h @@ -182,66 +182,7 @@ bool CodeGenTraversal::checkPreferredTarget(DFNode* N, visc::Target T) { } visc::Target CodeGenTraversal::getPreferredTarget(DFNode *N) { - - Function* F = N->getFuncPointer(); - Module* M = F->getParent(); - NamedMDNode* HintNode = M->getOrInsertNamedMetadata("visc_hint_cpu"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::CPU_TARGET; - } - - HintNode = M->getOrInsertNamedMetadata("visc_hint_gpu"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::GPU_TARGET; - } - - HintNode = M->getOrInsertNamedMetadata("visc_hint_spir"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::SPIR_TARGET; - } - - HintNode = M->getOrInsertNamedMetadata("visc_hint_cudnn"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::CUDNN_TARGET; - } - - HintNode = M->getOrInsertNamedMetadata("visc_hint_promise"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::PROMISE_TARGET; - } - - HintNode = M->getOrInsertNamedMetadata("visc_hint_cpu_gpu"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::CPU_OR_GPU_TARGET; - } - - HintNode = M->getOrInsertNamedMetadata("visc_hint_cpu_spir"); - for (unsigned i = 0; i < HintNode->getNumOperands(); i++) { - MDNode* MetaNode = HintNode->getOperand(i); - Value* FHint = dyn_cast<ValueAsMetadata>(MetaNode->getOperand(0).get())->getValue(); - if(F == FHint) - return visc::CPU_OR_SPIR_TARGET; - } - - return visc::None; + return viscUtils::getPreferredTarget(N->getFuncPointer()); } bool CodeGenTraversal::preferredTargetIncludes(DFNode* N, visc::Target T) { @@ -431,16 +372,12 @@ std::vector<Value*> CodeGenTraversal::extractElements(Value* Aggregate, // Traverse the function F argument list to get argument at offset Argument* CodeGenTraversal::getArgumentAt(Function* F, unsigned offset) { DEBUG(errs() << "Finding argument " << offset << ":\n"); - assert((F->getFunctionType()->getNumParams() > offset && offset >= 0) + assert((F->getFunctionType()->getNumParams() > offset) && "Invalid offset to access arguments!"); - Argument* arg; - Function::arg_iterator i = F->arg_begin(), e = F->arg_end(); - for(; offset != 0 && i!=e; i++) { - offset--; - } - arg = &*i; - DEBUG(errs() << "\t" << *arg <<"\n"); - return arg; + + Function::arg_iterator ArgIt = F->arg_begin() + offset; + Argument *Arg = &*ArgIt; + return Arg; } void CodeGenTraversal::initTimerAPI() {