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);