]> granicus.if.org Git - llvm/commitdiff
[LTO] Add ability to parse AA pipelines.
authorDavide Italiano <davide@freebsd.org>
Fri, 16 Sep 2016 21:03:21 +0000 (21:03 +0000)
committerDavide Italiano <davide@freebsd.org>
Fri, 16 Sep 2016 21:03:21 +0000 (21:03 +0000)
This is supposed to be a drop in replacement for what lld
provides via --lto-newpm-aa-pipeline.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281774 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/LTO/Config.h
lib/LTO/LTOBackend.cpp
test/tools/llvm-lto2/X86/pipeline.ll
tools/llvm-lto2/llvm-lto2.cpp

index 3d19ab6049787c31da6f18b7d1907212b3d64cf4..39bddcd3adaa640c4effca2b4340265cb797406f 100644 (file)
@@ -83,6 +83,11 @@ struct Config {
   /// manager as the old one doesn't have this ability.
   std::string OptPipeline;
 
+  // If this field is set, it has the same effect of specifying an AA pipeline
+  // identified by the string. Only works with the new pass manager, in
+  // conjunction OptPipeline.
+  std::string AAPipeline;
+
   /// Setting this field will replace target triples in input files with this
   /// triple.
   std::string OverrideTriple;
@@ -170,6 +175,7 @@ struct Config {
         CGOptLevel(std::move(X.CGOptLevel)), OptLevel(std::move(X.OptLevel)),
         DisableVerify(std::move(X.DisableVerify)),
         OptPipeline(std::move(X.OptPipeline)),
+        AAPipeline(std::move(X.AAPipeline)),
         OverrideTriple(std::move(X.OverrideTriple)),
         DefaultTriple(std::move(X.DefaultTriple)),
         ShouldDiscardValueNames(std::move(X.ShouldDiscardValueNames)),
@@ -194,6 +200,7 @@ struct Config {
     OptLevel = std::move(X.OptLevel);
     DisableVerify = std::move(X.DisableVerify);
     OptPipeline = std::move(X.OptPipeline);
+    AAPipeline = std::move(X.AAPipeline);
     OverrideTriple = std::move(X.OverrideTriple);
     DefaultTriple = std::move(X.DefaultTriple);
     ShouldDiscardValueNames = std::move(X.ShouldDiscardValueNames);
index 76b20b5130feb714cea1f5472e1fe9569c936c18..9e53972a9d428539666742f0ecc9e25ee8ee48a4 100644 (file)
@@ -124,9 +124,17 @@ createTargetMachine(Config &Conf, StringRef TheTriple,
 
 static void runNewPMCustomPasses(Module &Mod, TargetMachine *TM,
                                  std::string PipelineDesc,
+                                 std::string AAPipelineDesc,
                                  bool DisableVerify) {
   PassBuilder PB(TM);
   AAManager AA;
+
+  // Parse a custom AA pipeline if asked to.
+  if (!AAPipelineDesc.empty())
+    if (!PB.parseAAPipeline(AA, AAPipelineDesc))
+      report_fatal_error("unable to parse AA pipeline description: " +
+                         AAPipelineDesc);
+
   LoopAnalysisManager LAM;
   FunctionAnalysisManager FAM;
   CGSCCAnalysisManager CGAM;
@@ -185,7 +193,8 @@ bool opt(Config &Conf, TargetMachine *TM, unsigned Task, Module &Mod,
   if (Conf.OptPipeline.empty())
     runOldPMPasses(Conf, Mod, TM, IsThinLto);
   else
-    runNewPMCustomPasses(Mod, TM, Conf.OptPipeline, Conf.DisableVerify);
+    runNewPMCustomPasses(Mod, TM, Conf.OptPipeline, Conf.AAPipeline,
+                         Conf.DisableVerify);
   return !Conf.PostOptModuleHook || Conf.PostOptModuleHook(Task, Mod);
 }
 
index 3cdf64e899963fd33cc39f4673a2d84990490600..69c1b8b1063fa6227a22ad8b13dacb1fa26109ca 100644 (file)
@@ -2,7 +2,8 @@
 
 ; Try a custom pipeline
 ; RUN: llvm-lto2 %t1.bc -o %t.o -save-temps \
-; RUN:  -r %t1.bc,patatino,px -opt-pipeline loweratomic
+; RUN:  -r %t1.bc,patatino,px -opt-pipeline loweratomic \
+; RUN:  -aa-pipeline basic-aa
 ; RUN: llvm-dis < %t.o.0.4.opt.bc | FileCheck %s --check-prefix=CUSTOM
 
 target triple = "x86_64-unknown-linux-gnu"
@@ -16,9 +17,16 @@ define void @patatino() {
 ; CUSTOM-NEXT:   ret void
 ; CUSTOM-NEXT: }
 
-; Check that invalid pipeline are caught as errors.
-; RUN: not llvm-lto2 %t1.bc -o %t.o -save-temps \
+; Check that invalid pipelines are caught as errors.
+; RUN: not llvm-lto2 %t1.bc -o %t.o \
 ; RUN:  -r %t1.bc,patatino,px -opt-pipeline foogoo 2>&1 | \
 ; RUN:  FileCheck %s --check-prefix=ERR
 
 ; ERR: LLVM ERROR: unable to parse pass pipeline description: foogoo
+
+; RUN: not llvm-lto2 %t1.bc -o %t.o \
+; RUN:  -r %t1.bc,patatino,px -aa-pipeline patatino \
+; RUN:  -opt-pipeline loweratomic 2>&1 | \
+; RUN:  FileCheck %s --check-prefix=AAERR
+
+; AAERR: LLVM ERROR: unable to parse AA pipeline description: patatino
index a2cc54ad7da7475bcf7a18694b786796317f4162..e5f0b3a1ad55f2553f9acf6908f7b491de18b22b 100644 (file)
@@ -39,6 +39,10 @@ static cl::opt<std::string> OptPipeline("opt-pipeline",
                                         cl::desc("Optimizer Pipeline"),
                                         cl::value_desc("pipeline"));
 
+static cl::opt<std::string> AAPipeline("aa-pipeline",
+                                       cl::desc("Alias Analysis Pipeline"),
+                                       cl::value_desc("aapipeline"));
+
 static cl::opt<bool> SaveTemps("save-temps", cl::desc("Save temporary files"));
 
 static cl::opt<bool>
@@ -154,6 +158,7 @@ int main(int argc, char **argv) {
 
   // Run a custom pipeline, if asked for.
   Conf.OptPipeline = OptPipeline;
+  Conf.AAPipeline = AAPipeline;
 
   ThinBackend Backend;
   if (ThinLTODistributedIndexes)