С -Rpass=.*
(который выдает отчеты об оптимизации в соответствии с документами: LINK ), я должен увидеть все отчеты об оптимизации.
Однако рассмотрим:
// foo.cc
void foo(int& a) {
a++;
}
// foo.h
void foo(int& a);
// main.cc
#include "foo.h"
#include <iostream>
void bar(int &a) {
a++;
}
int a;
int main() {
bar(a);
foo(a);
std::cout << a;
}
$ clang++ --version
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin19.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ clang++ -O3 -Rpass=".*" main.cc foo.cc
main.cc:12:2: remark: _Z3barRi inlined into main with (cost=-20, threshold=375)
[-Rpass=inline]
bar(a);
^
$ objdump -S a.out | grep -A 12 "_main"
_main:
100000f50: 55 pushq %rbp
100000f51: 48 89 e5 movq %rsp, %rbp
100000f54: 48 8d 3d b5 10 00 00 leaq 4277(%rip), %rdi
100000f5b: e8 20 00 00 00 callq 32 <__Z3fooRi>
100000f60: 8b 35 aa 10 00 00 movl 4266(%rip), %esi
100000f66: ff c6 incl %esi
100000f68: 89 35 a2 10 00 00 movl %esi, 4258(%rip)
100000f6e: 48 8b 3d 8b 00 00 00 movq 139(%rip), %rdi
100000f75: e8 0e 00 00 00 callq 14 <dyld_stub_binder+0x100000f88>
100000f7a: 31 c0 xorl %eax, %eax
100000f7c: 5d popq %rbp
100000f7d: c3 retq
Выше мы видим, что bar
был встроен, а foo
- нет.
Однако, похоже, что оптимизация во время LTO не сообщается с этим флагом:
$ clang++ -O3 -flto -Rpass=".*" main.cc foo.cc
main.cc:12:2: remark: _Z3barRi inlined into main with (cost=-20, threshold=375)
[-Rpass=inline]
bar(a);
^
$ objdump -S a.out | grep -A 12 "_main"
_main:
100000f70: 55 pushq %rbp
100000f71: 48 89 e5 movq %rsp, %rbp
100000f74: 8b 35 96 10 00 00 movl 4246(%rip), %esi
100000f7a: 83 c6 02 addl $2, %esi
100000f7d: 89 35 8d 10 00 00 movl %esi, 4237(%rip)
100000f83: 48 8b 3d 76 00 00 00 movq 118(%rip), %rdi
100000f8a: e8 05 00 00 00 callq 5 <dyld_stub_binder+0x100000f94>
100000f8f: 31 c0 xorl %eax, %eax
100000f91: 5d popq %rbp
100000f92: c3 retq
Disassembly of section __TEXT,__stubs:
__stubs:
Выше мы видим, что bar
было сообщено как встроенное, но во время LTO было больше оптимизаций apply.
Есть ли способ просмотреть результаты этих проходов оптимизации?