Set all function's linkage to LinkOnceAnyLinkage, then Inlining pass
could delete the inlined functions.
And reorder createFunctionInliningPass before createStripAttributesPass
can reduce the compilation time significant, but haven't found the root
casue.

Signed-off-by: Yang Rong <rong.r.y...@intel.com>
---
 backend/src/llvm/StripAttributes.cpp | 6 ++++--
 backend/src/llvm/llvm_to_gen.cpp     | 6 +++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/backend/src/llvm/StripAttributes.cpp 
b/backend/src/llvm/StripAttributes.cpp
index 3bf3853..9d07c29 100644
--- a/backend/src/llvm/StripAttributes.cpp
+++ b/backend/src/llvm/StripAttributes.cpp
@@ -89,10 +89,12 @@ namespace {
 char StripAttributes::ID = 0;
 
 bool StripAttributes::runOnFunction(Function &Func) {
-  if (!gbe::isKernelFunction(Func))
-    Func.addFnAttr(Attribute::AlwaysInline);
   Func.setCallingConv(CallingConv::C);
   Func.setLinkage(GlobalValue::ExternalLinkage);
+  if (!gbe::isKernelFunction(Func)) {
+    Func.addFnAttr(Attribute::AlwaysInline);
+    Func.setLinkage(GlobalValue::LinkOnceAnyLinkage);
+  }
 
   for (Function::iterator BB = Func.begin(), E = Func.end();
        BB != E; ++BB) {
diff --git a/backend/src/llvm/llvm_to_gen.cpp b/backend/src/llvm/llvm_to_gen.cpp
index e108810..a889c56 100644
--- a/backend/src/llvm/llvm_to_gen.cpp
+++ b/backend/src/llvm/llvm_to_gen.cpp
@@ -136,6 +136,9 @@ namespace gbe
     MPM.add(createBasicAliasAnalysisPass());
 #endif
     MPM.add(createIntrinsicLoweringPass());
+    MPM.add(createBarrierNodupPass(false));   // remove noduplicate fnAttr 
before inlining.
+    MPM.add(createFunctionInliningPass(20000));
+    MPM.add(createBarrierNodupPass(true));    // restore noduplicate fnAttr 
after inlining.
     MPM.add(createStripAttributesPass());     // Strip unsupported attributes 
and calling conventions.
     MPM.add(createSamplerFixPass());
     MPM.add(createGlobalOptimizerPass());     // Optimize out global vars
@@ -146,9 +149,6 @@ namespace gbe
     MPM.add(createInstructionCombiningPass());// Clean up after IPCP & DAE
     MPM.add(createCFGSimplificationPass());   // Clean up after IPCP & DAE
     MPM.add(createPruneEHPass());             // Remove dead EH info
-    MPM.add(createBarrierNodupPass(false));   // remove noduplicate fnAttr 
before inlining.
-    MPM.add(createFunctionInliningPass(20000));
-    MPM.add(createBarrierNodupPass(true));    // restore noduplicate fnAttr 
after inlining.
 #if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 9
     MPM.add(createPostOrderFunctionAttrsLegacyPass());
 #elif LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 8
-- 
2.7.4

_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to