[llvm] 75a5eaf - [LTO] Add a function `LTOCodeGenerator::getMergedModule`

Shilei Tian via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 20 17:01:55 PST 2021


Author: Shilei Tian
Date: 2021-12-20T20:01:49-05:00
New Revision: 75a5eaf7c6d60e95b11ea572b78fdb8788d15ddc

URL: https://github.com/llvm/llvm-project/commit/75a5eaf7c6d60e95b11ea572b78fdb8788d15ddc
DIFF: https://github.com/llvm/llvm-project/commit/75a5eaf7c6d60e95b11ea572b78fdb8788d15ddc.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