committed by
GitHub
parent
e5c7cde5c8
commit
b6a4ab5a12
@@ -20,12 +20,14 @@ LLVM pass writers, and minimal disruption to LLVM in general.
|
||||
|
||||
## Status and usage
|
||||
|
||||
**Status**: Experimental work in progress. Enabling is strongly advised against
|
||||
except for development and testing.
|
||||
**Status**: Enabled by default in Clang but disabled under some circumstances
|
||||
(which can be overridden with the `forced` option, see below). `opt` will not
|
||||
run the pass unless asked (`-passes=declare-to-assign`).
|
||||
|
||||
**Enable in Clang**: `-Xclang -fexperimental-assignment-tracking`
|
||||
**Flag**:
|
||||
`-Xclang -fexperimental-assignment-tracking=<disabled|enabled|forced>`
|
||||
|
||||
That causes Clang to get LLVM to run the pass `declare-to-assign`. The pass
|
||||
When enabled Clang gets LLVM to run the pass `declare-to-assign`. The pass
|
||||
converts conventional debug records to assignment tracking metadata and sets
|
||||
the module flag `debug-info-assignment-tracking` to the value `i1 true`. To
|
||||
check whether assignment tracking is enabled for a module call
|
||||
@@ -88,7 +90,7 @@ int fun(int a) {
|
||||
```
|
||||
compiled without optimisations:
|
||||
```
|
||||
$ clang++ test.cpp -o test.ll -emit-llvm -S -g -O0 -Xclang -fexperimental-assignment-tracking
|
||||
$ clang++ test.cpp -o test.ll -emit-llvm -S -g -O0 -Xclang -fexperimental-assignment-tracking=enabled
|
||||
```
|
||||
we get:
|
||||
```
|
||||
@@ -194,8 +196,7 @@ the choice at each instruction, iteratively joining the results for each block.
|
||||
|
||||
### TODO list
|
||||
|
||||
As this is an experimental work in progress so there are some items we still need
|
||||
to tackle:
|
||||
Outstanding improvements:
|
||||
|
||||
* As mentioned in test llvm/test/DebugInfo/assignment-tracking/X86/diamond-3.ll,
|
||||
the analysis should treat escaping calls like untagged stores.
|
||||
@@ -228,3 +229,8 @@ to tackle:
|
||||
that we can only track assignments with fixed offsets and sizes, I think we
|
||||
can probably get rid of the address and address-expression part, since it
|
||||
will always be computable with the info we have.
|
||||
|
||||
* Assignment tracking is disabled by default for LTO and thinLTO builds, and
|
||||
if LLDB debugger tuning has been specified. We should remove these
|
||||
restrictions. See EmitAssemblyHelper::RunOptimizationPipeline in
|
||||
clang/lib/CodeGen/BackendUtil.cpp.
|
||||
|
||||
Reference in New Issue
Block a user