[Inliner] Fold the analysis remark into the missed remark
authorAdam Nemet <anemet@apple.com>
Tue, 27 Sep 2016 21:58:17 +0000 (21:58 +0000)
committerAdam Nemet <anemet@apple.com>
Tue, 27 Sep 2016 21:58:17 +0000 (21:58 +0000)
There is really no reason for these to be separate.

The vectorizer started this pretty bad tradition that the text of the
missed remarks is pretty meaningless, i.e. vectorization failed.  There,
you have to query analysis to get the full picture.

I think we should just explain the reason for missing the optimization
in the missed remark when possible.  Analysis remarks should provide
information that the pass gathers regardless whether the optimization is
passing or not.

llvm-svn: 282542

llvm/lib/Transforms/IPO/Inliner.cpp
llvm/test/Transforms/Inline/optimization-remarks-yaml.ll
llvm/test/Transforms/Inline/optimization-remarks.ll

index f1475cd434ca7c89fd102d31ab0a7e1960e02d25..89ae11c0a19232537847cd75838823e6603a321c 100644 (file)
@@ -469,15 +469,13 @@ inlineCallsImpl(CallGraphSCC &SCC, CallGraph &CG,
         // direct call, so we keep it.
         if (Function *Callee = CS.getCalledFunction())
           if (Callee->isDeclaration()) {
-            ORE.emitOptimizationRemarkAnalysis(
-                DEBUG_TYPE, &I, Twine("definition of ") + Callee->getName() +
-                                    " is not available",
-                /*Verbose=*/true);
             using namespace ore;
             ORE.emit(DiagnosticInfoOptimizationRemarkMissed(DEBUG_TYPE,
-                                                            "NotInlined", &I)
+                                                            "NoDefinition", &I)
                      << NV("Callee", Callee) << " will not be inlined into "
-                     << NV("Caller", CS.getCaller()) << setIsVerbose());
+                     << NV("Caller", CS.getCaller())
+                     << " because its definition is unavailable"
+                     << setIsVerbose());
             continue;
           }
 
index 45ed78d6592585ae5938c6011c766069232ba3b1..7afdd284192cade92fe4d937c641292e91790589 100644 (file)
 ;   5    return foo() + bar();
 ;   6  }
 
-; CHECK:      remark: /tmp/s.c:5:10: foo will not be inlined into baz (hotness: 30)
-; CHECK-NEXT: remark: /tmp/s.c:5:18: bar will not be inlined into baz (hotness: 30)
+; CHECK:      remark: /tmp/s.c:5:10: foo will not be inlined into baz because its definition is unavailable (hotness: 30)
+; CHECK-NEXT: remark: /tmp/s.c:5:18: bar will not be inlined into baz because its definition is unavailable (hotness: 30)
 
 ; YAML:      --- !Missed
 ; YAML-NEXT: Pass:            inline
-; YAML-NEXT: Name:            NotInlined
+; YAML-NEXT: Name:            NoDefinition
 ; YAML-NEXT: DebugLoc:        { File: /tmp/s.c, Line: 5, Column: 10 }
 ; YAML-NEXT: Function:        baz
 ; YAML-NEXT: Hotness:         30
 ; YAML-NEXT:   - Callee: foo
 ; YAML-NEXT:   - String:  will not be inlined into
 ; YAML-NEXT:   - Caller: baz
+; YAML-NEXT:   - String:  because its definition is unavailable
 ; YAML-NEXT: ...
 ; YAML-NEXT: --- !Missed
 ; YAML-NEXT: Pass:            inline
-; YAML-NEXT: Name:            NotInlined
+; YAML-NEXT: Name:            NoDefinition
 ; YAML-NEXT: DebugLoc:        { File: /tmp/s.c, Line: 5, Column: 18 }
 ; YAML-NEXT: Function:        baz
 ; YAML-NEXT: Hotness:         30
@@ -35,6 +36,7 @@
 ; YAML-NEXT:   - Callee: bar
 ; YAML-NEXT:   - String:  will not be inlined into
 ; YAML-NEXT:   - Caller: baz
+; YAML-NEXT:   - String:  because its definition is unavailable
 ; YAML-NEXT: ...
 
 ; ModuleID = '/tmp/s.c'
index d8be0c0acfdebe36743230247d6991c3d4dceeba..59cf08327350109bb0af873b68eef5d414340e08 100644 (file)
@@ -5,10 +5,8 @@
 ; RUN:       -pass-remarks-analysis=inline -pass-remarks-with-hotness -S 2>&1 | \
 ; RUN:       FileCheck -check-prefix=CHECK -check-prefix=HOTNESS %s
 
-; HOTNESS: definition of fox is not available
-; HOTNESS: fox will not be inlined into bar
-; NO_HOTNESS-NOT: definition of fox is not available
-; NO_HOTNESS-NOT: fox will not be inlined into bar
+; HOTNESS: fox will not be inlined into bar because its definition is unavailable
+; NO_HOTNESS-NOT: fox will not be inlined into bar because its definition is unavailable
 ; CHECK: foo should always be inlined (cost=always)
 ; CHECK: foo inlined into bar
 ; CHECK: foz should never be inlined (cost=never)