98 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_ALTERA_blocking_pipes %s -o - | FileCheck %s --check-prefixes=CHECK-SPIRV2; 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 opaque5%opencl.pipe_wo_t = type opaque6 7; CHECK-SPIRV: OpCapability BlockingPipesALTERA8; CHECK-SPIRV: OpExtension "SPV_ALTERA_blocking_pipes"9; CHECK-SPIRV: %[[PipeRTy:[0-9]+]] = OpTypePipe ReadOnly10; CHECK-SPIRV: %[[PipeWTy:[0-9]+]] = OpTypePipe WriteOnly11; CHECK-SPIRV: %[[PipeR1:[0-9]+]] = OpLoad %[[PipeRTy]] %[[#]] Aligned 812; CHECK-SPIRV: OpReadPipeBlockingALTERA %[[PipeR1]] %[[#]] %[[#]] %[[#]]13; CHECK-SPIRV: %[[PipeR2:[0-9]+]] = OpLoad %[[PipeRTy]] %[[#]] Aligned 814; CHECK-SPIRV: OpReadPipeBlockingALTERA %[[PipeR2]] %[[#]] %[[#]] %[[#]]15; CHECK-SPIRV: %[[PipeW1:[0-9]+]] = OpLoad %[[PipeWTy]] %[[#]] Aligned 816; CHECK-SPIRV: OpWritePipeBlockingALTERA %[[PipeW1]] %[[#]] %[[#]] %[[#]]17; CHECK-SPIRV: %[[PipeW2:[0-9]+]] = OpLoad %[[PipeWTy]] %[[#]] Aligned 818; CHECK-SPIRV: OpWritePipeBlockingALTERA %[[PipeW2]] %[[#]] %[[#]] %[[#]]19 20define spir_func void @foo(target("spirv.Pipe", 0) %p, ptr addrspace(1) %ptr) {21entry:22 %p.addr = alloca target("spirv.Pipe", 0), align 823 %ptr.addr = alloca ptr addrspace(1), align 824 store target("spirv.Pipe", 0) %p, target("spirv.Pipe", 0)* %p.addr, align 825 store ptr addrspace(1) %ptr, ptr %ptr.addr, align 826 %0 = load target("spirv.Pipe", 0), target("spirv.Pipe", 0)* %p.addr, align 827 %1 = load ptr addrspace(1), ptr %ptr.addr, align 828 %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 void31}32 33declare dso_local spir_func void @_Z29__spirv_ReadPipeBlockingINTELIiEv8ocl_pipePiii(target("spirv.Pipe", 0), ptr addrspace(4), i32, i32)34 35define spir_func void @bar(target("spirv.Pipe", 0) %p, ptr addrspace(1) %ptr) {36entry:37 %p.addr = alloca target("spirv.Pipe", 0), align 838 %ptr.addr = alloca ptr addrspace(1), align 839 store target("spirv.Pipe", 0) %p, target("spirv.Pipe", 0)* %p.addr, align 840 store ptr addrspace(1) %ptr, ptr %ptr.addr, align 841 %0 = load target("spirv.Pipe", 0), target("spirv.Pipe", 0)* %p.addr, align 842 %1 = load ptr addrspace(1), ptr %ptr.addr, align 843 %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 void46}47 48declare dso_local spir_func void @_Z29__spirv_ReadPipeBlockingINTELIiEv8ocl_pipePvii(target("spirv.Pipe", 0), ptr addrspace(4), i32, i32)49 50define spir_func void @boo(target("spirv.Pipe", 1) %p, ptr addrspace(1) %ptr) {51entry:52 %p.addr = alloca target("spirv.Pipe", 1), align 853 %ptr.addr = alloca ptr addrspace(1), align 854 store target("spirv.Pipe", 1) %p, target("spirv.Pipe", 1)* %p.addr, align 855 store ptr addrspace(1) %ptr, ptr %ptr.addr, align 856 %0 = load target("spirv.Pipe", 1), target("spirv.Pipe", 1)* %p.addr, align 857 %1 = load ptr addrspace(1), ptr %ptr.addr, align 858 %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 void61}62 63declare dso_local spir_func void @_Z30__spirv_WritePipeBlockingINTELIKiEv8ocl_pipePiii(target("spirv.Pipe", 1), ptr addrspace(4), i32, i32)64 65define spir_func void @baz(target("spirv.Pipe", 1) %p, ptr addrspace(1) %ptr) {66entry:67 %p.addr = alloca target("spirv.Pipe", 1), align 868 %ptr.addr = alloca ptr addrspace(1), align 869 store target("spirv.Pipe", 1) %p, target("spirv.Pipe", 1)* %p.addr, align 870 store ptr addrspace(1) %ptr, ptr %ptr.addr, align 871 %0 = load target("spirv.Pipe", 1), target("spirv.Pipe", 1)* %p.addr, align 872 %1 = load ptr addrspace(1), ptr %ptr.addr, align 873 %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 void76}77 78declare 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 83define linkonce_odr dso_local spir_func void @WritePipeBLockingi9Pointer(ptr addrspace(4) align 2 dereferenceable(2) %_Data) {84entry:85 %_Data.addr = alloca ptr addrspace(4), align 886 %_WPipe = alloca target("spirv.Pipe", 1), align 887 %_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 890 %0 = bitcast target("spirv.Pipe", 1)* %_WPipe to ptr91 %1 = load target("spirv.Pipe", 1), target("spirv.Pipe", 1) addrspace(4)* %_WPipe.ascast, align 892 %2 = load ptr addrspace(4), ptr addrspace(4) %_Data.addr.ascast, align 893 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 void95}96 97declare dso_local spir_func void @_Z30__spirv_WritePipeBlockingINTELIDU9_Ev8ocl_pipePKT_ii(target("spirv.Pipe", 1), ptr addrspace(4), i32, i32)98