[InferAlignment] Propagate alignment information across blocks (#198114)
This patch implements DT-based cross-block alignment propagation. The
algorithm processes the basic blocks in a depth-first traversal of DT.
The stack is emulated to avoid recursive visiting.
IR diff: https://github.com/dtcxzyw/llvm-opt-benchmark-nightly/pull/321.
Most of the improvement is useless, as it makes load/store instructions
overaligned. But several alignment checks are eliminated:
https://github.com/dtcxzyw/llvm-opt-benchmark-nightly/pull/321/commits/2ac31cb4f44261fa256d23061346af3aac73a41d.
Compile-time impact: +0.03%
https://llvm-compile-time-tracker.com/compare.php?from=f45f3ce5da9e35f819db9b8ed2775dac8c2b1171&to=93d511bc2a64792fcdb8d84b0b696a7c8d61ef40&stat=instructions%3Au