summaryrefslogtreecommitdiff
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
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>
-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 8e49cbb..865d238 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());