summaryrefslogtreecommitdiff
path: root/backend/src/llvm/llvm_to_gen.cpp
diff options
context:
space:
mode:
authorZhigang Gong <zhigang.gong@intel.com>2014-09-05 14:04:38 +0800
committerZhigang Gong <zhigang.gong@intel.com>2014-09-05 15:47:08 +0800
commit5ab532536133754f21c3c64c599ab3760a88ff6e (patch)
tree10228cab2d38ef562f674cdabc412465798e2afd /backend/src/llvm/llvm_to_gen.cpp
parent334fa9949df93d8996d5082fa8720c2b4c0bc746 (diff)
GBE: avoid one optimization pass to generate wide integer.
Integer type wider than 64 bit is hard to handle on Gen. Let's try to prevent ScalarReplAggregates pass to generate such type of integer. v2: fix compilation error with LLVM 3.3. Signed-off-by: Zhigang Gong <zhigang.gong@intel.com> Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
Diffstat (limited to 'backend/src/llvm/llvm_to_gen.cpp')
-rw-r--r--backend/src/llvm/llvm_to_gen.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/backend/src/llvm/llvm_to_gen.cpp b/backend/src/llvm/llvm_to_gen.cpp
index 8e49cbb9..865d2389 100644
--- a/backend/src/llvm/llvm_to_gen.cpp
+++ b/backend/src/llvm/llvm_to_gen.cpp
@@ -76,14 +76,14 @@ namespace gbe
BVAR(OCL_OUTPUT_CFG_ONLY, false);
using namespace llvm;
- void runFuntionPass(Module &mod, TargetLibraryInfo *libraryInfo)
+ void runFuntionPass(Module &mod, TargetLibraryInfo *libraryInfo, DataLayout &DL)
{
FunctionPassManager FPM(&mod);
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
- FPM.add(new DataLayoutPass(&mod));
+ FPM.add(new DataLayoutPass(DL));
#else
- FPM.add(new DataLayout(&mod));
+ FPM.add(&DL);
#endif
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >=5
@@ -107,14 +107,14 @@ namespace gbe
FPM.doFinalization();
}
- void runModulePass(Module &mod, TargetLibraryInfo *libraryInfo, int optLevel)
+ void runModulePass(Module &mod, TargetLibraryInfo *libraryInfo, DataLayout &DL, int optLevel)
{
llvm::PassManager MPM;
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
- MPM.add(new DataLayoutPass(&mod));
+ MPM.add(new DataLayoutPass(DL));
#else
- MPM.add(new DataLayout(&mod));
+ MPM.add(&DL);
#endif
MPM.add(new TargetLibraryInfo(*libraryInfo));
MPM.add(createTypeBasedAliasAnalysisPass());
@@ -230,6 +230,7 @@ namespace gbe
return false;
Module &mod = *M.get();
+ DataLayout DL(&mod);
Triple TargetTriple(mod.getTargetTriple());
TargetLibraryInfo *libraryInfo = new TargetLibraryInfo(TargetTriple);
@@ -237,19 +238,18 @@ namespace gbe
OUTPUT_BITCODE(AFTER_LINK, mod);
- runFuntionPass(mod, libraryInfo);
- runModulePass(mod, libraryInfo, optLevel);
-
+ runFuntionPass(mod, libraryInfo, DL);
+ runModulePass(mod, libraryInfo, DL, optLevel);
llvm::PassManager passes;
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
- passes.add(new DataLayoutPass(&mod));
+ passes.add(new DataLayoutPass(DL));
#else
- passes.add(new DataLayout(&mod));
+ passes.add(&DL);
#endif
// Print the code before further optimizations
passes.add(createIntrinsicLoweringPass());
passes.add(createFunctionInliningPass(200000));
- passes.add(createScalarReplAggregatesPass()); // Break up allocas
+ passes.add(createScalarReplAggregatesPass(64, true, -1, -1, 64));
passes.add(createLoadStoreOptimizationPass());
passes.add(createRemoveGEPPass(unit));
passes.add(createConstantPropagationPass());