[llvm] 61051e4 - [LTO] Add a function `LTOCodeGenerator::getMergedModule`

Shilei Tian via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 13 13:19:13 PST 2021


Author: Shilei Tian
Date: 2021-12-13T16:19:08-05:00
New Revision: 61051e42c2d5b30ad440b2b275397fc0aa478434

URL: https://github.com/llvm/llvm-project/commit/61051e42c2d5b30ad440b2b275397fc0aa478434
DIFF: https://github.com/llvm/llvm-project/commit/61051e42c2d5b30ad440b2b275397fc0aa478434.diff

LOG: [LTO] Add a function `LTOCodeGenerator::getMergedModule`

One of the uses of `LTOCodeGenerator` is to take it as a middle+back end. Sometimes
it is very helpful to access, especially get information from the optimized module.
If the information can be changed in optimization, it cannot be get before the
module is added to `LTOCodeGenerator`. This patch adds a function
`LTOCodeGenerator::getMergedModule` to access the `MergedModule`.

Reviewed By: steven_wu

Differential Revision: https://reviews.llvm.org/D114201

Added: 
    llvm/test/tools/llvm-lto/dump.ll

Modified: 
    llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
    llvm/tools/llvm-lto/llvm-lto.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
index 333f483f29c54..91c1decac373f 100644
--- a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
+++ b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
@@ -193,6 +193,8 @@ struct LTOCodeGenerator {
   void resetMergedModule() { MergedModule.reset(); }
   void DiagnosticHandler(const DiagnosticInfo &DI);
 
+  Module &getMergedModule() { return *MergedModule; }
+
 private:
   /// Verify the merged module on first call.
   ///

diff  --git a/llvm/test/tools/llvm-lto/dump.ll b/llvm/test/tools/llvm-lto/dump.ll
new file mode 100644
index 0000000000000..57e6b757664f0
--- /dev/null
+++ b/llvm/test/tools/llvm-lto/dump.ll
@@ -0,0 +1,14 @@
+; RUN: llvm-as < %s > %t1
+; RUN: llvm-lto --dump-linked-module %t1 2>&1 | FileCheck %s
+
+; CHEKCK: target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+; CHECK: define void @f() {
+define void @f() {
+; CHECK-NEXT: entry:
+entry:
+; CHECK-NEXT: ret void
+  ret void
+; CHECK-NEXT: }
+}

diff  --git a/llvm/tools/llvm-lto/llvm-lto.cpp b/llvm/tools/llvm-lto/llvm-lto.cpp
index 995ebacacb870..be91ec25d7ad4 100644
--- a/llvm/tools/llvm-lto/llvm-lto.cpp
+++ b/llvm/tools/llvm-lto/llvm-lto.cpp
@@ -197,6 +197,11 @@ static cl::opt<bool>
                    cl::desc("Write merged LTO module to file before CodeGen"),
                    cl::cat(LTOCategory));
 
+static cl::opt<bool>
+    DumpLinkedModule("dump-linked-module", cl::init(false),
+                     cl::desc("Dump linked LTO module before optimize"),
+                     cl::cat(LTOCategory));
+
 static cl::list<std::string> InputFilenames(cl::Positional, cl::OneOrMore,
                                             cl::desc("<input bitcode files>"),
                                             cl::cat(LTOCategory));
@@ -316,11 +321,11 @@ namespace {
       if (!CurrentActivity.empty())
         OS << ' ' << CurrentActivity;
       OS << ": ";
-  
+
       DiagnosticPrinterRawOStream DP(OS);
       DI.print(DP);
       OS << '\n';
-  
+
       if (DI.getSeverity() == DS_Error)
         exit(1);
       return true;
@@ -1115,6 +1120,14 @@ int main(int argc, char **argv) {
       error("error compiling the code");
 
   } else {
+    if (DumpLinkedModule) {
+      if (SaveLinkedModuleFile)
+        error(": -dump-linked-module must be used without -dump-linked-module");
+
+      Module &M = CodeGen.getMergedModule();
+      M.dump();
+    }
+
     if (Parallelism != 1)
       error("-j must be specified together with -o");
 


        


More information about the llvm-commits mailing list