Skip to content
Snippets Groups Projects
Commit b53f1381 authored by kotsifa2's avatar kotsifa2
Browse files

Added helper function removeHint in VISCUtils.h

parent 2fae79d5
No related branches found
No related tags found
No related merge requests found
......@@ -486,6 +486,62 @@ void addHint(Function* F, visc::Target T) {
HintNode->addOperand(N);
}
// This function removes the hint as metadata in visc code
void removeHint(Function* F, visc::Target T) {
// Get Module
Module* M = F->getParent();
DEBUG(errs() << "Remove preferred target for " << F->getName() << ": " << T << "\n");
// Based on the hint, get the hint metadata
NamedMDNode* HintNode;
switch (T) {
case visc::GPU_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_gpu");
break;
case visc::SPIR_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_spir");
break;
case visc::CUDNN_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_cudnn");
break;
case visc::PROMISE_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_promise");
break;
case visc::CPU_OR_GPU_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_cpu_gpu");
break;
case visc::CPU_OR_SPIR_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_cpu_spir");
break;
case visc::CPU_TARGET:
HintNode = M->getOrInsertNamedMetadata("visc_hint_cpu");
break;
default:
llvm_unreachable("Unsupported Target Hint!");
break;
}
// Gather metadata nodes, and keep those not associated with this function
MDNode* N = MDNode::get(M->getContext(),
ArrayRef<Metadata*>(ValueAsMetadata::get(F)));
std::vector<MDNode*> MDNodes;
for (unsigned i = 0; i < HintNode->getNumOperands(); i++) {
MDNode* MDN = HintNode->getOperand(i);
if (MDN == N) {
continue;
}
MDNodes.push_back(MDN);
}
HintNode->dropAllReferences();
for (unsigned i = 0; i < MDNodes.size(); i++) {
HintNode->addOperand(MDNodes[i]);
}
}
visc::Target getPreferredTarget(Function* F) {
DEBUG(errs() << "Finding preferred target for " << F->getName() << "\n");
Module* M = F->getParent();
......
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