Skip to content

Commit 024016d

Browse files
vmaksimopvelesko
authored andcommitted
[SPIR-V 1.4] Add CopyLogical instruction (KhronosGroup#2484)
There is no mapping to LLVM instructions, so it can be used only via SPIR-V friendly translation. This addresses p1. of KhronosGroup#2460 (cherry picked from commit 8518a6f)
1 parent 1c374d0 commit 024016d

File tree

3 files changed

+3
-19
lines changed

3 files changed

+3
-19
lines changed

lib/SPIRV/SPIRVReader.cpp

+1-16
Original file line numberDiff line numberDiff line change
@@ -2238,22 +2238,7 @@ Value *SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
22382238
}
22392239
case OpCopyLogical: {
22402240
SPIRVCopyLogical *CL = static_cast<SPIRVCopyLogical *>(BV);
2241-
2242-
auto *SrcTy = transType(CL->getOperand()->getType());
2243-
auto *DstTy = transType(CL->getType());
2244-
2245-
assert(M->getDataLayout().getTypeStoreSize(SrcTy).getFixedValue() ==
2246-
M->getDataLayout().getTypeStoreSize(DstTy).getFixedValue() &&
2247-
"Size mismatch in OpCopyLogical");
2248-
2249-
IRBuilder<> Builder(BB);
2250-
2251-
auto *SrcAI = Builder.CreateAlloca(SrcTy);
2252-
Builder.CreateAlignedStore(transValue(CL->getOperand(), F, BB), SrcAI,
2253-
SrcAI->getAlign());
2254-
2255-
auto *LI = Builder.CreateAlignedLoad(DstTy, SrcAI, SrcAI->getAlign());
2256-
return mapValue(BV, LI);
2241+
return mapValue(BV, transSPIRVBuiltinFromInst(CL, BB));
22572242
}
22582243

22592244
case OpAccessChain:

lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h

+1
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ _SPIRV_OP(GroupNonUniformBitwiseXor, 361)
330330
_SPIRV_OP(GroupNonUniformLogicalAnd, 362)
331331
_SPIRV_OP(GroupNonUniformLogicalOr, 363)
332332
_SPIRV_OP(GroupNonUniformLogicalXor, 364)
333+
_SPIRV_OP(CopyLogical, 400)
333334
_SPIRV_OP(PtrEqual, 401)
334335
_SPIRV_OP(PtrNotEqual, 402)
335336
_SPIRV_OP(PtrDiff, 403)

test/OpCopyLogical.spvasm

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,4 @@
2222
OpReturn
2323
OpFunctionEnd
2424

25-
; CHECK-LLVM: [[ALLOCA:%[a-z0-9.]+]] = alloca [[SRC_TYPE:%[a-z0-9.]+]], align 8
26-
; CHECK-LLVM: store [[SRC_TYPE]] zeroinitializer, ptr [[ALLOCA]], align 8
27-
; CHECK-LLVM: [[DST:%[a-z0-9.]+]] = load [[DST_TYPE:%[a-z0-9.]+]], ptr [[ALLOCA]], align 8
25+
; CHECK-LLVM: @_Z19__spirv_CopyLogical12structtype.0(ptr sret(%structtype) %[[#]], %structtype.0 zeroinitializer)

0 commit comments

Comments
 (0)