From 49aed1565ec79ddd25875edc4dd271d71a36efbf Mon Sep 17 00:00:00 2001 From: Taewook Oh <twoh@fb.com> Date: Thu, 15 Aug 2019 17:47:44 +0000 Subject: [PATCH] [NewPM][PassInstrumentation] IR printing support for (Thin)LTO Summary: IR printing has not been correctly supported with (Thin)LTO if the new pass manager is enabled. Previously we only get outputs from backend(codegen) passes, as they are still under legacy pass manager even when the new pass manager is enabled. This patch addresses the issue and enables IR printing for optimization passes with new pass manager + (Thin)LTO setting. Reviewers: fedor.sergeev, philip.pfaffe Subscribers: mehdi_amini, inglorion, hiraditya, steven_wu, dexonsmith, dang, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66253 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369024 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/LTO/LTOBackend.cpp | 6 +++++- test/ThinLTO/X86/printer.ll | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/ThinLTO/X86/printer.ll diff --git a/lib/LTO/LTOBackend.cpp b/lib/LTO/LTOBackend.cpp index 1f4ecf0fe61..2761f8367b0 100644 --- a/lib/LTO/LTOBackend.cpp +++ b/lib/LTO/LTOBackend.cpp @@ -28,6 +28,7 @@ #include "llvm/MC/SubtargetFeature.h" #include "llvm/Object/ModuleSymbolTable.h" #include "llvm/Passes/PassBuilder.h" +#include "llvm/Passes/StandardInstrumentations.h" #include "llvm/Support/Error.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" @@ -165,7 +166,10 @@ static void runNewPMPasses(Config &Conf, Module &Mod, TargetMachine *TM, PGOOptions::IRUse, PGOOptions::CSIRUse); } - PassBuilder PB(TM, PipelineTuningOptions(), PGOOpt); + PassInstrumentationCallbacks PIC; + StandardInstrumentations SI; + SI.registerCallbacks(PIC); + PassBuilder PB(TM, PipelineTuningOptions(),PGOOpt, &PIC); AAManager AA; // Parse a custom AA pipeline if asked to. diff --git a/test/ThinLTO/X86/printer.ll b/test/ThinLTO/X86/printer.ll new file mode 100644 index 00000000000..fbdeea6be60 --- /dev/null +++ b/test/ThinLTO/X86/printer.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as %s -o %t.bc +; RUN: llvm-lto2 run -r=%t.bc,foo,pxl -use-new-pm --print-before-all %t.bc -o - 2>&1 | FileCheck %s --check-prefix=CHECK-BEFORE +; RUN: llvm-lto2 run -r=%t.bc,foo,pxl -use-new-pm --print-after-all %t.bc -o - 2>&1 | FileCheck %s --check-prefix=CHECK-AFTER +; CHECK-BEFORE: *** IR Dump Before GlobalDCEPass *** +; CHECK-AFTER: *** IR Dump After GlobalDCEPass *** + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define i32 @foo() { + ret i32 42 +} -- 2.40.0