mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-12 15:51:35 +00:00
![Hal Finkel](/assets/img/avatar_default.png)
How code is optimized sometimes, perhaps often, depends on the context into which it was inlined. This change allows llvm-opt-report to track the differences between the optimizations performed, or not, in different contexts, and when these differ, display those differences. For example, this code: $ cat /tmp/q.cpp void bar(); void foo(int n) { for (int i = 0; i < n; ++i) bar(); } void quack() { foo(4); } void quack2() { foo(4); } will now produce this report: < /home/hfinkel/src/llvm/test/tools/llvm-opt-report/Inputs/q.cpp 2 | void bar(); 3 | void foo(int n) { [[ > foo(int): 4 | for (int i = 0; i < n; ++i) > quack(), quack2(): 4 U4 | for (int i = 0; i < n; ++i) ]] 5 | bar(); 6 | } 7 | 8 | void quack() { 9 I | foo(4); 10 | } 11 | 12 | void quack2() { 13 I | foo(4); 14 | } 15 | Note that the tool has demangled the function names, and grouped the reports associated with line 4. This shows that the loop on line 4 was unrolled by a factor of 4 when inlined into the functions quack() and quack2(), but not in the function foo(int) itself. llvm-svn: 283402
50 lines
2.0 KiB
Plaintext
50 lines
2.0 KiB
Plaintext
RUN: llvm-opt-report -r %p %p/Inputs/q2.yaml | FileCheck -strict-whitespace %s
|
|
RUN: llvm-opt-report -s -r %p %p/Inputs/q2.yaml | FileCheck -strict-whitespace -check-prefix=CHECK-SUCCINCT %s
|
|
|
|
; CHECK: < {{.*}}/Inputs/q2.c
|
|
; CHECK-NEXT: 2 | void bar();
|
|
; CHECK-NEXT: 3 | void foo(int n) {
|
|
; CHECK-NEXT: {{\[\[}}
|
|
; CHECK-NEXT: > quack, quack2:
|
|
; CHECK-NEXT: 4 | for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
|
|
; CHECK-NEXT: U4 | ^
|
|
; CHECK-NEXT: U4 | ^
|
|
; CHECK-NEXT: > foo:
|
|
; CHECK-NEXT: 4 | for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
|
|
; CHECK-NEXT: {{\]\]}}
|
|
; CHECK-NEXT: 5 | bar();
|
|
; CHECK-NEXT: 6 | }
|
|
; CHECK-NEXT: 7 |
|
|
; CHECK-NEXT: 8 | void quack() {
|
|
; CHECK-NEXT: 9 I | foo(4);
|
|
; CHECK-NEXT: 10 | }
|
|
; CHECK-NEXT: 11 |
|
|
; CHECK-NEXT: 12 | void quack2() {
|
|
; CHECK-NEXT: 13 I | foo(4);
|
|
; CHECK-NEXT: 14 | }
|
|
; CHECK-NEXT: 15 |
|
|
|
|
; CHECK-SUCCINCT: < {{.*}}/Inputs/q2.c
|
|
; CHECK-SUCCINCT-NEXT: 2 | void bar();
|
|
; CHECK-SUCCINCT-NEXT: 3 | void foo(int n) {
|
|
; CHECK-SUCCINCT-NEXT: {{\[\[}}
|
|
; CHECK-SUCCINCT-NEXT: > quack, quack2:
|
|
; CHECK-SUCCINCT-NEXT: 4 | for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
|
|
; CHECK-SUCCINCT-NEXT: U | ^
|
|
; CHECK-SUCCINCT-NEXT: U | ^
|
|
; CHECK-SUCCINCT-NEXT: > foo:
|
|
; CHECK-SUCCINCT-NEXT: 4 | for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
|
|
; CHECK-SUCCINCT-NEXT: {{\]\]}}
|
|
; CHECK-SUCCINCT-NEXT: 5 | bar();
|
|
; CHECK-SUCCINCT-NEXT: 6 | }
|
|
; CHECK-SUCCINCT-NEXT: 7 |
|
|
; CHECK-SUCCINCT-NEXT: 8 | void quack() {
|
|
; CHECK-SUCCINCT-NEXT: 9 I | foo(4);
|
|
; CHECK-SUCCINCT-NEXT: 10 | }
|
|
; CHECK-SUCCINCT-NEXT: 11 |
|
|
; CHECK-SUCCINCT-NEXT: 12 | void quack2() {
|
|
; CHECK-SUCCINCT-NEXT: 13 I | foo(4);
|
|
; CHECK-SUCCINCT-NEXT: 14 | }
|
|
; CHECK-SUCCINCT-NEXT: 15 |
|
|
|