Skip to content

Commit 9cc1dd0

Browse files
vmaksimojsji
authored andcommitted
Fix ArgumentAttributeINTEL decoration translation after nocapture attribute change (#2983)
Update after llvm/llvm-project@29441e4f5fa5 ("[IR] Convert from nocapture to captures(none)") Co-authored-by: Sven van Haastregt <[email protected]> Original commit: KhronosGroup/SPIRV-LLVM-Translator@290f13663fe0dfd
1 parent c68ee88 commit 9cc1dd0

File tree

4 files changed

+18
-12
lines changed

4 files changed

+18
-12
lines changed

llvm-spirv/lib/SPIRV/SPIRVReader.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,14 @@ void SPIRVToLLVM::transFunctionPointerCallArgumentAttributes(
13951395
std::vector<SPIRVWord> Literals = Dec->getVecLiteral();
13961396
SPIRVWord ArgNo = Literals[0];
13971397
SPIRVWord SpirvAttr = Literals[1];
1398+
// There is no value to rmap SPIR-V FunctionParameterAttributeNoCapture, as
1399+
// LLVM does not have Attribute::NoCapture anymore. Adding special handling
1400+
// for this case.
1401+
if (SpirvAttr == FunctionParameterAttributeNoCapture) {
1402+
CI->addParamAttr(ArgNo, Attribute::getWithCaptureInfo(
1403+
CI->getContext(), CaptureInfo::none()));
1404+
continue;
1405+
}
13981406
Attribute::AttrKind LlvmAttrKind = SPIRSPIRVFuncParamAttrMap::rmap(
13991407
static_cast<SPIRVFuncParamAttrKind>(SpirvAttr));
14001408
auto LlvmAttr =

llvm-spirv/lib/SPIRV/SPIRVWriter.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2741,6 +2741,10 @@ bool LLVMToSPIRVBase::shouldTryToAddMemAliasingDecoration(Instruction *Inst) {
27412741
void addFuncPointerCallArgumentAttributes(CallInst *CI,
27422742
SPIRVValue *FuncPtrCall) {
27432743
for (unsigned ArgNo = 0; ArgNo < CI->arg_size(); ++ArgNo) {
2744+
if (CI->doesNotCapture(ArgNo))
2745+
FuncPtrCall->addDecorate(new SPIRVDecorate(
2746+
spv::internal::DecorationArgumentAttributeINTEL, FuncPtrCall, ArgNo,
2747+
FunctionParameterAttributeNoCapture));
27442748
for (const auto &I : CI->getAttributes().getParamAttrs(ArgNo)) {
27452749
spv::FunctionParameterAttribute Attr = spv::FunctionParameterAttributeMax;
27462750
SPIRSPIRVFuncParamAttrMap::find(I.getKindAsEnum(), &Attr);

llvm-spirv/test/extensions/INTEL/SPV_INTEL_function_pointers/CodeSectionINTEL/decor-func-ptr-arg-attr.ll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
; TODO: update for nocapture -> captures(none) LLVM change.
2-
; XFAIL: *
3-
41
; RUN: llvm-as %s -o %t.bc
52
; RUN: llvm-spirv %t.bc -o %t.spt -spirv-text -spirv-ext=+SPV_INTEL_function_pointers
63
; RUN: FileCheck < %t.spt %s --check-prefix CHECK-SPIRV
@@ -13,13 +10,13 @@
1310
; CHECK-SPIRV: Capability FunctionPointersINTEL
1411
; CHECK-SPIRV: Extension "SPV_INTEL_function_pointers"
1512

16-
; CHECK-SPIRV: Decorate [[#TargetId:]] ArgumentAttributeINTEL 0 4
17-
; CHECK-SPIRV: Decorate [[#TargetId]] ArgumentAttributeINTEL 0 5
13+
; CHECK-SPIRV: Decorate [[#TargetId:]] ArgumentAttributeINTEL 0 5
14+
; CHECK-SPIRV: Decorate [[#TargetId]] ArgumentAttributeINTEL 0 4
1815
; CHECK-SPIRV: Decorate [[#TargetId]] ArgumentAttributeINTEL 0 2
1916
; CHECK-SPIRV: FunctionPointerCallINTEL
2017
; CHECK-SPIRV-SAME: [[#TargetId]]
2118

22-
; CHECK-LLVM: call spir_func addrspace(9) void %cond.i.i(ptr noalias captures(none) byval(%multi_ptr) %agg.tmp.i.i)
19+
; CHECK-LLVM: call spir_func addrspace(9) void %cond.i.i(ptr noalias byval(%multi_ptr) captures(none) %agg.tmp.i.i)
2320

2421
; ModuleID = 'sycl_test.cpp'
2522
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"

llvm-spirv/test/extensions/INTEL/SPV_INTEL_function_pointers/decor-func-ptr-arg-attr.ll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
; TODO: update for nocapture -> captures(none) LLVM change.
2-
; XFAIL: *
3-
41
; RUN: llvm-as %s -o %t.bc
52
; RUN: llvm-spirv %t.bc -o %t.spt -spirv-text -spirv-ext=+SPV_INTEL_function_pointers
63
; RUN: FileCheck < %t.spt %s --check-prefix CHECK-SPIRV
@@ -13,13 +10,13 @@
1310
; CHECK-SPIRV: Capability FunctionPointersINTEL
1411
; CHECK-SPIRV: Extension "SPV_INTEL_function_pointers"
1512

16-
; CHECK-SPIRV: Decorate [[#TargetId:]] ArgumentAttributeINTEL 0 4
17-
; CHECK-SPIRV: Decorate [[#TargetId]] ArgumentAttributeINTEL 0 5
13+
; CHECK-SPIRV: Decorate [[#TargetId:]] ArgumentAttributeINTEL 0 5
14+
; CHECK-SPIRV: Decorate [[#TargetId]] ArgumentAttributeINTEL 0 4
1815
; CHECK-SPIRV: Decorate [[#TargetId]] ArgumentAttributeINTEL 0 2
1916
; CHECK-SPIRV: FunctionPointerCallINTEL
2017
; CHECK-SPIRV-SAME: [[#TargetId]]
2118

22-
; CHECK-LLVM: call spir_func void %cond.i.i(ptr noalias captures(none) byval(%multi_ptr) %agg.tmp.i.i)
19+
; CHECK-LLVM: call spir_func void %cond.i.i(ptr noalias byval(%multi_ptr) captures(none) %agg.tmp.i.i)
2320

2421
; ModuleID = 'sycl_test.cpp'
2522
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"

0 commit comments

Comments
 (0)