backend/src/backend: Handle -dump-opt-llvm=[PATH]

Submitted by Manasi Navare on Aug. 3, 2015, 11:41 p.m.

Details

Message ID 87E1A67218970041879FDD2045F7145D027034A4@ORSMSX106.amr.corp.intel.com
State New
Headers show

Not browsing as part of any series.

Commit Message

Manasi Navare Aug. 3, 2015, 11:41 p.m.
Hi Ruiling,

Below is the patch I have resubmitted with the requested changes to support LLVM-3.6.
This patch below enables a feature (LLVM dump) for the Intel tool OpenCL Code Builder. Kindly review the patch below.

Regards
Manasi

-----Original Message-----
From: Navare, Manasi D 
Sent: Monday, August 3, 2015 3:37 AM
To: Song, Ruiling; beignet@lists.freedesktop.org
Cc: Ekstrand, Laura D; Navare, Manasi D
Subject: [PATCH] backend/src/backend: Handle -dump-opt-llvm=[PATH]

From: Laura Ekstrand <laura.d.ekstrand@intel.com>

Allows the user to request a dump of the LLVM-generated IR to the file specified in [PATH].

Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
---
 backend/src/backend/program.cpp | 37 ++++++++++++++++++++++++++++++++++---
 1 file changed, 34 insertions(+), 3 deletions(-)

           clOpt.push_back("__FAST_RELAXED_MATH__=1");
         }
 
+        if(str.find("-dump-opt-llvm=") != std::string::npos) {
+          dumpLLVMFileName = str.substr(str.find("=") + 1);
+          continue; // Don't push this str back; ignore it.
+        }
+
         clOpt.push_back(str);
       }
       free(str);
@@ -781,8 +787,10 @@ namespace gbe {
     int optLevel = 1;
     std::vector<std::string> clOpt;
     std::string clName;
-    if (!processSourceAndOption(source, options, NULL, clOpt, clName,
-                                optLevel, stringSize, err, errSize))
+    std::string dumpLLVMFileName;
+    if (!processSourceAndOption(source, options, NULL, clOpt,
+                                dumpLLVMFileName, clName, optLevel,
+                                stringSize, err, errSize))
       return NULL;
 
     gbe_program p;
@@ -804,6 +812,27 @@ 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, llvm::sys::fs::F_RW);
+        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.bool()) {
+          out_module->print(ostream, 0);
+        } //Otherwise, you'll have to make do without the dump.
+      }
+      #endif
+
       p = gbe_program_new_from_llvm(deviceID, NULL, out_module, llvm_ctx, stringSize,
                                     err, errSize, optLevel);
       if (err != NULL)
@@ -834,7 +863,9 @@ namespace gbe {
     int optLevel = 1;
     std::vector<std::string> clOpt;
     std::string clName;
-    if (!processSourceAndOption(source, options, temp_header_path, clOpt, clName,
+    std::string dumpLLVMFileName;
+    if (!processSourceAndOption(source, options, temp_header_path, clOpt,
+                                dumpLLVMFileName, clName,
                                 optLevel, stringSize, err, errSize))
       return NULL;
 
--
1.9.1

Patch hide | download patch | download mbox

diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp index e4cdeaa..a9b5ff5 100644
--- a/backend/src/backend/program.cpp
+++ b/backend/src/backend/program.cpp
@@ -640,6 +640,7 @@  namespace gbe {
                                      const char *options,
                                      const char *temp_header_path,
                                      std::vector<std::string>& clOpt,
+                                     std::string& dumpLLVMFileName,
                                      std::string& clName,
                                      int& optLevel,
                                      size_t stringSize, @@ -719,6 +720,11 @@ namespace gbe {