Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 18ff004

Browse filesBrowse files
committed
--Added support for the extension SPV_INTEL_fpga_buffer_location
--Added test file for the extension SPV_INTEL_fpga_buffer_location
1 parent 8286378 commit 18ff004
Copy full SHA for 18ff004

File tree

9 files changed

+233
-3
lines changed
Filter options

9 files changed

+233
-3
lines changed

‎llvm/docs/SPIRVUsage.rst

Copy file name to clipboardExpand all lines: llvm/docs/SPIRVUsage.rst
+3
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,9 @@ list of supported SPIR-V extensions, sorted alphabetically by their extension na
213213
- Adds a bitwise instruction on three operands and a look-up table index for specifying the bitwise operation to perform.
214214
* - ``SPV_INTEL_subgroup_matrix_multiply_accumulate``
215215
- Adds an instruction to compute the matrix product of an M x K matrix with a K x N matrix and then add an M x N matrix.
216+
* - ``SPV_INTEL_fpga_buffer_location``
217+
- Adds a pointer decoration for FPGA targets, indicating that a global memory pointer accesses only a specific physical memory location.
218+
216219

217220
To enable multiple extensions, list them separated by comma. For example, to enable support for atomic operations on floating-point numbers and arbitrary precision integers, use:
218221

‎llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp

Copy file name to clipboardExpand all lines: llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
+8-1
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,14 @@ bool SPIRVCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
362362
for (SPIRV::Decoration::Decoration Decoration : ArgTypeQualDecs)
363363
buildOpDecorate(VRegs[i][0], MIRBuilder, Decoration, {});
364364
}
365-
365+
if (MDNode *Node = F.getMetadata("kernel_arg_buffer_location")) {
366+
int64_t BufferLoc =
367+
processKernelArgBufferLocation(F, Node, i, VRegs, -1);
368+
if (BufferLoc != -1)
369+
buildOpDecorate(VRegs[i][0], MIRBuilder,
370+
SPIRV::Decoration::BufferLocationINTEL,
371+
{static_cast<uint32_t>(BufferLoc)});
372+
}
366373
MDNode *Node = F.getMetadata("spirv.ParameterDecorations");
367374
if (Node && i < Node->getNumOperands() &&
368375
isa<MDNode>(Node->getOperand(i))) {

‎llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp

Copy file name to clipboardExpand all lines: llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
+3-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ static const std::map<std::string, SPIRV::Extension::Extension, std::less<>>
9797
SPIRV::Extension::Extension::
9898
SPV_INTEL_subgroup_matrix_multiply_accumulate},
9999
{"SPV_INTEL_ternary_bitwise_function",
100-
SPIRV::Extension::Extension::SPV_INTEL_ternary_bitwise_function}};
100+
SPIRV::Extension::Extension::SPV_INTEL_ternary_bitwise_function},
101+
{"SPV_INTEL_fpga_buffer_location",
102+
SPIRV::Extension::Extension::SPV_INTEL_fpga_buffer_location}};
101103

102104
bool SPIRVExtensionsParser::parse(cl::Option &O, StringRef ArgName,
103105
StringRef ArgValue,

‎llvm/lib/Target/SPIRV/SPIRVMetadata.cpp

Copy file name to clipboardExpand all lines: llvm/lib/Target/SPIRV/SPIRVMetadata.cpp
+11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "SPIRVMetadata.h"
15+
#include "llvm/IR/Constants.h"
1516

1617
using namespace llvm;
1718

@@ -81,5 +82,15 @@ MDString *getOCLKernelArgTypeQual(const Function &F, unsigned ArgIdx) {
8182
"Kernel attributes are attached/belong only to OpenCL kernel functions");
8283
return getOCLKernelArgAttribute(F, ArgIdx, "kernel_arg_type_qual");
8384
}
85+
int64_t processKernelArgBufferLocation(
86+
const Function &F, MDNode *Node, int i,
87+
llvm::ArrayRef<llvm::ArrayRef<llvm::Register>> VRegs, int64_t BufferLoc) {
88+
if (Node && static_cast<unsigned>(i) < Node->getNumOperands())
89+
if (auto *CI = dyn_cast<ConstantInt>(
90+
cast<ConstantAsMetadata>(Node->getOperand(i))->getValue()))
91+
if (F.getFunctionType()->getParamType(i)->isPointerTy())
92+
return CI->getSExtValue();
93+
return BufferLoc;
94+
}
8495

8596
} // namespace llvm

‎llvm/lib/Target/SPIRV/SPIRVMetadata.h

Copy file name to clipboardExpand all lines: llvm/lib/Target/SPIRV/SPIRVMetadata.h
+4-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef LLVM_LIB_TARGET_SPIRV_SPIRVMETADATA_H
1515
#define LLVM_LIB_TARGET_SPIRV_SPIRVMETADATA_H
1616

17+
#include "llvm/CodeGen/Register.h"
1718
#include "llvm/IR/Metadata.h"
1819
#include "llvm/IR/Module.h"
1920

@@ -25,6 +26,8 @@ namespace llvm {
2526

2627
MDString *getOCLKernelArgAccessQual(const Function &F, unsigned ArgIdx);
2728
MDString *getOCLKernelArgTypeQual(const Function &F, unsigned ArgIdx);
28-
29+
int64_t processKernelArgBufferLocation(
30+
const Function &F, MDNode *Node, int i,
31+
llvm::ArrayRef<llvm::ArrayRef<llvm::Register>> VRegs, int64_t BufferLoc);
2932
} // namespace llvm
3033
#endif // LLVM_LIB_TARGET_SPIRV_METADATA_H

‎llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp

Copy file name to clipboardExpand all lines: llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
+3
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,9 @@ static void addOpDecorateReqs(const MachineInstr &MI, unsigned DecIndex,
920920
} else if (Dec == SPIRV::Decoration::FPMaxErrorDecorationINTEL) {
921921
Reqs.addRequirements(SPIRV::Capability::FPMaxErrorINTEL);
922922
Reqs.addExtension(SPIRV::Extension::SPV_INTEL_fp_max_error);
923+
} else if (Dec == SPIRV::Decoration::BufferLocationINTEL) {
924+
Reqs.addRequirements(SPIRV::Capability::FPGABufferLocationINTEL);
925+
Reqs.addExtension(SPIRV::Extension::SPV_INTEL_fpga_buffer_location);
923926
}
924927
}
925928

‎llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td

Copy file name to clipboardExpand all lines: llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
+3
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ defm SPV_INTEL_memory_access_aliasing : ExtensionOperand<118>;
315315
defm SPV_INTEL_fp_max_error : ExtensionOperand<119>;
316316
defm SPV_INTEL_ternary_bitwise_function : ExtensionOperand<120>;
317317
defm SPV_INTEL_subgroup_matrix_multiply_accumulate : ExtensionOperand<121>;
318+
defm SPV_INTEL_fpga_buffer_location : ExtensionOperand<122>;
318319

319320
//===----------------------------------------------------------------------===//
320321
// Multiclass used to define Capabilities enum values and at the same time
@@ -517,6 +518,7 @@ defm MemoryAccessAliasingINTEL : CapabilityOperand<5910, 0, 0, [SPV_INTEL_memory
517518
defm FPMaxErrorINTEL : CapabilityOperand<6169, 0, 0, [SPV_INTEL_fp_max_error], []>;
518519
defm TernaryBitwiseFunctionINTEL : CapabilityOperand<6241, 0, 0, [SPV_INTEL_ternary_bitwise_function], []>;
519520
defm SubgroupMatrixMultiplyAccumulateINTEL : CapabilityOperand<6236, 0, 0, [SPV_INTEL_subgroup_matrix_multiply_accumulate], []>;
521+
defm FPGABufferLocationINTEL : CapabilityOperand<5920, 0, 0, [SPV_INTEL_fpga_buffer_location], []>;
520522

521523
//===----------------------------------------------------------------------===//
522524
// Multiclass used to define SourceLanguage enum values and at the same time
@@ -1268,6 +1270,7 @@ defm FunctionFloatingPointModeINTEL : DecorationOperand<6080, 0, 0, [], [Functio
12681270
defm AliasScopeINTEL : DecorationOperand<5914, 0, 0, [], [MemoryAccessAliasingINTEL]>;
12691271
defm NoAliasINTEL : DecorationOperand<5915, 0, 0, [], [MemoryAccessAliasingINTEL]>;
12701272
defm FPMaxErrorDecorationINTEL : DecorationOperand<6170, 0, 0, [], [FPMaxErrorINTEL]>;
1273+
defm BufferLocationINTEL : DecorationOperand<5921, 0, 0, [SPV_INTEL_fpga_buffer_location], [FPGABufferLocationINTEL]>;
12711274

12721275
//===----------------------------------------------------------------------===//
12731276
// Multiclass used to define BuiltIn enum values and at the same time
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_fpga_buffer_location %s -o %t.spt
2+
; RUN: FileCheck %s --input-file=%t.spt
3+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_fpga_buffer_location %s -o - -filetype=obj | spirv-val %}
4+
5+
; CHECK-DAG: OpCapability FPGABufferLocationINTEL
6+
; CHECK-DAG: OpExtension "SPV_INTEL_fpga_buffer_location"
7+
; CHECK-DAG: OpName %[[#ARGA:]] "a"
8+
; CHECK-DAG: OpName %[[#ARGB:]] "b"
9+
; CHECK-DAG: OpName %[[#ARGC:]] "c"
10+
; CHECK-DAG: OpName %[[#ARGD:]] "d"
11+
; CHECK-DAG: OpName %[[#ARGE:]] "e"
12+
; CHECK-NOT: OpDecorate %[[#ARGC]] BufferLocationINTEL -1
13+
; CHECK-NOT: OpDecorate %[[#ARGC]] BufferLocationINTEL -1
14+
; CHECK-DAG: OpDecorate %[[#ARGA]] BufferLocationINTEL 1
15+
; CHECK-DAG: OpDecorate %[[#ARGB]] BufferLocationINTEL 2
16+
; CHECK-NOT: OpDecorate %[[#ARGD]] BufferLocationINTEL -1
17+
; CHECK-NOT: OpDecorate %[[#ARGE]] BufferLocationINTEL 3
18+
; CHECK-DAG: OpDecorate %[[#]] BufferLocationINTEL 123456789
19+
20+
; CHECK-DAG: %[[#]] = OpFunction
21+
; CHECK-DAG: %[[#ARGA]] = OpFunctionParameter %[[#]]
22+
; CHECK-DAG: %[[#ARGB]] = OpFunctionParameter %[[#]]
23+
; CHECK-DAG: %[[#ARGC]] = OpFunctionParameter %[[#]]
24+
25+
26+
27+
28+
%struct.MyIP = type { ptr addrspace(4) }
29+
30+
@.str.4 = internal unnamed_addr addrspace(1) constant [19 x i8] c"{5921:\22123456789\22}\00"
31+
@.str.1 = internal unnamed_addr addrspace(1) constant [9 x i8] c"main.cpp\00"
32+
33+
; Function Attrs: nounwind
34+
define spir_kernel void @test(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, i32 %d, i32 %e) local_unnamed_addr !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !5 !kernel_arg_buffer_location !6
35+
{
36+
entry:
37+
ret void
38+
}
39+
40+
; test1 : direct on kernel argument
41+
; Function Attrs: norecurse nounwind readnone
42+
define spir_kernel void @test.1(ptr addrspace(4) %a) #0
43+
{
44+
entry:
45+
%0 = call ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4) %a, ptr addrspace(1) getelementptr inbounds ([19 x i8], ptr addrspace(1) @.str.4, i32 0, i32 0), ptr addrspace(1) getelementptr inbounds ([9 x i8], ptr addrspace(1) @.str.1, i32 0, i32 0), i32 7, ptr addrspace(1) null)
46+
store i8 0, ptr addrspace(4) %0, align 8
47+
ret void
48+
}
49+
50+
$test.2 = comdat any
51+
; test2 : general
52+
; Function Attrs: convergent mustprogress norecurse
53+
define weak_odr dso_local spir_kernel void @test.2(ptr addrspace(1) align 4 %arg_a) #0 comdat !kernel_arg_buffer_location !7 {
54+
entry:
55+
%this.addr.i = alloca ptr addrspace(4), align 8
56+
%arg_a.addr = alloca ptr addrspace(1), align 8
57+
%MyIP = alloca %struct.MyIP, align 8
58+
%arg_a.addr.ascast = addrspacecast ptr %arg_a.addr to ptr addrspace(4)
59+
%MyIP.ascast = addrspacecast ptr %MyIP to ptr addrspace(4)
60+
store ptr addrspace(1) %arg_a, ptr addrspace(4) %arg_a.addr.ascast, align 8
61+
%a = getelementptr inbounds %struct.MyIP, ptr addrspace(4) %MyIP.ascast, i32 0, i32 0
62+
%0 = call ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4) %a, ptr addrspace(1) getelementptr inbounds ([33 x i8], ptr addrspace(1) @.str.4, i32 0, i32 0), ptr addrspace(1) getelementptr inbounds ([9 x i8], ptr addrspace(1) @.str.1, i32 0, i32 0), i32 7, ptr addrspace(1) null)
63+
%b = load ptr addrspace(1), ptr addrspace(4) %arg_a.addr.ascast, align 8
64+
%1 = addrspacecast ptr addrspace(1) %b to ptr addrspace(4)
65+
store ptr addrspace(4) %1, ptr addrspace(4) %0, align 8
66+
%this.addr.ascast.i = addrspacecast ptr %this.addr.i to ptr addrspace(4)
67+
store ptr addrspace(4) %MyIP.ascast, ptr addrspace(4) %this.addr.ascast.i, align 8
68+
%this1.i = load ptr addrspace(4), ptr addrspace(4) %this.addr.ascast.i, align 8
69+
%a.i = getelementptr inbounds %struct.MyIP, ptr addrspace(4) %this1.i, i32 0, i32 0
70+
%2 = call ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4) %a.i, ptr addrspace(1) getelementptr inbounds ([19 x i8], ptr addrspace(1) @.str.4, i32 0, i32 0), ptr addrspace(1) getelementptr inbounds ([9 x i8], ptr addrspace(1) @.str.1, i32 0, i32 0), i32 7, ptr addrspace(1) null)
71+
%3 = load ptr addrspace(4), ptr addrspace(4) %2, align 8
72+
%4 = load i32, ptr addrspace(4) %3, align 4
73+
%inc.i = add nsw i32 %4, 1
74+
store i32 %inc.i, ptr addrspace(4) %3, align 4
75+
ret void
76+
}
77+
78+
; test3 : memcpy
79+
; Function Attrs: convergent mustprogress norecurse
80+
define spir_kernel void @test.3(ptr addrspace(1) align 4 %arg_a, ptr %arg_b) {
81+
entry:
82+
%this.addr.i = alloca ptr addrspace(4), align 8
83+
%arg_a.addr = alloca ptr addrspace(1), align 8
84+
%MyIP = alloca %struct.MyIP, align 8
85+
%arg_a.addr.ascast = addrspacecast ptr %arg_a.addr to ptr addrspace(4)
86+
%MyIP.ascast = addrspacecast ptr %MyIP to ptr addrspace(4)
87+
store ptr addrspace(1) %arg_a, ptr addrspace(4) %arg_a.addr.ascast, align 8
88+
%a = getelementptr inbounds %struct.MyIP, ptr addrspace(4) %MyIP.ascast, i32 0, i32 0
89+
%0 = call ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4) %a, ptr addrspace(1) getelementptr inbounds ([19 x i8], ptr addrspace(1) @.str.4, i32 0, i32 0), ptr addrspace(1) getelementptr inbounds ([9 x i8], ptr addrspace(1) @.str.1, i32 0, i32 0), i32 7, ptr addrspace(1) null)
90+
call void @llvm.memcpy.p4.p0(ptr addrspace(4) %0, ptr %arg_b, i64 4, i1 false)
91+
ret void
92+
}
93+
94+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
95+
declare ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4), ptr addrspace(1), ptr addrspace(1), i32, ptr addrspace(1)) #1
96+
97+
; Function Attrs: argmemonly nofree nounwind willreturn
98+
declare void @llvm.memcpy.p4.p0(ptr addrspace(4) noalias captures(none) writeonly, ptr noalias captures(none) readonly, i64, i1 immarg) #2
99+
100+
!opencl.enable.FP_CONTRACT = !{}
101+
!opencl.ocl.version = !{!0}
102+
!opencl.spir.version = !{!0}
103+
!opencl.used.extensions = !{!1}
104+
!opencl.used.optional.core.features = !{!1}
105+
!opencl.compiler.options = !{!1}
106+
!llvm.ident = !{!2}
107+
108+
!0 = !{i32 2, i32 0}
109+
!1 = !{}
110+
!2 = !{!""}
111+
!3 = !{i32 1, i32 1, i32 1}
112+
!4 = !{!"none", !"none", !"none"}
113+
!5 = !{!"int*", !"float*", !"int*"}
114+
!6 = !{i32 1, i32 2, i32 -1, i32 -1, i32 3}
115+
!7 = !{i32 -1}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_fpga_buffer_location %s -o %t.spt
2+
; RUN: FileCheck %s --input-file=%t.spt
3+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_fpga_buffer_location %s -o - -filetype=obj | spirv-val %}
4+
5+
; CHECK-DAG: OpDecorate %[[#Ptr1:]] BufferLocationINTEL 0
6+
; CHECK-DAG: OpDecorate %[[#Ptr2:]] BufferLocationINTEL 0
7+
8+
; CHECK-DAG: %[[#Ptr1]] = OpLoad %[[#]]
9+
; CHECK-DAG: OpReturnValue %[[#Ptr1]]
10+
11+
; CHECK-DAG: %[[#Bitcast:]] = OpBitcast %[[#]] %[[#]]
12+
; CHECK-DAG: %[[#Ptr2]] = OpInBoundsPtrAccessChain %[[#]] %[[#Bitcast]] %[[#]] %[[#]]
13+
; CHECK-DAG: OpReturnValue %[[#Ptr2]]
14+
15+
16+
%struct.MyIP = type <{ ptr addrspace(4), i32, [4 x i8] }>
17+
18+
$_ZNK4MyIPclEv = comdat any
19+
20+
$_Z8annotateIiEPT_S1_ = comdat any
21+
22+
$_Z9annotate2IiEPT_S1_ = comdat any
23+
24+
@.str = private unnamed_addr addrspace(1) constant [16 x i8] c"sycl-properties\00", section "llvm.metadata"
25+
@.str.1 = private unnamed_addr addrspace(1) constant [9 x i8] c"test.cpp\00", section "llvm.metadata"
26+
@.str.2 = private unnamed_addr addrspace(1) constant [21 x i8] c"sycl-buffer-location\00", section "llvm.metadata"
27+
@.str.3 = private unnamed_addr addrspace(1) constant [2 x i8] c"0\00", section "llvm.metadata"
28+
@.args = private unnamed_addr addrspace(1) constant { ptr addrspace(1), ptr addrspace(1) } { ptr addrspace(1) @.str.2, ptr addrspace(1) @.str.3 }, section "llvm.metadata"
29+
@.str.4 = private unnamed_addr addrspace(1) constant [11 x i8] c"{5921:\220\22}\00", section "llvm.metadata"
30+
31+
; Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
32+
define linkonce_odr dso_local spir_func void @_ZNK4MyIPclEv(ptr addrspace(4) %this) comdat align 2 !srcloc !8 {
33+
entry:
34+
%call1 = call spir_func noundef ptr addrspace(4) @_Z8annotateIiEPT_S1_(ptr addrspace(4) noundef %this)
35+
%call2 = call spir_func noundef ptr addrspace(4) @_Z9annotate2IiEPT_S1_(ptr addrspace(4) noundef %this)
36+
ret void
37+
}
38+
39+
; Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
40+
define linkonce_odr dso_local spir_func noundef ptr addrspace(4) @_Z8annotateIiEPT_S1_(ptr addrspace(4) noundef %ptr) comdat !srcloc !9 {
41+
entry:
42+
%retval = alloca ptr addrspace(4), align 8
43+
%ptr.addr = alloca ptr addrspace(4), align 8
44+
%retval.ascast = addrspacecast ptr %retval to ptr addrspace(4)
45+
%ptr.addr.ascast = addrspacecast ptr %ptr.addr to ptr addrspace(4)
46+
store ptr addrspace(4) %ptr, ptr addrspace(4) %ptr.addr.ascast, align 8
47+
%0 = load ptr addrspace(4), ptr addrspace(4) %ptr.addr.ascast, align 8
48+
%1 = call ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4) %0, ptr addrspace(1) @.str.4, ptr addrspace(1) @.str.1, i32 25, ptr addrspace(1) null)
49+
ret ptr addrspace(4) %1
50+
}
51+
52+
; Function Attrs: convergent mustprogress noinline norecurse nounwind optnone
53+
define linkonce_odr dso_local spir_func noundef ptr addrspace(4) @_Z9annotate2IiEPT_S1_(ptr addrspace(4) noundef %ptr) comdat !srcloc !9 {
54+
entry:
55+
%retval = alloca ptr addrspace(4), align 8
56+
%ptr.addr = alloca ptr addrspace(4), align 8
57+
%retval.ascast = addrspacecast ptr %retval to ptr addrspace(4)
58+
%ptr.addr.ascast = addrspacecast ptr %ptr.addr to ptr addrspace(4)
59+
store ptr addrspace(4) %ptr, ptr addrspace(4) %ptr.addr.ascast, align 8
60+
%0 = load ptr addrspace(4), ptr addrspace(4) %ptr.addr.ascast, align 8
61+
%1 = getelementptr inbounds %struct.MyIP, ptr addrspace(4) %0, i32 0, i32 0
62+
%2 = call ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4) %1, ptr addrspace(1) @.str.4, ptr addrspace(1) @.str.1, i32 25, ptr addrspace(1) null)
63+
ret ptr addrspace(4) %2
64+
}
65+
66+
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
67+
declare ptr addrspace(4) @llvm.ptr.annotation.p4.p1(ptr addrspace(4), ptr addrspace(1), ptr addrspace(1), i32, ptr addrspace(1))
68+
69+
!llvm.module.flags = !{!0, !1}
70+
!opencl.spir.version = !{!2}
71+
!spirv.Source = !{!3}
72+
!llvm.ident = !{!4}
73+
74+
!0 = !{i32 1, !"wchar_size", i32 4}
75+
!1 = !{i32 7, !"frame-pointer", i32 2}
76+
!2 = !{i32 1, i32 2}
77+
!3 = !{i32 4, i32 100000}
78+
!4 = !{!"Intel(R) oneAPI DPC++/C++ Compiler 2024.2.0 (2024.x.0.YYYYMMDD)"}
79+
!5 = !{i32 717}
80+
!6 = !{i32 -1, i32 -1}
81+
!7 = !{}
82+
!8 = !{i32 1004}
83+
!9 = !{i32 563}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.