|
|
@ -1796,9 +1796,17 @@ private: |
|
|
return {}; |
|
|
return {}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Expression UAtomicAdd(Operation) { |
|
|
|
|
|
UNIMPLEMENTED(); |
|
|
|
|
|
return {}; |
|
|
|
|
|
|
|
|
Expression UAtomicAdd(Operation operation) { |
|
|
|
|
|
const auto& smem = std::get<SmemNode>(*operation[0]); |
|
|
|
|
|
Id address = AsUint(Visit(smem.GetAddress())); |
|
|
|
|
|
address = OpShiftRightLogical(t_uint, address, Constant(t_uint, 2U)); |
|
|
|
|
|
const Id pointer = OpAccessChain(t_smem_uint, shared_memory, address); |
|
|
|
|
|
|
|
|
|
|
|
const Id scope = Constant(t_uint, static_cast<u32>(spv::Scope::Device)); |
|
|
|
|
|
const Id semantics = Constant(t_uint, 0U); |
|
|
|
|
|
|
|
|
|
|
|
const Id value = AsUint(Visit(operation[1])); |
|
|
|
|
|
return {OpAtomicIAdd(t_uint, pointer, scope, semantics, value), Type::Uint}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Expression Branch(Operation operation) { |
|
|
Expression Branch(Operation operation) { |
|
|
|