Skip to content

Commit

Permalink
[LTO] Add a function LTOCodeGenerator::getMergedModule
Browse files Browse the repository at this point in the history
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
  • Loading branch information
shiltian committed Dec 13, 2021
1 parent 1c4d9ae commit 61051e4
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
2 changes: 2 additions & 0 deletions llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
Expand Up @@ -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.
///
Expand Down
14 changes: 14 additions & 0 deletions 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: }
}
17 changes: 15 additions & 2 deletions llvm/tools/llvm-lto/llvm-lto.cpp
Expand Up @@ -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));
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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");

Expand Down

0 comments on commit 61051e4

Please sign in to comment.