From 703f272d39160d3e2d24d402f196899722212d75 Mon Sep 17 00:00:00 2001 From: Prakalp Srivastava <psrivas2@illinois.edu> Date: Sat, 5 Mar 2016 15:13:49 -0600 Subject: [PATCH] Fixed bug: While finding allocation node, the code was assuming source of an edge to be from parent node, whereas an edge from parent node has Entry node as its source. Hence the check SrcDFNode != PNode was always true. Changed to !SrcDFNode->isDummyNode() --- llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp index b3ea4c6216..fa99523df4 100644 --- a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp +++ b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp @@ -835,6 +835,7 @@ void CGT_NVPTX::codeGen(DFLeafNode* N) { // Checking which node is the kernel launch DFNode* PNode = N->getParent(); + errs() << "Parent Node: " << PNode << " " << PNode->getFuncPointer()->getName() << "\n"; int pLevel = PNode->getLevel(); int pReplFactor = PNode->getNumOfDim(); @@ -900,7 +901,7 @@ void CGT_NVPTX::codeGen(DFLeafNode* N) { } else { errs() << "WARNING: Visiting a node for which code already generated!\n"; } - + transformFunctionToVoid(F_nvptx); @@ -910,9 +911,10 @@ void CGT_NVPTX::codeGen(DFLeafNode* N) { for (DFNode::const_indfedge_iterator ieb = N->indfedge_begin(), iee = N->indfedge_end(); ieb != iee; ++ieb) { DFNode *SrcDFNode = (*ieb)->getSourceDF(); - errs() << "Found edge from node: "<< SrcDFNode->getFuncPointer()->getName() << "\n"; + errs() << "Found edge from node: " << " " << SrcDFNode->getFuncPointer()->getName() << "\n"; + errs() << "Current Node: " << N->getFuncPointer()->getName() << "\n"; errs() << "isAllocationNode = "<< SrcDFNode->isAllocationNode() << "\n"; - if (SrcDFNode != PNode) { + if (!SrcDFNode->isDummyNode()) { assert(SrcDFNode->isAllocationNode()); kernel->AllocationNode = dyn_cast<DFLeafNode>(SrcDFNode); kernel->allocInArgMap = SrcDFNode->getInArgMap(); @@ -1333,8 +1335,9 @@ void CGT_NVPTX::writeKernelsModule() { void CGT_NVPTX::transformFunctionToVoid(Function* F) { + DEBUG(errs() << "Transforming function to void: " << F->getName() << "\n"); // FIXME: Maybe do that using the Node? - StructType* FRetTy = cast<StructType>(F->getReturnType()); + StructType* FRetTy = dyn_cast<StructType>(F->getReturnType()); assert(FRetTy && "Return Type must always be a struct"); // Keeps return statements, because we will need to replace them -- GitLab