/
CT_01_011 - Improve if-conversion, particularly for x264 quant4x4 (LLVM)
CT_01_011 - Improve if-conversion, particularly for x264 quant4x4 (LLVM)
About
During 2023 various RISE and non-RISE members worked to improve if-conversion for GCC. One of the recent discoveries from that work is that it allows if-conversion of a scalar copy of quant_4x4 within the spec2017 benchmark suite. We have seen this improve the performance of the first (of three) steps in the x264 benchmark by approximately 10%. The improvement is believed to be primarily due to eliminating a poorly predicted branch in that hot loop.
This work item for LLVM is meant to track a corresponding improvement to LLVM's if-conversion. While this effort primarily helps the scalar quant_4x4, the belief is that it will help a variety of other codes, just in much smaller ways.
Stakeholders/Partners
RISE:
Ventana: Jeff Law, Mikhail Gudim
External:
Dependencies
Status
Updates
- Moved to 1H2025
- Moved to 2H2024
- Development work is considered done. Needs to be tested on design to validate improvement though.
- Failure to convert test into an equality test continues to be a problem
- Craig thinks that's supposed to already work, so clearly needs deeper dive
- Heuristic to avoid if-converting when some operands are invariant seems reasonable, but implementation seems bogus
- Enablement of early if-conversion
- Misha or another Ventana engineer will pick this up.
- Patch under internal review. Key issues appear to be:
- Need to enable early if-conversion by default
- Wire up additional ways to generate czero
- Still working through decision whether or not to if-convert
- Project noted as priority for 20241H
, multiple selections available,
Related content
CT_00_018 -- Evaluate and potentially improve x264 vectorization
CT_00_018 -- Evaluate and potentially improve x264 vectorization
More like this
CT_00_035 -- Improve x264 vectorization
CT_00_035 -- Improve x264 vectorization
More like this
CT_00_025 -- Zicond with if-conversion improvements (GCC)
CT_00_025 -- Zicond with if-conversion improvements (GCC)
More like this
CT_00_037 -- Zicond with if-conversion improvements (GCC)
CT_00_037 -- Zicond with if-conversion improvements (GCC)
More like this
CT_01_016 - Function Multiversioning (LLVM)
CT_01_016 - Function Multiversioning (LLVM)
More like this
CT_01_007 - CRC Optimization (LLVM)
CT_01_007 - CRC Optimization (LLVM)
Read with this