[clang] [AMDGPU] Use generic builtins for `wave_reduce` ops (PR #179589)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 9 01:02:57 PST 2026
================
@@ -417,37 +399,17 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
llvm::SyncScope::ID SSID;
switch (BuiltinID) {
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
- case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
- Intrinsic::ID IID = getIntrinsicIDforWaveReduction(BuiltinID);
- llvm::Value *Value = EmitScalarExpr(E->getArg(0));
- llvm::Value *Strategy = EmitScalarExpr(E->getArg(1));
- llvm::Function *F = CGM.getIntrinsic(IID, {Value->getType()});
- return Builder.CreateCall(F, {Value, Strategy});
+ case AMDGPU::BI__builtin_amdgcn_wave_reduce_add:
+ case AMDGPU::BI__builtin_amdgcn_wave_reduce_and:
----------------
easyonaadit wrote:
Typically while reading code, when I see `and` I expect it to be followed by `or` , not `max`, so this would throw me off a bit. Logical grouping is better than enum values.
I think this should be refactored for readability.
https://github.com/llvm/llvm-project/pull/179589
More information about the cfe-commits
mailing list