summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhigang Gong <zhigang.gong@intel.com>2014-09-12 13:45:40 +0800
committerZhigang Gong <zhigang.gong@intel.com>2014-09-12 16:03:51 +0800
commit64d095e6d8a05991b749c266812980ee2997efe5 (patch)
tree2346ce6bda0bade7cbaf23ac2fa749f9cba2d483
parent4ae1bb710277e233bf78388d80911a4621a7fc1a (diff)
downloadbeignet-64d095e6d8a05991b749c266812980ee2997efe5.tar.gz
GBE: fix multiple files compilation bugs.
If we want to link multiple files together, and one kernel function need refer other kernel functions in other files, we must not set those functions as linked once attribute. Signed-off-by: Zhigang Gong <zhigang.gong@intel.com> Reviewed-by: He Junyan <junyan.he@inbox.com> Tested-by: "Meng, Mengmeng" <mengmeng.meng@intel.com> Reviewed-by: "Song, Ruiling" <ruiling.song@intel.com>
-rw-r--r--backend/src/backend/gen_program.cpp4
-rw-r--r--backend/src/llvm/llvm_to_gen.cpp7
2 files changed, 8 insertions, 3 deletions
diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
index 3e16fd6b..53245875 100644
--- a/backend/src/backend/gen_program.cpp
+++ b/backend/src/backend/gen_program.cpp
@@ -56,6 +56,7 @@
#include "backend/gen_reg_allocation.hpp"
#include "ir/unit.hpp"
#include "llvm/llvm_to_gen.hpp"
+#include "llvm/llvm_gen_backend.hpp"
#include <clang/CodeGen/CodeGenAction.h>
@@ -371,9 +372,10 @@ namespace gbe {
}
for (llvm::Module::iterator I = src->begin(), E = src->end(); I != E; ++I) {
+ llvm::Function *F = llvm::dyn_cast<llvm::Function>(I);
+ if (F && isKernelFunction(*F)) continue;
I->setLinkage(llvm::GlobalValue::LinkOnceAnyLinkage);
}
-
llvm::Module* dst = (llvm::Module*)((GenProgram*)dst_program)->module;
llvm::Linker::LinkModules( dst,
src,
diff --git a/backend/src/llvm/llvm_to_gen.cpp b/backend/src/llvm/llvm_to_gen.cpp
index 755793ec..84ba3833 100644
--- a/backend/src/llvm/llvm_to_gen.cpp
+++ b/backend/src/llvm/llvm_to_gen.cpp
@@ -86,10 +86,13 @@ namespace gbe
FPM.add(new DataLayout(DL));
#endif
+ // XXX remove the verifier pass to workaround a non-fatal error.
+ // add this pass cause the Clang abort with the following error message:
+ // "Global is external, but doesn't have external or weak linkage"
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >=5
- FPM.add(createVerifierPass(true));
+ //FPM.add(createVerifierPass(true));
#else
- FPM.add(createVerifierPass());
+ //FPM.add(createVerifierPass());
#endif
FPM.add(new TargetLibraryInfo(*libraryInfo));
FPM.add(createTypeBasedAliasAnalysisPass());