diff --git a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp index 681249231e630d09d0212a689ce61350fbc94b90..867c3369c844d3c9e636fefd38ccfd1a845952e6 100644 --- a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp +++ b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp @@ -90,6 +90,8 @@ namespace { //Functions std::string getKernelsModuleName(Module &M); + void changeAddrspace(int i); + void addCLMetadata(Function* F); void writeKernelsModule(); void transformFunctionToVoid(Function* F); void initRuntimeAPI(); @@ -116,8 +118,10 @@ namespace { GlobalVariable* gv = &*mi; gvv.push_back(gv); } - for (std::vector<GlobalVariable*>::iterator vi = gvv.begin(); vi != gvv.end(); ++vi) + for (std::vector<GlobalVariable*>::iterator vi = gvv.begin(); vi != gvv.end(); ++vi) { + (*vi)->replaceAllUsesWith(UndefValue::get((*vi)->getType())); (*vi)->eraseFromParent(); + } std::vector<Function*> fv = std::vector<Function*>(); for (Module::iterator mi = KernelM.begin(), @@ -125,8 +129,10 @@ namespace { Function* f = &*mi; fv.push_back(f); } - for (std::vector<Function*>::iterator vi = fv.begin(); vi != fv.end(); ++vi) + for (std::vector<Function*>::iterator vi = fv.begin(); vi != fv.end(); ++vi) { + (*vi)->replaceAllUsesWith(UndefValue::get((*vi)->getType())); (*vi)->eraseFromParent(); + } std::vector<GlobalAlias*> av = std::vector<GlobalAlias*>(); for (Module::alias_iterator mi = KernelM.alias_begin(), @@ -134,12 +140,16 @@ namespace { GlobalAlias* a = &*mi; av.push_back(a); } - for (std::vector<GlobalAlias*>::iterator vi = av.begin(); vi != av.end(); ++vi) + for (std::vector<GlobalAlias*>::iterator vi = av.begin(); vi != av.end(); ++vi) { + (*vi)->replaceAllUsesWith(UndefValue::get((*vi)->getType())); (*vi)->eraseFromParent(); + } changeDataLayout(KernelM); changeTargetTriple(KernelM); + DEBUG(errs() << KernelM); + } virtual void visit(DFInternalNode* N) { @@ -553,6 +563,7 @@ namespace { // Now the remaining nodes to be visited should be ignored KernelLaunchNode = NULL; + writeKernelsModule(); } else { DEBUG(errs() << "Found intermediate node. Generating device code.\n"); //TODO @@ -830,8 +841,10 @@ namespace { re = IItoRemove.rend(); ri != re; ++ri) (*ri)->eraseFromParent(); - return; - } + DEBUG(errs() << KernelM); + + return; + } bool DFG2LLVM_NVPTX::runOnModule(Module &M) { @@ -849,7 +862,6 @@ namespace { // Initiate code generation for root DFNode CGTVisitor->visit(Root); - //TODO: Edit module epilogue to remove the VISC intrinsic declarations return true; @@ -860,12 +872,20 @@ namespace { return mid.append("_kernels.ll"); } + void CodeGenTraversal::changeAddrspace(int i) { + } + + void CodeGenTraversal::addCLMetadata(Function* F) { + } + void CodeGenTraversal::writeKernelsModule() { //TODO: Add metadata char* ErrorMessage = NULL; LLVMModuleRef KernelMRef = wrap(&KernelM); + errs() << "Writing to File --- "; + errs() << getKernelsModuleName(M).c_str() << "\n"; LLVMPrintModuleToFile(KernelMRef, getKernelsModuleName(M).c_str(), &ErrorMessage);