diff --git a/lib/Analysis/OptimizationDiagnosticInfo.cpp b/lib/Analysis/OptimizationDiagnosticInfo.cpp index c31de0fc42e..914ec7829fd 100644 --- a/lib/Analysis/OptimizationDiagnosticInfo.cpp +++ b/lib/Analysis/OptimizationDiagnosticInfo.cpp @@ -169,10 +169,7 @@ void OptimizationRemarkEmitter::emit( auto *P = &OptDiagBase; *Out << P; } - // FIXME: now that IsVerbose is part of DI, filtering for this will be moved - // from here to clang. - if (!OptDiag.isVerbose() || shouldEmitVerbose()) - F->getContext().diagnose(OptDiag); + F->getContext().diagnose(OptDiag); } OptimizationRemarkEmitterWrapperPass::OptimizationRemarkEmitterWrapperPass() diff --git a/lib/IR/LLVMContext.cpp b/lib/IR/LLVMContext.cpp index 6569695c996..ead65ecfdb8 100644 --- a/lib/IR/LLVMContext.cpp +++ b/lib/IR/LLVMContext.cpp @@ -199,8 +199,12 @@ static bool isDiagnosticEnabled(const DiagnosticInfo &DI) { // pattern, passed via one of the -pass-remarks* flags, matches the name of // the pass that is emitting the diagnostic. If there is no match, ignore the // diagnostic and return. + // + // Also noisy remarks are only enabled if we have hotness information to sort + // them. if (auto *Remark = dyn_cast(&DI)) - return Remark->isEnabled(); + return Remark->isEnabled() && + (!Remark->isVerbose() || Remark->getHotness()); return true; } diff --git a/test/Transforms/Inline/optimization-remarks.ll b/test/Transforms/Inline/optimization-remarks.ll index 3f8332134e0..f554f0812b5 100644 --- a/test/Transforms/Inline/optimization-remarks.ll +++ b/test/Transforms/Inline/optimization-remarks.ll @@ -20,7 +20,7 @@ ; CHECK: foz not inlined into bar because it should never be inlined (cost=never) ; Function Attrs: alwaysinline nounwind uwtable -define i32 @foo(i32 %x, i32 %y) #0 { +define i32 @foo(i32 %x, i32 %y) #0 !prof !1 { entry: %x.addr = alloca i32, align 4 %y.addr = alloca i32, align 4 @@ -33,7 +33,7 @@ entry: } ; Function Attrs: noinline nounwind uwtable -define float @foz(i32 %x, i32 %y) #1 { +define float @foz(i32 %x, i32 %y) #1 !prof !1 { entry: %x.addr = alloca i32, align 4 %y.addr = alloca i32, align 4 @@ -49,7 +49,7 @@ entry: declare i32 @fox() ; Function Attrs: nounwind uwtable -define i32 @bar(i32 %j) #2 { +define i32 @bar(i32 %j) #2 !prof !1 { entry: %j.addr = alloca i32, align 4 store i32 %j, i32* %j.addr, align 4 @@ -76,3 +76,4 @@ attributes #2 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointe !llvm.ident = !{!0} !0 = !{!"clang version 3.5.0 "} +!1 = !{!"function_entry_count", i64 10}