[Beignet] [PATCH] GBE: reorder the LLVM pass to reduce the compilation time.

Yang Rong rong.r.yang at intel.com
Fri Dec 16 08:38:12 UTC 2016


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.yang at 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



More information about the Beignet mailing list