[Beignet] [PATCH 1/3] backend/src/backend: Handle -dump-opt-llvm=[PATH] in clCompileProgram and clBuildProgram OpenCL API
Manasi Navare
manasi.d.navare at intel.com
Tue Aug 18 04:17:06 PDT 2015
This is a resubmission of the patch with support for LLVM 3.4
Allows the user to request a dump of the LLVM-generated IR to the file
specified in [PATH] through clCompileProgram options
Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>
---
backend/src/backend/program.cpp | 61 +++++++++++++++++++++--------------------
1 file changed, 31 insertions(+), 30 deletions(-)
diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
index c02096f..d9e6416 100644
--- a/backend/src/backend/program.cpp
+++ b/backend/src/backend/program.cpp
@@ -519,7 +519,7 @@ namespace gbe {
BVAR(OCL_OUTPUT_BUILD_LOG, false);
static bool buildModuleFromSource(const char* input, llvm::Module** out_module, llvm::LLVMContext* llvm_ctx,
- std::vector<std::string>& options, size_t stringSize, char *err,
+ std::string dumpLLVMFileName, std::vector<std::string>& options, size_t stringSize, char *err,
size_t *errSize) {
// Arguments to pass to the clang frontend
vector<const char *> args;
@@ -628,6 +628,34 @@ namespace gbe {
#endif
*out_module = module;
+
+// Dump the LLVM if requested.
+#if (LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR < 6)
+ if (!dumpLLVMFileName.empty()) {
+ std::string err;
+ llvm::raw_fd_ostream ostream (dumpLLVMFileName.c_str(),
+ err,
+ #if LLVM_VERSION_MINOR == 3
+ 0
+ #else
+ llvm::sys::fs::F_None
+ #endif
+ );
+
+ if (err.empty()) {
+ (*out_module)->print(ostream, 0);
+ } //Otherwise, you'll have to make do without the dump.
+ }
+#else
+ if (!dumpLLVMFileName.empty()) {
+ std::error_code err;
+ llvm::raw_fd_ostream ostream (dumpLLVMFileName.c_str(),
+ err, llvm::sys::fs::F_None);
+ if (!err) {
+ (*out_module)->print(ostream, 0);
+ } //Otherwise, you'll have to make do without the dump.
+ }
+#endif
return true;
}
@@ -808,7 +836,7 @@ namespace gbe {
if (!llvm::llvm_is_multithreaded())
llvm_mutex.lock();
- if (buildModuleFromSource(clName.c_str(), &out_module, llvm_ctx, clOpt,
+ if (buildModuleFromSource(clName.c_str(), &out_module, llvm_ctx, dumpLLVMFileName, clOpt,
stringSize, err, errSize)) {
// Now build the program from llvm
size_t clangErrSize = 0;
@@ -819,33 +847,6 @@ namespace gbe {
clangErrSize = *errSize;
}
- // Dump the LLVM if requested.
- #if (LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR < 6)
- if (!dumpLLVMFileName.empty()) {
- std::string err;
- llvm::raw_fd_ostream ostream (dumpLLVMFileName.c_str(),
- err,
- #if LLVM_VERSION_MINOR == 3
- 0
- #else
- llvm::sys::fs::F_RW
- #endif
- );
- if (err.empty()) {
- out_module->print(ostream, 0);
- } //Otherwise, you'll have to make do without the dump.
- }
- #else
- if (!dumpLLVMFileName.empty()) {
- std::error_code err;
- llvm::raw_fd_ostream ostream (dumpLLVMFileName.c_str(),
- err, llvm::sys::fs::F_RW);
- if (!err) {
- out_module->print(ostream, 0);
- } //Otherwise, you'll have to make do without the dump.
- }
- #endif
-
FILE *asmDumpStream = fopen(dumpASMFileName.c_str(), "w");
if (asmDumpStream)
fclose(asmDumpStream);
@@ -891,7 +892,7 @@ namespace gbe {
//for some functions, so we use global context now, need switch to new context later.
llvm::Module * out_module;
llvm::LLVMContext* llvm_ctx = &llvm::getGlobalContext();
- if (buildModuleFromSource(clName.c_str(), &out_module, llvm_ctx, clOpt,
+ if (buildModuleFromSource(clName.c_str(), &out_module, llvm_ctx, dumpLLVMFileName, clOpt,
stringSize, err, errSize)) {
// Now build the program from llvm
if (err != NULL) {
--
1.9.1
More information about the Beignet
mailing list