llvm-project
ff2bc54e - [ConstantTime][LLVM] Add llvm.ct.select intrinsic with generic SelectionDAG lowering

Commit
5 days ago
[ConstantTime][LLVM] Add llvm.ct.select intrinsic with generic SelectionDAG lowering [LLVM][CodeGen] Improve CTSELECT fallback lowering and target support modeling (#179395) This pull request refactors and improves the **fallback handling** of constant-time select (CTSELECT) in LLVM’s code generation infrastructure. The changes clarify semantics, simplify target-capability checks, and improve the correctness and maintainability of fallback lowering, without changing the intended constant-time guarantees. - **CTSELECT semantics** - Clarified documentation for the `CTSELECT` node to explicitly describe its operands and its role as the lowering target for the constant-time select intrinsic. - **TargetLowering cleanup** - Removed CTSELECT-specific entries from `SelectSupportKind`. - Introduced a dedicated `isCtSelectSupported(EVT)` hook to cleanly separate ISA select support from constant-time guarantees. - Updated intrinsic lowering to use this new capability check. - **Fallback implementation improvements** - Updated the generic SelectionDAG fallback lowering to use the canonical bitwise formulation: ``` F ^ ((T ^ F) & Mask) ``` - Simplified handling of vector splats and bitcasting in the fallback path. - **DAGCombiner refactor** - Renamed and clarified CTSELECT-related DAGCombiner code paths for improved readability. - **Miscellaneous cleanups** - Improved documentation headers for constant-time intrinsics. - Removed unused flags and minor nits uncovered during review. These changes primarily affect the **generic fallback path** used when targets do not provide specialized CTSELECT lowering. Target-specific implementations are handled in follow-up PRs
Committer
Parents
Loading