From 765947aaf52caf329f4b60608580e7ca06a24dc0 Mon Sep 17 00:00:00 2001 From: Aditya Atluri Date: Mon, 12 Dec 2016 10:16:58 -0600 Subject: [PATCH 1/4] Changed threadfences to match target parsing by hcc Change-Id: I28fcabbaacd13495b707f263fd09afaead0665fa --- src/hip_ir.ll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hip_ir.ll b/src/hip_ir.ll index d0e2a879a3..21123dd7c0 100644 --- a/src/hip_ir.ll +++ b/src/hip_ir.ll @@ -2,12 +2,12 @@ target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64: target triple = "amdgcn--amdhsa" -define void @__threadfence() #1 { +define linkonce_odr spir_func void @__threadfence() #1 { fence syncscope(2) seq_cst ret void } -define void @__threadfence_block() #1 { +define linkonce_odr spir_func void @__threadfence_block() #1 { fence syncscope(3) seq_cst ret void } From 02468d31fc11425a4531020f87a33bc9d27b7c10 Mon Sep 17 00:00:00 2001 From: Evgeny Mankov Date: Mon, 12 Dec 2016 19:57:19 +0300 Subject: [PATCH 2/4] [HIPIFY] Multiple source files support. --- hipify-clang/src/Cuda2Hip.cpp | 143 ++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 67 deletions(-) diff --git a/hipify-clang/src/Cuda2Hip.cpp b/hipify-clang/src/Cuda2Hip.cpp index c66a2b1b87..31da2537cb 100644 --- a/hipify-clang/src/Cuda2Hip.cpp +++ b/hipify-clang/src/Cuda2Hip.cpp @@ -2106,11 +2106,12 @@ void printStats(std::string fileSource, HipifyPPCallbacks &PPCallbacks, Cuda2Hip int main(int argc, const char **argv) { llvm::sys::PrintStackTraceOnErrorSignal(); - CommonOptionsParser OptionsParser(argc, argv, ToolTemplateCategory, llvm::cl::Required); + CommonOptionsParser OptionsParser(argc, argv, ToolTemplateCategory, llvm::cl::OneOrMore); std::vector fileSources = OptionsParser.getSourcePathList(); std::string dst = OutputFilename; - if (N) { - NoOutput = PrintStats = true; + if (!dst.empty() && fileSources.size() > 1) { + llvm::errs() << "Conflict: -o and multiple source files are specified.\n"; + return 1; } if (NoOutput) { if (Inplace) { @@ -2122,84 +2123,92 @@ int main(int argc, const char **argv) { return 1; } } - if (dst.empty()) { - dst = fileSources[0]; - if (!Inplace) { - size_t pos = dst.rfind("."); - if (pos != std::string::npos && pos+1 < dst.size()) { - dst = dst.substr(0, pos) + ".hip." + dst.substr(pos+1, dst.size()-pos-1); - } else { - dst += ".hip.cu"; + if (N) { + NoOutput = PrintStats = true; + } + int Result = 0; + for (const auto & src : fileSources) { + if (dst.empty()) { + dst = src; + if (!Inplace) { + size_t pos = dst.rfind("."); + if (pos != std::string::npos && pos + 1 < dst.size()) { + dst = dst.substr(0, pos) + ".hip." + dst.substr(pos + 1, dst.size() - pos - 1); + } + else { + dst += ".hip.cu"; + } } } - } else { - if (Inplace) { - llvm::errs() << "Conflict: both -o and -inplace options are specified.\n"; - return 1; + else { + if (Inplace) { + llvm::errs() << "Conflict: both -o and -inplace options are specified.\n"; + return 1; + } + dst += ".hip"; + } + // backup source file since tooling may change "inplace" + if (!NoBackup || !Inplace) { + std::ifstream source(src, std::ios::binary); + std::ofstream dest(Inplace ? dst + ".prehip" : dst, std::ios::binary); + dest << source.rdbuf(); + source.close(); + dest.close(); } - dst += ".hip"; - } - // backup source file since tooling may change "inplace" - if (!NoBackup || !Inplace) { - std::ifstream source(fileSources[0], std::ios::binary); - std::ofstream dest(Inplace ? dst + ".prehip" : dst, std::ios::binary); - dest << source.rdbuf(); - source.close(); - dest.close(); - } - RefactoringTool Tool(OptionsParser.getCompilations(), dst); - ast_matchers::MatchFinder Finder; - HipifyPPCallbacks PPCallbacks(&Tool.getReplacements()); - Cuda2HipCallback Callback(&Tool.getReplacements(), &Finder, &PPCallbacks); + RefactoringTool Tool(OptionsParser.getCompilations(), dst); + ast_matchers::MatchFinder Finder; + HipifyPPCallbacks PPCallbacks(&Tool.getReplacements()); + Cuda2HipCallback Callback(&Tool.getReplacements(), &Finder, &PPCallbacks); - addAllMatchers(Finder, &Callback); + addAllMatchers(Finder, &Callback); - auto action = newFrontendActionFactory(&Finder, &PPCallbacks); - std::vector compilationStages; - compilationStages.push_back("--cuda-host-only"); - Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster(compilationStages[0], ArgumentInsertPosition::BEGIN)); - Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster("-std=c++11")); + auto action = newFrontendActionFactory(&Finder, &PPCallbacks); + std::vector compilationStages; + compilationStages.push_back("--cuda-host-only"); + Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster(compilationStages[0], ArgumentInsertPosition::BEGIN)); + Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster("-std=c++11")); #if defined(HIPIFY_CLANG_RES) - Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster("-resource-dir=" HIPIFY_CLANG_RES)); + Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster("-resource-dir=" HIPIFY_CLANG_RES)); #endif - Tool.appendArgumentsAdjuster(getClangSyntaxOnlyAdjuster()); - int Result = Tool.run(action.get()); - Tool.clearArgumentsAdjusters(); - - LangOptions DefaultLangOptions; - IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); - TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts); - DiagnosticsEngine Diagnostics( + Tool.appendArgumentsAdjuster(getClangSyntaxOnlyAdjuster()); + Result += Tool.run(action.get()); + Tool.clearArgumentsAdjusters(); + + LangOptions DefaultLangOptions; + IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); + TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts); + DiagnosticsEngine Diagnostics( IntrusiveRefCntPtr(new DiagnosticIDs()), &*DiagOpts, &DiagnosticPrinter, false); - DEBUG(dbgs() << "Replacements collected by the tool:\n"); - for (const auto &r : Tool.getReplacements()) { - DEBUG(dbgs() << r.toString() << "\n"); - } + DEBUG(dbgs() << "Replacements collected by the tool:\n"); + for (const auto &r : Tool.getReplacements()) { + DEBUG(dbgs() << r.toString() << "\n"); + } - SourceManager Sources(Diagnostics, Tool.getFiles()); - Rewriter Rewrite(Sources, DefaultLangOptions); + SourceManager Sources(Diagnostics, Tool.getFiles()); + Rewriter Rewrite(Sources, DefaultLangOptions); - if (!Tool.applyAllReplacements(Rewrite)) { - DEBUG(dbgs() << "Skipped some replacements.\n"); - } - if (!NoOutput) { - Result = Rewrite.overwriteChangedFiles(); - } - if (!Inplace && !NoOutput) { - size_t pos = dst.rfind("."); - if (pos != std::string::npos) { - rename(dst.c_str(), dst.substr(0, pos).c_str()); + if (!Tool.applyAllReplacements(Rewrite)) { + DEBUG(dbgs() << "Skipped some replacements.\n"); + } + if (!NoOutput) { + Result += Rewrite.overwriteChangedFiles(); + } + if (!Inplace && !NoOutput) { + size_t pos = dst.rfind("."); + if (pos != std::string::npos) { + rename(dst.c_str(), dst.substr(0, pos).c_str()); + } + } + if (NoOutput) { + remove(dst.c_str()); + } + dst.clear(); + if (PrintStats) { + printStats(src, PPCallbacks, Callback); } } - if (NoOutput) { - remove(dst.c_str()); - } - if (PrintStats) { - printStats(fileSources[0], PPCallbacks, Callback); - } - return Result; } From 95ae5145118a804170bf6aef0c40406be6691f42 Mon Sep 17 00:00:00 2001 From: Evgeny Mankov Date: Mon, 12 Dec 2016 20:03:01 +0300 Subject: [PATCH 3/4] [HIPIFY] Rename -n to -examine --- hipify-clang/src/Cuda2Hip.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hipify-clang/src/Cuda2Hip.cpp b/hipify-clang/src/Cuda2Hip.cpp index 31da2537cb..b4e364c52f 100644 --- a/hipify-clang/src/Cuda2Hip.cpp +++ b/hipify-clang/src/Cuda2Hip.cpp @@ -2019,7 +2019,7 @@ static cl::opt PrintStats("print-stats", cl::value_desc("print-stats"), cl::cat(ToolTemplateCategory)); -static cl::opt N("n", +static cl::opt Examine("examine", cl::desc("Combines -no-output and -print-stats options"), cl::value_desc("n"), cl::cat(ToolTemplateCategory)); @@ -2123,7 +2123,7 @@ int main(int argc, const char **argv) { return 1; } } - if (N) { + if (Examine) { NoOutput = PrintStats = true; } int Result = 0; From 22bce4037ed63f95150f032b5b402d9c2e27e839 Mon Sep 17 00:00:00 2001 From: Maneesh Gupta Date: Tue, 13 Dec 2016 11:31:45 +0530 Subject: [PATCH 4/4] Disable incomplete IPC APIs Change-Id: I322d7fc78aafa0ff558d5caa75e06950f6f6feba --- src/hip_hcc.h | 2 ++ src/hip_memory.cpp | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hip_hcc.h b/src/hip_hcc.h index 82290bc489..3228222d69 100644 --- a/src/hip_hcc.h +++ b/src/hip_hcc.h @@ -375,7 +375,9 @@ struct LockedBase { class ihipIpcMemHandle_t { public: +#ifdef ENABLE_HIP_IPC hsa_amd_ipc_memory_t ipc_handle; ///< ipc memory handle on ROCr +#endif char reserved[HIP_IPC_HANDLE_SIZE]; size_t psize; }; diff --git a/src/hip_memory.cpp b/src/hip_memory.cpp index f2ab6d19a0..ee62ecab61 100644 --- a/src/hip_memory.cpp +++ b/src/hip_memory.cpp @@ -1038,7 +1038,7 @@ hipError_t hipMemGetAddressRange ( hipDeviceptr_t* pbase, size_t* psize, hipDevi //TODO: IPC implementaiton: - +#ifdef ENABLE_HIP_IPC hipError_t hipIpcGetMemHandle(hipIpcMemHandle_t* handle, void* devPtr){ HIP_INIT_API ( handle, devPtr); hipError_t hipStatus = hipSuccess; @@ -1098,3 +1098,4 @@ hipError_t hipIpcCloseMemHandle(void *devPtr){ // hipError_t hipIpcOpenEventHandle(hipEvent_t* event, hipIpcEventHandle_t handle){ // return hipSuccess; // } +#endif