forked from OSchip/llvm-project
				
			[ThinLTO] Support opt remarks options with distributed ThinLTO backends
Summary: Passes down the necessary code ge options to the LTO Config to enable -fdiagnostics-show-hotness and -fsave-optimization-record in the ThinLTO backend for a distributed build. Also, remove warning about not having PGO when the input is IR. Reviewers: pcc Subscribers: mehdi_amini, inglorion, eraman, cfe-commits Differential Revision: https://reviews.llvm.org/D46464 llvm-svn: 331592
This commit is contained in:
		
							parent
							
								
									81d9207317
								
							
						
					
					
						commit
						66744f8137
					
				| 
						 | 
				
			
			@ -1136,6 +1136,8 @@ static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
 | 
			
		|||
  Conf.SampleProfile = std::move(SampleProfile);
 | 
			
		||||
  Conf.UseNewPM = CGOpts.ExperimentalNewPassManager;
 | 
			
		||||
  Conf.DebugPassManager = CGOpts.DebugPassManager;
 | 
			
		||||
  Conf.RemarksWithHotness = CGOpts.DiagnosticsWithHotness;
 | 
			
		||||
  Conf.RemarksFilename = CGOpts.OptRecordFile;
 | 
			
		||||
  switch (Action) {
 | 
			
		||||
  case Backend_EmitNothing:
 | 
			
		||||
    Conf.PreCodeGenModuleHook = [](size_t Task, const Module &Mod) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1159,7 +1161,7 @@ static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
 | 
			
		|||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  if (Error E = thinBackend(
 | 
			
		||||
          Conf, 0, AddStream, *M, *CombinedIndex, ImportList,
 | 
			
		||||
          Conf, -1, AddStream, *M, *CombinedIndex, ImportList,
 | 
			
		||||
          ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) {
 | 
			
		||||
    handleAllErrors(std::move(E), [&](ErrorInfoBase &EIB) {
 | 
			
		||||
      errs() << "Error running ThinLTO backend: " << EIB.message() << '\n';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1075,7 +1075,9 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
 | 
			
		|||
  bool UsingProfile = UsingSampleProfile ||
 | 
			
		||||
      (Opts.getProfileUse() != CodeGenOptions::ProfileNone);
 | 
			
		||||
 | 
			
		||||
  if (Opts.DiagnosticsWithHotness && !UsingProfile)
 | 
			
		||||
  if (Opts.DiagnosticsWithHotness && !UsingProfile &&
 | 
			
		||||
      // An IR file will contain PGO as metadata
 | 
			
		||||
      IK.getLanguage() != InputKind::LLVM_IR)
 | 
			
		||||
    Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo)
 | 
			
		||||
        << "-fdiagnostics-show-hotness";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record
 | 
			
		||||
; work when invoking the ThinLTO backend path.
 | 
			
		||||
; RUN: opt -module-summary -o %t.o %s
 | 
			
		||||
; RUN: llvm-lto -thinlto -o %t %t.o
 | 
			
		||||
 | 
			
		||||
; First try with pass remarks to stderr
 | 
			
		||||
; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s
 | 
			
		||||
 | 
			
		||||
; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300)
 | 
			
		||||
 | 
			
		||||
; Next try YAML pass remarks file
 | 
			
		||||
; RUN: rm -f %t2.opt.yaml
 | 
			
		||||
; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c
 | 
			
		||||
; RUN: cat %t2.opt.yaml | FileCheck %s -check-prefix=YAML
 | 
			
		||||
 | 
			
		||||
; YAML: --- !Passed
 | 
			
		||||
; YAML-NEXT: Pass:            inline
 | 
			
		||||
; YAML-NEXT: Name:            Inlined
 | 
			
		||||
; YAML-NEXT: Function:        main
 | 
			
		||||
; YAML-NEXT: Hotness:         300
 | 
			
		||||
; YAML-NEXT: Args:
 | 
			
		||||
; YAML-NEXT:   - Callee:          tinkywinky
 | 
			
		||||
; YAML-NEXT:   - String:          ' inlined into '
 | 
			
		||||
; YAML-NEXT:   - Caller:          main
 | 
			
		||||
; YAML-NEXT:   - String:          ' with cost='
 | 
			
		||||
; YAML-NEXT:   - Cost:            '0'
 | 
			
		||||
; YAML-NEXT:   - String:          ' (threshold='
 | 
			
		||||
; YAML-NEXT:   - Threshold:       '337'
 | 
			
		||||
; YAML-NEXT:   - String:          ')'
 | 
			
		||||
; YAML-NEXT: ...
 | 
			
		||||
 | 
			
		||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 | 
			
		||||
target triple = "x86_64-scei-ps4"
 | 
			
		||||
 | 
			
		||||
declare i32 @patatino()
 | 
			
		||||
 | 
			
		||||
define i32 @tinkywinky() {
 | 
			
		||||
  %a = call i32 @patatino()
 | 
			
		||||
  ret i32 %a
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define i32 @main() !prof !0 {
 | 
			
		||||
  %i = call i32 @tinkywinky()
 | 
			
		||||
  ret i32 %i
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
!0 = !{!"function_entry_count", i64 300}
 | 
			
		||||
| 
						 | 
				
			
			@ -29,13 +29,13 @@
 | 
			
		|||
 | 
			
		||||
; Ensure f2 was imported. Check for all 3 flavors of -save-temps[=cwd|obj].
 | 
			
		||||
; RUN: %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps=obj
 | 
			
		||||
; RUN: llvm-dis %t1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s
 | 
			
		||||
; RUN: llvm-dis %t1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s
 | 
			
		||||
; RUN: mkdir -p %T/dir1
 | 
			
		||||
; RUN: (cd %T/dir1 && %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps=cwd)
 | 
			
		||||
; RUN: llvm-dis %T/dir1/*1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s
 | 
			
		||||
; RUN: llvm-dis %T/dir1/*1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s
 | 
			
		||||
; RUN: mkdir -p %T/dir2
 | 
			
		||||
; RUN: (cd %T/dir2 && %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps)
 | 
			
		||||
; RUN: llvm-dis %T/dir2/*1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s
 | 
			
		||||
; RUN: llvm-dis %T/dir2/*1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s
 | 
			
		||||
; CHECK-IMPORT: define available_externally void @f2()
 | 
			
		||||
; RUN: llvm-nm %t3.o | FileCheck --check-prefix=CHECK-OBJ %s
 | 
			
		||||
; CHECK-OBJ: T f1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue