From 6de76f8a6ff5fe5c842ecc2b7ab4229ee8a53b25 Mon Sep 17 00:00:00 2001 From: Prakalp Srivastava <psrivas2@illinois.edu> Date: Sat, 5 Mar 2016 20:35:50 -0600 Subject: [PATCH] Added malloc intrinsic in IntrinsicsVISC.td and barrier code gen to NVPTX pass --- llvm/include/llvm/IR/IntrinsicsVISC.td | 3 +++ .../DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp | 21 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/IR/IntrinsicsVISC.td b/llvm/include/llvm/IR/IntrinsicsVISC.td index 2dcd8a2f33..7f56304384 100644 --- a/llvm/include/llvm/IR/IntrinsicsVISC.td +++ b/llvm/include/llvm/IR/IntrinsicsVISC.td @@ -174,4 +174,7 @@ let TargetPrefix = "visc" in { */ def int_visc_getVectorLength : Intrinsic<[llvm_i32_ty], [], []>; + /* ============ Atomic intrinsics ============= */ + + } diff --git a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp index fa99523df4..942b79f686 100644 --- a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp +++ b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp @@ -954,7 +954,7 @@ void CGT_NVPTX::codeGen(DFLeafNode* N) { assert(!BuildDFG::isViscLaunchIntrinsic(I) && "Launch intrinsic within a dataflow graph!"); assert(!BuildDFG::isViscGraphIntrinsic(I) && "VISC graph intrinsic within a leaf dataflow node!"); - if (BuildDFG::isViscQueryIntrinsic(I)) { + if (BuildDFG::isViscIntrinsic(I)) { IntrinsicInst* II = dyn_cast<IntrinsicInst>(I); IntrinsicInst* ArgII; DFNode* ArgDFNode; @@ -1159,6 +1159,25 @@ void CGT_NVPTX::codeGen(DFLeafNode* N) { IItoRemove.push_back(II); } break; + case Intrinsic::visc_barrier: + { + errs() << F_nvptx->getName() << "\t: Handling barrier\n"; + errs() << "Substitute with barrier()\n"; + errs() << *II << "\n"; + FunctionType* FT = + FunctionType::get(Type::getVoidTy(getGlobalContext() /*KernelM.getContext()*/), + std::vector<Type*>(1, Type::getInt32Ty(getGlobalContext() /*KernelM.getContext()*/)), + false); + Function* OpenCLFunction = cast<Function> + (KernelM.getOrInsertFunction(StringRef("barrier"), FT)); + CallInst* CI = CallInst::Create(OpenCLFunction, + ArrayRef<Value*>(ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 1)), + "", II); + II->replaceAllUsesWith(CI); + IItoRemove.push_back(II); + + } + break; default: assert(false && "Unknown VISC Intrinsic!"); break; -- GitLab