-
Notifications
You must be signed in to change notification settings - Fork 0
/
Optimization.txt
24 lines (18 loc) · 1.21 KB
/
Optimization.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Optimization
A popular technique for experimenting with compiler passes is to produce bitcode
with "clang -emit-llvm" and run the pass on the resulting bitcode with opt. Note
that this approach does not mix well with optimization: simply running "opt -O3"
on the instrumented bitcode yields inferior results. Why? In principle, the
instrumentation that adds symbolic-execution capabilities does not interfere
with the compiler's regular optimization. However, while "opt -O3" runs the same
middle-end optimizations as clang does internally, "clang -O3" performs
additional analysis before invoking the middle end. In particular, type-based
alias analysis (TBAA) adds metadata to the bitcode that enables the SROA pass to
promote a lot of stack-allocated variables into SSA values.
In order to produce bitcode that can later be properly optimized with opt, pass
the desired optimization flag at each stage of the workflow:
$ clang -O3 -Xclang -disable-llvm-passes -emit-llvm -S test.c -o test.ll
$ opt -load ./libSymbolize.so -symbolize < test.ll > test_instrumented.bc
$ opt -O3 < test_instrumented.bc > test_instrumented_optimized.bc
$ clang -O3 test_instrumented_optimized.bc -o test
$ ./test