From fd448408e31877c3ec602f374bf204652cf1439c Mon Sep 17 00:00:00 2001 From: Hal Finkel Date: Mon, 24 Oct 2016 05:07:18 +0000 Subject: [PATCH] [llvm-opt-report] Fix unroll-count reporting Fix the implementation of OptReportLocationInfo's operator < so that contexts with different unroll counts are reported separately. llvm-svn: 284957 --- llvm/test/tools/llvm-opt-report/Inputs/q3.c | 14 +++ .../test/tools/llvm-opt-report/Inputs/q3.yaml | 98 +++++++++++++++++++ llvm/test/tools/llvm-opt-report/func-3.test | 25 +++++ llvm/tools/llvm-opt-report/OptReport.cpp | 2 +- 4 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 llvm/test/tools/llvm-opt-report/Inputs/q3.c create mode 100644 llvm/test/tools/llvm-opt-report/Inputs/q3.yaml create mode 100644 llvm/test/tools/llvm-opt-report/func-3.test diff --git a/llvm/test/tools/llvm-opt-report/Inputs/q3.c b/llvm/test/tools/llvm-opt-report/Inputs/q3.c new file mode 100644 index 000000000000..885f91283ab6 --- /dev/null +++ b/llvm/test/tools/llvm-opt-report/Inputs/q3.c @@ -0,0 +1,14 @@ +void bar(); +void foo(int n) { + for (int i = 0; i < n; ++i) + bar(); +} + +void quack() { + foo(4); +} + +void quack2() { + foo(8); +} + diff --git a/llvm/test/tools/llvm-opt-report/Inputs/q3.yaml b/llvm/test/tools/llvm-opt-report/Inputs/q3.yaml new file mode 100644 index 000000000000..f95d7bdc02ea --- /dev/null +++ b/llvm/test/tools/llvm-opt-report/Inputs/q3.yaml @@ -0,0 +1,98 @@ +--- !Missed +Pass: inline +Name: NoDefinition +DebugLoc: { File: Inputs/q3.c, Line: 4, Column: 5 } +Function: foo +Args: + - Callee: bar + - String: ' will not be inlined into ' + - Caller: foo + - String: ' because its definition is unavailable' +... +--- !Analysis +Pass: inline +Name: CanBeInlined +DebugLoc: { File: Inputs/q3.c, Line: 8, Column: 3 } +Function: quack +Args: + - Callee: foo + - String: ' can be inlined into ' + - Caller: quack + - String: ' with cost=' + - Cost: '40' + - String: ' (threshold=' + - Threshold: '275' + - String: ')' +... +--- !Passed +Pass: inline +Name: Inlined +DebugLoc: { File: Inputs/q3.c, Line: 8, Column: 3 } +Function: quack +Args: + - Callee: foo + - String: ' inlined into ' + - Caller: quack +... +--- !Passed +Pass: loop-unroll +Name: FullyUnrolled +DebugLoc: { File: Inputs/q3.c, Line: 3, Column: 3 } +Function: quack +Args: + - String: 'completely unrolled loop with ' + - UnrollCount: '4' + - String: ' iterations' +... +--- !Analysis +Pass: inline +Name: CanBeInlined +DebugLoc: { File: Inputs/q3.c, Line: 12, Column: 3 } +Function: quack2 +Args: + - Callee: foo + - String: ' can be inlined into ' + - Caller: quack2 + - String: ' with cost=' + - Cost: '40' + - String: ' (threshold=' + - Threshold: '275' + - String: ')' +... +--- !Passed +Pass: inline +Name: Inlined +DebugLoc: { File: Inputs/q3.c, Line: 12, Column: 3 } +Function: quack2 +Args: + - Callee: foo + - String: ' inlined into ' + - Caller: quack2 +... +--- !Passed +Pass: loop-unroll +Name: FullyUnrolled +DebugLoc: { File: Inputs/q3.c, Line: 3, Column: 3 } +Function: quack2 +Args: + - String: 'completely unrolled loop with ' + - UnrollCount: '8' + - String: ' iterations' +... +--- !Analysis +Pass: loop-vectorize +Name: CantVectorizeCall +DebugLoc: { File: Inputs/q3.c, Line: 4, Column: 5 } +Function: foo +Args: + - String: 'loop not vectorized: ' + - String: call instruction cannot be vectorized +... +--- !Missed +Pass: loop-vectorize +Name: MissedDetails +DebugLoc: { File: Inputs/q3.c, Line: 3, Column: 3 } +Function: foo +Args: + - String: 'loop not vectorized: use -Rpass-analysis=loop-vectorize for more info' +... diff --git a/llvm/test/tools/llvm-opt-report/func-3.test b/llvm/test/tools/llvm-opt-report/func-3.test new file mode 100644 index 000000000000..dca526c34084 --- /dev/null +++ b/llvm/test/tools/llvm-opt-report/func-3.test @@ -0,0 +1,25 @@ +RUN: llvm-opt-report -r %p %p/Inputs/q3.yaml | FileCheck -strict-whitespace %s + +; CHECK: < {{.*[/\]}}q3.c +; CHECK-NEXT: 1 | void bar(); +; CHECK-NEXT: 2 | void foo(int n) { +; CHECK-NEXT: {{\[\[}} +; CHECK-NEXT: > foo: +; CHECK-NEXT: 3 | for (int i = 0; i < n; ++i) +; CHECK-NEXT: > quack: +; CHECK-NEXT: 3 U4 | for (int i = 0; i < n; ++i) +; CHECK-NEXT: > quack2: +; CHECK-NEXT: 3 U8 | for (int i = 0; i < n; ++i) +; CHECK-NEXT: {{\]\]}} +; CHECK-NEXT: 4 | bar(); +; CHECK-NEXT: 5 | } +; CHECK-NEXT: 6 | +; CHECK-NEXT: 7 | void quack() { +; CHECK-NEXT: 8 I | foo(4); +; CHECK-NEXT: 9 | } +; CHECK-NEXT: 10 | +; CHECK-NEXT: 11 | void quack2() { +; CHECK-NEXT: 12 I | foo(8); +; CHECK-NEXT: 13 | } +; CHECK-NEXT: 14 | + diff --git a/llvm/tools/llvm-opt-report/OptReport.cpp b/llvm/tools/llvm-opt-report/OptReport.cpp index 0f0faa832bde..d067df5ecad2 100644 --- a/llvm/tools/llvm-opt-report/OptReport.cpp +++ b/llvm/tools/llvm-opt-report/OptReport.cpp @@ -132,7 +132,7 @@ struct OptReportLocationInfo { return true; else if (InterleaveCount > RHS.InterleaveCount) return false; - else if (InterleaveCount < RHS.InterleaveCount) + else if (UnrollCount < RHS.UnrollCount) return true; return false; }