From c68716d8464972910d454190c50a12c25d69d442 Mon Sep 17 00:00:00 2001
From: Prakalp Srivastava <prakalps@gmail.com>
Date: Fri, 5 Jun 2015 15:15:45 -0500
Subject: [PATCH] Fixed sgemm compilation issue. Avoid invoke inst by using
 flag -fno-exceptions

---
 llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp    | 2 ++
 llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc | 4 ++--
 llvm/test/VISC/parboil/common/include/visc.h             | 4 ++--
 llvm/test/VISC/parboil/common/mk/visc.mk                 | 2 +-
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
index de4da74835..0db9f23134 100644
--- a/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
+++ b/llvm/lib/Transforms/DFG2LLVM_NVPTX/DFG2LLVM_NVPTX.cpp
@@ -347,6 +347,7 @@ void CodeGenTraversal::initRuntimeAPI() {
   Function* VI = M.getFunction("llvm.visc.init");
   assert(VI->getNumUses() == 1 && "__visc__init should only be used once");
 
+  DEBUG(errs() << "Gen Code to initialize NVPTX Timer\n");
   InitCall = cast<Instruction>(*VI->use_begin());
   initializeTimerSet(InitCall);
   switchToTimer(visc_TimerID_INIT_CTX, InitCall);
@@ -358,6 +359,7 @@ void CodeGenTraversal::initRuntimeAPI() {
   errs() << *VC << "\n";
   assert(VC->getNumUses() == 1 && "__visc__clear should only be used once");
 
+  DEBUG(errs() << "Gen Code to print NVPTX Timer\n");
   CleanupCall = cast<Instruction>(*VC->use_begin());
   printTimerSet(CleanupCall);
 
diff --git a/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc b/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc
index b70f9e5655..81d791568b 100644
--- a/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc
+++ b/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc
@@ -73,12 +73,11 @@ __attribute__((noinline)) void basicSgemm( char transa, char transb, int m, int
     unsigned db[2] = {TILE_SZ,TILE_SZ};
     unsigned dg[2] = {m/TILE_SZ*db[0],n/TILE_SZ*db[1]};
 
-    void* sgemmDFG = __visc__node((void*) mysgemmNT, 2, 2, db[0], db[1], dg[0]/db[0], dg[1]/db[1], 12, A, bytesA, lda, B, bytesB, ldb, C, bytesC, ldc, k, alpha, beta, 0);
+    unsigned sgemmDFG = __visc__node(mysgemmNT, 2, 2, db[0], db[1], dg[0]/db[0], dg[1]/db[1], 12, A, bytesA, lda, B, bytesB, ldb, C, bytesC, ldc, k, alpha, beta, 0);
     __visc__wait(sgemmDFG);
 }
 
 int main (int argc, char *argv[]) {
-    __visc__init();
 
     struct pb_Parameters *params;
     struct pb_TimerSet timers;
@@ -89,6 +88,7 @@ int main (int argc, char *argv[]) {
     std::vector<float> matA, matBT;
 
     pb_InitializeTimerSet(&timers);
+    __visc__init();
 
     /* Read command line. Expect 3 inputs: A, B and B^T
        in column-major layout*/
diff --git a/llvm/test/VISC/parboil/common/include/visc.h b/llvm/test/VISC/parboil/common/include/visc.h
index 5daab54d3a..e311c73021 100644
--- a/llvm/test/VISC/parboil/common/include/visc.h
+++ b/llvm/test/VISC/parboil/common/include/visc.h
@@ -9,8 +9,8 @@
 #ifdef __cplusplus
 extern "C" {
 void __visc__attributes(unsigned, ...);
-void __visc__wait(void*);
-void* __visc__node(void*, unsigned, unsigned, ...);
+void __visc__wait(unsigned);
+unsigned __visc__node(...);
 void __visc__init();
 void __visc__cleanup();
 #endif
diff --git a/llvm/test/VISC/parboil/common/mk/visc.mk b/llvm/test/VISC/parboil/common/mk/visc.mk
index bd6846a1b4..58f032a734 100644
--- a/llvm/test/VISC/parboil/common/mk/visc.mk
+++ b/llvm/test/VISC/parboil/common/mk/visc.mk
@@ -2,7 +2,7 @@
 
 # Default language wide options
 LANG_CFLAGS=-I$(PARBOIL_ROOT)/common/include
-LANG_CXXFLAGS=$(LANG_CFLAGS)
+LANG_CXXFLAGS=$(LANG_CFLAGS) -fno-exceptions
 LANG_LDFLAGS=-lOpenCL -L$(OPENCL_LIB_PATH) -lrt
 
 CFLAGS=$(LANG_CFLAGS) $(PLATFORM_CFLAGS) $(APP_CFLAGS)
-- 
GitLab