1+ ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_ALTERA_blocking_pipes %s -o - | FileCheck %s --check-prefixes=CHECK-SPIRV
2+ ; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_ALTERA_blocking_pipes %s -o - -filetype=obj | spirv-val %}
3+
4+ %opencl.pipe_ro_t = type opaque
5+ %opencl.pipe_wo_t = type opaque
6+
7+ ; CHECK-SPIRV: OpCapability BlockingPipesALTERA
8+ ; CHECK-SPIRV: OpExtension "SPV_ALTERA_blocking_pipes"
9+ ; CHECK-SPIRV: %[[PipeRTy:[0-9]+]] = OpTypePipe ReadOnly
10+ ; CHECK-SPIRV: %[[PipeWTy:[0-9]+]] = OpTypePipe WriteOnly
11+ ; CHECK-SPIRV: %[[PipeR1:[0-9]+]] = OpLoad %[[PipeRTy]] %[[#]] Aligned 8
12+ ; CHECK-SPIRV: OpReadPipeBlockingALTERA %[[PipeR1]] %[[#]] %[[#]] %[[#]]
13+ ; CHECK-SPIRV: %[[PipeR2:[0-9]+]] = OpLoad %[[PipeRTy]] %[[#]] Aligned 8
14+ ; CHECK-SPIRV: OpReadPipeBlockingALTERA %[[PipeR2]] %[[#]] %[[#]] %[[#]]
15+ ; CHECK-SPIRV: %[[PipeW1:[0-9]+]] = OpLoad %[[PipeWTy]] %[[#]] Aligned 8
16+ ; CHECK-SPIRV: OpWritePipeBlockingALTERA %[[PipeW1]] %[[#]] %[[#]] %[[#]]
17+ ; CHECK-SPIRV: %[[PipeW2:[0-9]+]] = OpLoad %[[PipeWTy]] %[[#]] Aligned 8
18+ ; CHECK-SPIRV: OpWritePipeBlockingALTERA %[[PipeW2]] %[[#]] %[[#]] %[[#]]
19+
20+ define spir_func void @foo (target ("spirv.Pipe" , 0 ) %p , ptr addrspace (1 ) %ptr ) {
21+ entry:
22+ %p.addr = alloca target ("spirv.Pipe" , 0 ), align 8
23+ %ptr.addr = alloca ptr addrspace (1 ), align 8
24+ store target ("spirv.Pipe" , 0 ) %p , target ("spirv.Pipe" , 0 )* %p.addr , align 8
25+ store ptr addrspace (1 ) %ptr , ptr %ptr.addr , align 8
26+ %0 = load target ("spirv.Pipe" , 0 ), target ("spirv.Pipe" , 0 )* %p.addr , align 8
27+ %1 = load ptr addrspace (1 ), ptr %ptr.addr , align 8
28+ %2 = addrspacecast ptr addrspace (1 ) %1 to ptr addrspace (4 )
29+ call spir_func void @_Z29__spirv_ReadPipeBlockingINTELIiEv8ocl_pipePiii (target ("spirv.Pipe" , 0 ) %0 , ptr addrspace (4 ) %2 , i32 4 , i32 4 )
30+ ret void
31+ }
32+
33+ declare dso_local spir_func void @_Z29__spirv_ReadPipeBlockingINTELIiEv8ocl_pipePiii (target ("spirv.Pipe" , 0 ), ptr addrspace (4 ), i32 , i32 )
34+
35+ define spir_func void @bar (target ("spirv.Pipe" , 0 ) %p , ptr addrspace (1 ) %ptr ) {
36+ entry:
37+ %p.addr = alloca target ("spirv.Pipe" , 0 ), align 8
38+ %ptr.addr = alloca ptr addrspace (1 ), align 8
39+ store target ("spirv.Pipe" , 0 ) %p , target ("spirv.Pipe" , 0 )* %p.addr , align 8
40+ store ptr addrspace (1 ) %ptr , ptr %ptr.addr , align 8
41+ %0 = load target ("spirv.Pipe" , 0 ), target ("spirv.Pipe" , 0 )* %p.addr , align 8
42+ %1 = load ptr addrspace (1 ), ptr %ptr.addr , align 8
43+ %2 = addrspacecast ptr addrspace (1 ) %1 to ptr addrspace (4 )
44+ call spir_func void @_Z29__spirv_ReadPipeBlockingINTELIiEv8ocl_pipePvii (target ("spirv.Pipe" , 0 ) %0 , ptr addrspace (4 ) %2 , i32 4 , i32 4 )
45+ ret void
46+ }
47+
48+ declare dso_local spir_func void @_Z29__spirv_ReadPipeBlockingINTELIiEv8ocl_pipePvii (target ("spirv.Pipe" , 0 ), ptr addrspace (4 ), i32 , i32 )
49+
50+ define spir_func void @boo (target ("spirv.Pipe" , 1 ) %p , ptr addrspace (1 ) %ptr ) {
51+ entry:
52+ %p.addr = alloca target ("spirv.Pipe" , 1 ), align 8
53+ %ptr.addr = alloca ptr addrspace (1 ), align 8
54+ store target ("spirv.Pipe" , 1 ) %p , target ("spirv.Pipe" , 1 )* %p.addr , align 8
55+ store ptr addrspace (1 ) %ptr , ptr %ptr.addr , align 8
56+ %0 = load target ("spirv.Pipe" , 1 ), target ("spirv.Pipe" , 1 )* %p.addr , align 8
57+ %1 = load ptr addrspace (1 ), ptr %ptr.addr , align 8
58+ %2 = addrspacecast ptr addrspace (1 ) %1 to ptr addrspace (4 )
59+ call spir_func void @_Z30__spirv_WritePipeBlockingINTELIKiEv8ocl_pipePiii (target ("spirv.Pipe" , 1 ) %0 , ptr addrspace (4 ) %2 , i32 4 , i32 4 )
60+ ret void
61+ }
62+
63+ declare dso_local spir_func void @_Z30__spirv_WritePipeBlockingINTELIKiEv8ocl_pipePiii (target ("spirv.Pipe" , 1 ), ptr addrspace (4 ), i32 , i32 )
64+
65+ define spir_func void @baz (target ("spirv.Pipe" , 1 ) %p , ptr addrspace (1 ) %ptr ) {
66+ entry:
67+ %p.addr = alloca target ("spirv.Pipe" , 1 ), align 8
68+ %ptr.addr = alloca ptr addrspace (1 ), align 8
69+ store target ("spirv.Pipe" , 1 ) %p , target ("spirv.Pipe" , 1 )* %p.addr , align 8
70+ store ptr addrspace (1 ) %ptr , ptr %ptr.addr , align 8
71+ %0 = load target ("spirv.Pipe" , 1 ), target ("spirv.Pipe" , 1 )* %p.addr , align 8
72+ %1 = load ptr addrspace (1 ), ptr %ptr.addr , align 8
73+ %2 = addrspacecast ptr addrspace (1 ) %1 to ptr addrspace (4 )
74+ call spir_func void @_Z30__spirv_WritePipeBlockingINTELIKiEv8ocl_pipePvii (target ("spirv.Pipe" , 1 ) %0 , ptr addrspace (4 ) %2 , i32 4 , i32 4 )
75+ ret void
76+ }
77+
78+ declare dso_local spir_func void @_Z30__spirv_WritePipeBlockingINTELIKiEv8ocl_pipePvii (target ("spirv.Pipe" , 1 ), ptr addrspace (4 ), i32 , i32 )
79+
80+ ; CHECK-LLVM: declare spir_func void @__read_pipe_2_bl(ptr addrspace(1), ptr addrspace(4), i32, i32)
81+ ; CHECK-LLVM: declare spir_func void @__write_pipe_2_bl(ptr addrspace(1), ptr addrspace(4), i32, i32)
82+
83+ define linkonce_odr dso_local spir_func void @WritePipeBLockingi9Pointer (ptr addrspace (4 ) align 2 dereferenceable (2 ) %_Data ) {
84+ entry:
85+ %_Data.addr = alloca ptr addrspace (4 ), align 8
86+ %_WPipe = alloca target ("spirv.Pipe" , 1 ), align 8
87+ %_Data.addr.ascast = addrspacecast ptr %_Data.addr to ptr addrspace (4 )
88+ %_WPipe.ascast = addrspacecast target ("spirv.Pipe" , 1 )* %_WPipe to target ("spirv.Pipe" , 1 ) addrspace (4 )*
89+ store ptr addrspace (4 ) %_Data , ptr addrspace (4 ) %_Data.addr.ascast , align 8
90+ %0 = bitcast target ("spirv.Pipe" , 1 )* %_WPipe to ptr
91+ %1 = load target ("spirv.Pipe" , 1 ), target ("spirv.Pipe" , 1 ) addrspace (4 )* %_WPipe.ascast , align 8
92+ %2 = load ptr addrspace (4 ), ptr addrspace (4 ) %_Data.addr.ascast , align 8
93+ call spir_func void @_Z30__spirv_WritePipeBlockingINTELIDU9_Ev8ocl_pipePKT_ii (target ("spirv.Pipe" , 1 ) %1 , ptr addrspace (4 ) %2 , i32 2 , i32 2 )
94+ ret void
95+ }
96+
97+ declare dso_local spir_func void @_Z30__spirv_WritePipeBlockingINTELIDU9_Ev8ocl_pipePKT_ii (target ("spirv.Pipe" , 1 ), ptr addrspace (4 ), i32 , i32 )
98+
0 commit comments