If control is transferred to a successor is the key question when it
comes to liveness. The new implementation puts that question in the
focus and thereby providing a clean way to assume certain CFG edges are
dead or instructions will not transfer control.
Details
- Reviewers
sstefan1 uenoku - Commits
- rGdac2d403a2de: [Attributor] Make liveness "edge-based"
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
LGTM with minor comments.
| llvm/lib/Transforms/IPO/Attributor.cpp | ||
|---|---|---|
| 2328–2329 | Maybe change NRC as well. It doesn't have real meaning after this rewrite. | |
| 2493–2494 | This doesn't seem to be used anymore. | |
| 2506 | Just to make sure I understand this correctly. This is looking at callbr instruction and only looking at normal label? Shouldn't it look at other labels as well? | |
| llvm/test/Transforms/FunctionAttrs/nonnull.ll | ||
|---|---|---|
| 219 | Why are these readonly removed? | |
| llvm/lib/Transforms/IPO/Attributor.cpp | ||
|---|---|---|
| 2328–2329 | Agreed, will do. | |
| 2493–2494 | yes. | |
| 2506 | This is not called for callbr because of what you say. Only CallInst and InvokeInst end up here and the latter has some additional handling below. | |
| llvm/test/Transforms/FunctionAttrs/nonnull.ll | ||
| 219 | they are not explicitly queries and now also not implicitly anymore. The information is not lost though. Maybe we want to add AAMemBehavior and others to *all* locations they are not seeded at the moment. | |
Maybe change NRC as well. It doesn't have real meaning after this rewrite.