Skip to content

Commit acd338e

Browse files
paigealegfxbot
authored andcommitted
Internal Feature and bug fix for Atomics
Change-Id: Ie5d6334ab85de8c31cc3b1c80e0f661a7015a26f
1 parent f6fd34c commit acd338e

File tree

3 files changed

+5
-6
lines changed

3 files changed

+5
-6
lines changed

IGC/BiFModule/Headers/spirv.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3866,7 +3866,6 @@ void __builtin_spirv_OpAtomicFlagClear_p3i32_i32_i32(volatile local uint *Pointe
38663866
#if (__OPENCL_C_VERSION__ >= CL_VERSION_2_0)
38673867
void __builtin_spirv_OpAtomicFlagClear_p4i32_i32_i32(volatile generic uint *Pointer, uint Scope, uint Semantics);
38683868
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_2_0
3869-
38703869
// Barrier Instructions
38713870

38723871
void __builtin_spirv_OpControlBarrier_i32_i32_i32(Scope_t Execution, Scope_t Memory, uint Semantics);

IGC/BiFModule/Languages/OpenCL/IBiF_Impl.cl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ atomic_init_function(float)
306306

307307
// atomic_fetch()
308308

309-
#define atomic_fetch_function_addrspace(KEY, TYPE, OPTYPE, FUNC, ADDRSPACE, ABBR_ADDRSPACE) \
309+
#define atomic_fetch_function_addrspace(KEY, TYPE, OPTYPE, FUNC, ADDRSPACE, ABBR_ADDRSPACE, ABBR_TYPE, PTR_TYPE) \
310310
INLINE TYPE OVERLOADABLE atomic_fetch_##KEY(volatile ADDRSPACE atomic_##TYPE *object, OPTYPE operand) \
311311
{ \
312312
return atomic_fetch_##KEY##_explicit(object, operand, memory_order_seq_cst); \
@@ -317,11 +317,11 @@ INLINE TYPE OVERLOADABLE atomic_fetch_##KEY##_explicit(volatile ADDRSPACE atomic
317317
} \
318318
INLINE TYPE OVERLOADABLE atomic_fetch_##KEY##_explicit(volatile ADDRSPACE atomic_##TYPE *object, OPTYPE operand, memory_order order, memory_scope scope) \
319319
{ \
320-
return __builtin_spirv_##FUNC##_##ABBR_ADDRSPACE##i32_i32_i32_i32((volatile ADDRSPACE uint*)object, get_spirv_mem_scope(scope), get_spirv_mem_order(order) | get_spirv_mem_fence(get_fence((const ADDRSPACE void*)object)), operand);\
320+
return __builtin_spirv_##FUNC##_##ABBR_ADDRSPACE##ABBR_TYPE##_i32_i32_##ABBR_TYPE((volatile ADDRSPACE PTR_TYPE*)object, get_spirv_mem_scope(scope), get_spirv_mem_order(order) | get_spirv_mem_fence(get_fence((const ADDRSPACE void*)object)), operand);\
321321
}
322322

323323
#define atomic_fetch_function(KEY, TYPE, OPTYPE, FUNC) \
324-
atomic_fetch_function_addrspace(KEY, TYPE, OPTYPE, FUNC, generic, p4)
324+
atomic_fetch_function_addrspace(KEY, TYPE, OPTYPE, FUNC, generic, p4, i32, uint)
325325

326326
#define atomic_fetch_supported_types(KEY, FUNC) \
327327
atomic_fetch_function(KEY, int, int, FUNC) \

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10316,7 +10316,7 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst* pInsn)
1031610316
else
1031710317
{
1031810318
CVariable* pDst = returnsImmValue ?
10319-
m_currShader->GetNewVariable(numLanes(m_currShader->m_SIMDSize), m_destination->GetType(), EALIGN_GRF) :
10319+
m_currShader->GetNewVariable(numLanes(m_currShader->m_SIMDSize), bitwidth != 64 ? ISA_TYPE_UD : ISA_TYPE_UQ, EALIGN_GRF) :
1032010320
nullptr;
1032110321

1032210322
PointerType *PtrTy = dyn_cast<PointerType>(pllDstAddr->getType());
@@ -10339,7 +10339,7 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst* pInsn)
1033910339
m_encoder->Push();
1034010340
}
1034110341

10342-
if (returnsImmValue)
10342+
if (returnsImmValue) //This is needed for repacking of 16bit atomics otherwise it will be a vanilla mov
1034310343
{
1034410344
m_encoder->Cast(
1034510345
m_currShader->BitCast(m_destination, GetUnsignedIntegerType(m_destination->GetType())),

0 commit comments

Comments
 (0)