diff options
author | I-Jui (Ray) Sung <ijsung@google.com> | 2016-11-16 16:27:23 -0800 |
---|---|---|
committer | I-Jui (Ray) Sung <ijsung@google.com> | 2016-11-16 16:59:46 -0800 |
commit | 0e839d7e9d7e5a096949e39a4c6e00670c8dee64 (patch) | |
tree | eeb77f3f1009dbd47aea77fafd8e682bbc959dc6 /test | |
parent | 90178d28d62d61af255809d52b063663c37bb9fb (diff) | |
download | spirv-llvm-0e839d7e9d7e5a096949e39a4c6e00670c8dee64.tar.gz |
Converted source files of inconsistent formats to Unix
Did so by "find . -name \* -exec dos2unix {} \;"
Test: build
Change-Id: I74514445ba590e75720e00625050562309193eef
Diffstat (limited to 'test')
-rw-r--r-- | test/SPIRV/CreatePipeFromPipeStorage.ll | 338 | ||||
-rw-r--r-- | test/SPIRV/ExecutionMode.ll | 300 | ||||
-rw-r--r-- | test/SPIRV/ExecutionMode_SPIR_to_SPIRV.ll | 108 | ||||
-rw-r--r-- | test/SPIRV/PipeStorage.ll | 116 | ||||
-rw-r--r-- | test/SPIRV/SPIRVVersionAutodetect_1_0.ll | 62 | ||||
-rw-r--r-- | test/SPIRV/SPIRVVersionAutodetect_1_1.ll | 66 | ||||
-rw-r--r-- | test/SPIRV/builtin_vars-decorate.ll | 192 | ||||
-rw-r--r-- | test/SPIRV/linkage-types.ll | 334 | ||||
-rw-r--r-- | test/SPIRV/simple.ll | 316 | ||||
-rw-r--r-- | test/SPIRV/transcoding/DecorationMaxByteOffset.ll | 106 | ||||
-rw-r--r-- | test/SPIRV/transcoding/check_ro_qualifier.ll | 120 | ||||
-rw-r--r-- | test/SPIRV/transcoding/check_wo_qualifier.ll | 122 |
12 files changed, 1090 insertions, 1090 deletions
diff --git a/test/SPIRV/CreatePipeFromPipeStorage.ll b/test/SPIRV/CreatePipeFromPipeStorage.ll index 178fc8c7..a18b1ff7 100644 --- a/test/SPIRV/CreatePipeFromPipeStorage.ll +++ b/test/SPIRV/CreatePipeFromPipeStorage.ll @@ -1,169 +1,169 @@ -; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt
-; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
-
-
-; CHECK-LLVM: %"[[CL_PIPE_STORAGE_NAME:[^"]+]]" = type { %spirv.PipeStorage addrspace(1)* }
-; CHECK-LLVM: %"[[CL_READ_PIPE_NAME:[^"]+read>]]" = type { %spirv.Pipe._0 addrspace(1)* }
-; CHECK-LLVM: %spirv.Pipe._0 = type opaque
-; CHECK-LLVM: %"[[CL_WRITE_PIPE_NAME:[^"]+write>]]" = type { %spirv.Pipe._1 addrspace(1)* }
-; CHECK-LLVM: %spirv.Pipe._1 = type opaque
-
-
-; CHECK-SPIRV: Capability Pipes
-; CHECK-SPIRV: Capability PipeStorage
-
-; CHECK-SPIRV: Name [[PIPE_STORAGE_ID:[0-9]+]] "mygpipe"
-; CHECK-SPIRV: Name [[READ_PIPE_WRAPPER_ID:[0-9]+]] "myrpipe"
-; CHECK-SPIRV: Name [[WRITE_PIPE_WRAPPER_ID:[0-9]+]] "mywpipe"
-; CHECK-SPIRV: Name [[WRITE_PIPE_WRAPPER_CTOR:[0-9]+]] "_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE"
-; CHECK-SPIRV: Name [[READ_PIPE_WRAPPER_CTOR:[0-9]+]] "_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE"
-
-; CHECK-SPIRV: TypeInt [[INT_T:[0-9]+]] 32 0
-; CHECK-SPIRV: Constant [[INT_T]] [[CONSTANT_ZERO_ID:[0-9]+]] 0
-
-; CHECK-SPIRV: TypePipe [[READ_PIPE:[0-9]+]] 0
-; CHECK-SPIRV: TypeStruct [[READ_PIPE_WRAPPER:[0-9]+]] [[READ_PIPE]]
-; CHECK-SPIRV: TypePointer [[READ_PIPE_WRAPPER_PTR:[0-9]+]] 7 [[READ_PIPE_WRAPPER]]
-; CHECK-SPIRV: TypePipe [[WRITE_PIPE:[0-9]+]] 1
-; CHECK-SPIRV: TypeStruct [[WRITE_PIPE_WRAPPER:[0-9]+]] [[WRITE_PIPE]]
-
-; CHECK-SPIRV: TypePointer [[WRITE_PIPE_WRAPPER_PTR:[0-9]+]] 7 [[WRITE_PIPE_WRAPPER]]
-
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-%spirv.ConstantPipeStorage = type { i32, i32, i32 }
-%"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" = type { %spirv.PipeStorage addrspace(1)* }
-%spirv.PipeStorage = type opaque
-%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" = type { %spirv.Pipe._0 addrspace(1)* }
-%spirv.Pipe._0 = type opaque
-%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" = type { %spirv.Pipe._1 addrspace(1)* }
-%spirv.Pipe._1 = type opaque
-
-@_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE = linkonce_odr addrspace(1) global %spirv.ConstantPipeStorage { i32 16, i32 16, i32 1 }, align 4
-@mygpipe = addrspace(1) global %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" { %spirv.PipeStorage addrspace(1)* bitcast (%spirv.ConstantPipeStorage addrspace(1)* @_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE to %spirv.PipeStorage addrspace(1)*) }, align 4
-
-
-; Function Attrs: nounwind
-define spir_kernel void @worker() {
-entry:
- ; CHECK-LLVM: %myrpipe = alloca %"[[CL_READ_PIPE_NAME]]", align 4
- ; CHECK-LLVM: %mywpipe = alloca %"[[CL_WRITE_PIPE_NAME]]", align 4
-
- ; CHECK-SPIRV: Variable [[READ_PIPE_WRAPPER_PTR]] [[READ_PIPE_WRAPPER_ID]] 7
- ; CHECK-SPIRV: Variable [[WRITE_PIPE_WRAPPER_PTR]] [[WRITE_PIPE_WRAPPER_ID]] 7
-
- %myrpipe = alloca %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>", align 4
- %mywpipe = alloca %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>", align 4
-
-
- ; CHECK-LLVM: %[[ID0:[0-9]+]] = addrspacecast %"[[CL_PIPE_STORAGE_NAME]]" addrspace(1)* @mygpipe to %"[[CL_PIPE_STORAGE_NAME]]" addrspace(4)*
- ; CHECK-LLVM: %[[ID1:[0-9]+]] = getelementptr %"[[CL_PIPE_STORAGE_NAME]]", %"[[CL_PIPE_STORAGE_NAME]]" addrspace(4)* %[[ID0]], i32 0, i32 0
-
- ; CHECK-SPIRV: PtrCastToGeneric {{[0-9]+}} [[SPIRV0:[0-9]+]] [[PIPE_STORAGE_ID]]
- ; CHECK-SPIRV: PtrAccessChain {{[0-9]+}} [[SPIRV1:[0-9]+]] [[SPIRV0]] [[CONSTANT_ZERO_ID]] [[CONSTANT_ZERO_ID]]
-
- %0 = addrspacecast %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" addrspace(1)* @mygpipe to %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" addrspace(4)*
- %1 = getelementptr %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>", %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" addrspace(4)* %0, i32 0, i32 0
-
-
- ; CHECK-LLVM: %[[PIPE_STORAGE_1:[0-9]+]] = load %spirv.PipeStorage addrspace(1)* addrspace(4)* %[[ID1]], align 4
- ; CHECK-LLVM: %[[WRITE_PIPE:[0-9]+]] = call spir_func %spirv.Pipe._1 addrspace(1)* @_Z39__spirv_CreatePipeFromPipeStorage_writePU3AS119__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %[[PIPE_STORAGE_1]])
- ; CHECK-LLVM: %[[WRITE_PIPE_WRAPPER:[0-9]+]] = addrspacecast %"[[CL_WRITE_PIPE_NAME]]"* %mywpipe to %"[[CL_WRITE_PIPE_NAME]]" addrspace(4)*
- ; CHECK-LLVM: call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"[[CL_WRITE_PIPE_NAME]]" addrspace(4)* nocapture %[[WRITE_PIPE_WRAPPER]], %spirv.Pipe._1 addrspace(1)* %[[WRITE_PIPE]])
-
- ; CHECK-SPIRV: Load {{[0-9]+}} [[PIPE_STORAGE_ID0:[0-9]+]] [[SPIRV1]] 2 4
- ; CHECK-SPIRV: CreatePipeFromPipeStorage [[WRITE_PIPE]] [[WRITE_PIPE_ID:[0-9]+]] [[PIPE_STORAGE_ID0]]
- ; CHECK-SPIRV: PtrCastToGeneric {{[0-9]+}} [[GENERIC_WRITE_PIPE_WRAPPER_ID:[0-9]+]] [[WRITE_PIPE_WRAPPER_ID]]
- ; CHECK-SPIRV: FunctionCall {{[0-9]+}} {{[0-9]+}} [[WRITE_PIPE_WRAPPER_CTOR]] [[GENERIC_WRITE_PIPE_WRAPPER_ID]] [[WRITE_PIPE_ID]]
-
- %2 = load %spirv.PipeStorage addrspace(1)*, %spirv.PipeStorage addrspace(1)* addrspace(4)* %1, align 4
- %3 = tail call spir_func %spirv.Pipe._1 addrspace(1)* @_Z39__spirv_CreatePipeFromPipeStorage_writePU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %2)
- %4 = addrspacecast %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>"* %mywpipe to %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)*
- call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* %4, %spirv.Pipe._1 addrspace(1)* %3)
-
-
- ; CHECK-LLVM: %[[PIPE_STORAGE_2:[0-9]+]] = load %spirv.PipeStorage addrspace(1)* addrspace(4)* %[[ID1]], align 4
- ; CHECK-LLVM: %[[READ_PIPE:[0-9]+]] = call spir_func %spirv.Pipe._0 addrspace(1)* @_Z38__spirv_CreatePipeFromPipeStorage_readPU3AS119__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %[[PIPE_STORAGE_2]])
- ; CHECK-LLVM: %[[READ_PIPE_WRAPPER:[0-9]+]] = addrspacecast %"[[CL_READ_PIPE_NAME]]"* %myrpipe to %"[[CL_READ_PIPE_NAME]]" addrspace(4)*
- ; CHECK-LLVM: call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"[[CL_READ_PIPE_NAME]]" addrspace(4)* nocapture %[[READ_PIPE_WRAPPER]], %spirv.Pipe._0 addrspace(1)* %[[READ_PIPE]])
-
- ; CHECK-SPIRV: Load {{[0-9]+}} [[PIPE_STORAGE_ID1:[0-9]+]] [[SPIRV1]] 2 4
- ; CHECK-SPIRV: CreatePipeFromPipeStorage [[READ_PIPE]] [[READ_PIPE_ID:[0-9]+]] [[PIPE_STORAGE_ID1]]
- ; CHECK-SPIRV: PtrCastToGeneric {{[0-9]+}} [[GENERIC_READ_PIPE_WRAPPER_ID:[0-9]+]] [[READ_PIPE_WRAPPER_ID]]
- ; CHECK-SPIRV: FunctionCall {{[0-9]+}} {{[0-9]+}} [[READ_PIPE_WRAPPER_CTOR]] [[GENERIC_READ_PIPE_WRAPPER_ID]] [[READ_PIPE_ID]]
-
- %5 = load %spirv.PipeStorage addrspace(1)*, %spirv.PipeStorage addrspace(1)* addrspace(4)* %1, align 4
- %6 = tail call spir_func %spirv.Pipe._0 addrspace(1)* @_Z38__spirv_CreatePipeFromPipeStorage_readPU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %5)
- %7 = addrspacecast %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>"* %myrpipe to %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)*
- call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* %7, %spirv.Pipe._0 addrspace(1)* %6)
-
-
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* nocapture %this, %spirv.Pipe._0 addrspace(1)* %handle) unnamed_addr align 2 {
-entry:
- tail call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* %this, %spirv.Pipe._0 addrspace(1)* %handle)
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* nocapture %this, %spirv.Pipe._0 addrspace(1)* %handle) unnamed_addr align 2 {
-entry:
- %_handle = getelementptr inbounds %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>", %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* %this, i32 0, i32 0
- store %spirv.Pipe._0 addrspace(1)* %handle, %spirv.Pipe._0 addrspace(1)* addrspace(4)* %_handle, align 4, !tbaa !11
- ret void
-}
-
-; Function Attrs: nounwind
-declare spir_func %spirv.Pipe._0 addrspace(1)* @_Z38__spirv_CreatePipeFromPipeStorage_readPU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)*)
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* nocapture %this, %spirv.Pipe._1 addrspace(1)* %handle) unnamed_addr align 2 {
-entry:
- tail call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* %this, %spirv.Pipe._1 addrspace(1)* %handle)
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* nocapture %this, %spirv.Pipe._1 addrspace(1)* %handle) unnamed_addr align 2 {
-entry:
- %_handle = getelementptr inbounds %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>", %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* %this, i32 0, i32 0
- store %spirv.Pipe._1 addrspace(1)* %handle, %spirv.Pipe._1 addrspace(1)* addrspace(4)* %_handle, align 4, !tbaa !13
- ret void
-}
-
-; Function Attrs: nounwind
-declare spir_func %spirv.Pipe._1 addrspace(1)* @_Z39__spirv_CreatePipeFromPipeStorage_writePU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)*)
-
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!0}
-!opencl.ocl.version = !{!1}
-!opencl.used.extensions = !{!2}
-!opencl.used.optional.core.features = !{!2}
-!opencl.compiler.options = !{!2}
-!llvm.ident = !{!3}
-!spirv.Source = !{!4}
-!spirv.String = !{}
-
-!0 = !{i32 1, i32 2}
-!1 = !{i32 2, i32 2}
-!2 = !{}
-!3 = !{!"clang version 3.6.1 "}
-!4 = !{i32 4, i32 202000}
-!6 = !{!7, !8, i64 0}
-!7 = !{!"_ZTSN2cl12pipe_storageIDv4_iLj1EEE", !8, i64 0}
-!8 = !{!"any pointer", !9, i64 0}
-!9 = !{!"omnipotent char", !10, i64 0}
-!10 = !{!"Simple C/C++ TBAA"}
-!11 = !{!12, !8, i64 0}
-!12 = !{!"_ZTSN2cl4pipeIDv4_iLNS_11pipe_accessE0EEE", !8, i64 0}
-!13 = !{!14, !8, i64 0}
-!14 = !{!"_ZTSN2cl4pipeIDv4_iLNS_11pipe_accessE1EEE", !8, i64 0}
+; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt +; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM + + +; CHECK-LLVM: %"[[CL_PIPE_STORAGE_NAME:[^"]+]]" = type { %spirv.PipeStorage addrspace(1)* } +; CHECK-LLVM: %"[[CL_READ_PIPE_NAME:[^"]+read>]]" = type { %spirv.Pipe._0 addrspace(1)* } +; CHECK-LLVM: %spirv.Pipe._0 = type opaque +; CHECK-LLVM: %"[[CL_WRITE_PIPE_NAME:[^"]+write>]]" = type { %spirv.Pipe._1 addrspace(1)* } +; CHECK-LLVM: %spirv.Pipe._1 = type opaque + + +; CHECK-SPIRV: Capability Pipes +; CHECK-SPIRV: Capability PipeStorage + +; CHECK-SPIRV: Name [[PIPE_STORAGE_ID:[0-9]+]] "mygpipe" +; CHECK-SPIRV: Name [[READ_PIPE_WRAPPER_ID:[0-9]+]] "myrpipe" +; CHECK-SPIRV: Name [[WRITE_PIPE_WRAPPER_ID:[0-9]+]] "mywpipe" +; CHECK-SPIRV: Name [[WRITE_PIPE_WRAPPER_CTOR:[0-9]+]] "_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE" +; CHECK-SPIRV: Name [[READ_PIPE_WRAPPER_CTOR:[0-9]+]] "_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE" + +; CHECK-SPIRV: TypeInt [[INT_T:[0-9]+]] 32 0 +; CHECK-SPIRV: Constant [[INT_T]] [[CONSTANT_ZERO_ID:[0-9]+]] 0 + +; CHECK-SPIRV: TypePipe [[READ_PIPE:[0-9]+]] 0 +; CHECK-SPIRV: TypeStruct [[READ_PIPE_WRAPPER:[0-9]+]] [[READ_PIPE]] +; CHECK-SPIRV: TypePointer [[READ_PIPE_WRAPPER_PTR:[0-9]+]] 7 [[READ_PIPE_WRAPPER]] +; CHECK-SPIRV: TypePipe [[WRITE_PIPE:[0-9]+]] 1 +; CHECK-SPIRV: TypeStruct [[WRITE_PIPE_WRAPPER:[0-9]+]] [[WRITE_PIPE]] + +; CHECK-SPIRV: TypePointer [[WRITE_PIPE_WRAPPER_PTR:[0-9]+]] 7 [[WRITE_PIPE_WRAPPER]] + + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +%spirv.ConstantPipeStorage = type { i32, i32, i32 } +%"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" = type { %spirv.PipeStorage addrspace(1)* } +%spirv.PipeStorage = type opaque +%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" = type { %spirv.Pipe._0 addrspace(1)* } +%spirv.Pipe._0 = type opaque +%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" = type { %spirv.Pipe._1 addrspace(1)* } +%spirv.Pipe._1 = type opaque + +@_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE = linkonce_odr addrspace(1) global %spirv.ConstantPipeStorage { i32 16, i32 16, i32 1 }, align 4 +@mygpipe = addrspace(1) global %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" { %spirv.PipeStorage addrspace(1)* bitcast (%spirv.ConstantPipeStorage addrspace(1)* @_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE to %spirv.PipeStorage addrspace(1)*) }, align 4 + + +; Function Attrs: nounwind +define spir_kernel void @worker() { +entry: + ; CHECK-LLVM: %myrpipe = alloca %"[[CL_READ_PIPE_NAME]]", align 4 + ; CHECK-LLVM: %mywpipe = alloca %"[[CL_WRITE_PIPE_NAME]]", align 4 + + ; CHECK-SPIRV: Variable [[READ_PIPE_WRAPPER_PTR]] [[READ_PIPE_WRAPPER_ID]] 7 + ; CHECK-SPIRV: Variable [[WRITE_PIPE_WRAPPER_PTR]] [[WRITE_PIPE_WRAPPER_ID]] 7 + + %myrpipe = alloca %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>", align 4 + %mywpipe = alloca %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>", align 4 + + + ; CHECK-LLVM: %[[ID0:[0-9]+]] = addrspacecast %"[[CL_PIPE_STORAGE_NAME]]" addrspace(1)* @mygpipe to %"[[CL_PIPE_STORAGE_NAME]]" addrspace(4)* + ; CHECK-LLVM: %[[ID1:[0-9]+]] = getelementptr %"[[CL_PIPE_STORAGE_NAME]]", %"[[CL_PIPE_STORAGE_NAME]]" addrspace(4)* %[[ID0]], i32 0, i32 0 + + ; CHECK-SPIRV: PtrCastToGeneric {{[0-9]+}} [[SPIRV0:[0-9]+]] [[PIPE_STORAGE_ID]] + ; CHECK-SPIRV: PtrAccessChain {{[0-9]+}} [[SPIRV1:[0-9]+]] [[SPIRV0]] [[CONSTANT_ZERO_ID]] [[CONSTANT_ZERO_ID]] + + %0 = addrspacecast %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" addrspace(1)* @mygpipe to %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" addrspace(4)* + %1 = getelementptr %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>", %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" addrspace(4)* %0, i32 0, i32 0 + + + ; CHECK-LLVM: %[[PIPE_STORAGE_1:[0-9]+]] = load %spirv.PipeStorage addrspace(1)* addrspace(4)* %[[ID1]], align 4 + ; CHECK-LLVM: %[[WRITE_PIPE:[0-9]+]] = call spir_func %spirv.Pipe._1 addrspace(1)* @_Z39__spirv_CreatePipeFromPipeStorage_writePU3AS119__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %[[PIPE_STORAGE_1]]) + ; CHECK-LLVM: %[[WRITE_PIPE_WRAPPER:[0-9]+]] = addrspacecast %"[[CL_WRITE_PIPE_NAME]]"* %mywpipe to %"[[CL_WRITE_PIPE_NAME]]" addrspace(4)* + ; CHECK-LLVM: call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"[[CL_WRITE_PIPE_NAME]]" addrspace(4)* nocapture %[[WRITE_PIPE_WRAPPER]], %spirv.Pipe._1 addrspace(1)* %[[WRITE_PIPE]]) + + ; CHECK-SPIRV: Load {{[0-9]+}} [[PIPE_STORAGE_ID0:[0-9]+]] [[SPIRV1]] 2 4 + ; CHECK-SPIRV: CreatePipeFromPipeStorage [[WRITE_PIPE]] [[WRITE_PIPE_ID:[0-9]+]] [[PIPE_STORAGE_ID0]] + ; CHECK-SPIRV: PtrCastToGeneric {{[0-9]+}} [[GENERIC_WRITE_PIPE_WRAPPER_ID:[0-9]+]] [[WRITE_PIPE_WRAPPER_ID]] + ; CHECK-SPIRV: FunctionCall {{[0-9]+}} {{[0-9]+}} [[WRITE_PIPE_WRAPPER_CTOR]] [[GENERIC_WRITE_PIPE_WRAPPER_ID]] [[WRITE_PIPE_ID]] + + %2 = load %spirv.PipeStorage addrspace(1)*, %spirv.PipeStorage addrspace(1)* addrspace(4)* %1, align 4 + %3 = tail call spir_func %spirv.Pipe._1 addrspace(1)* @_Z39__spirv_CreatePipeFromPipeStorage_writePU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %2) + %4 = addrspacecast %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>"* %mywpipe to %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* + call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* %4, %spirv.Pipe._1 addrspace(1)* %3) + + + ; CHECK-LLVM: %[[PIPE_STORAGE_2:[0-9]+]] = load %spirv.PipeStorage addrspace(1)* addrspace(4)* %[[ID1]], align 4 + ; CHECK-LLVM: %[[READ_PIPE:[0-9]+]] = call spir_func %spirv.Pipe._0 addrspace(1)* @_Z38__spirv_CreatePipeFromPipeStorage_readPU3AS119__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %[[PIPE_STORAGE_2]]) + ; CHECK-LLVM: %[[READ_PIPE_WRAPPER:[0-9]+]] = addrspacecast %"[[CL_READ_PIPE_NAME]]"* %myrpipe to %"[[CL_READ_PIPE_NAME]]" addrspace(4)* + ; CHECK-LLVM: call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"[[CL_READ_PIPE_NAME]]" addrspace(4)* nocapture %[[READ_PIPE_WRAPPER]], %spirv.Pipe._0 addrspace(1)* %[[READ_PIPE]]) + + ; CHECK-SPIRV: Load {{[0-9]+}} [[PIPE_STORAGE_ID1:[0-9]+]] [[SPIRV1]] 2 4 + ; CHECK-SPIRV: CreatePipeFromPipeStorage [[READ_PIPE]] [[READ_PIPE_ID:[0-9]+]] [[PIPE_STORAGE_ID1]] + ; CHECK-SPIRV: PtrCastToGeneric {{[0-9]+}} [[GENERIC_READ_PIPE_WRAPPER_ID:[0-9]+]] [[READ_PIPE_WRAPPER_ID]] + ; CHECK-SPIRV: FunctionCall {{[0-9]+}} {{[0-9]+}} [[READ_PIPE_WRAPPER_CTOR]] [[GENERIC_READ_PIPE_WRAPPER_ID]] [[READ_PIPE_ID]] + + %5 = load %spirv.PipeStorage addrspace(1)*, %spirv.PipeStorage addrspace(1)* addrspace(4)* %1, align 4 + %6 = tail call spir_func %spirv.Pipe._0 addrspace(1)* @_Z38__spirv_CreatePipeFromPipeStorage_readPU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)* %5) + %7 = addrspacecast %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>"* %myrpipe to %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* + call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* %7, %spirv.Pipe._0 addrspace(1)* %6) + + + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* nocapture %this, %spirv.Pipe._0 addrspace(1)* %handle) unnamed_addr align 2 { +entry: + tail call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* %this, %spirv.Pipe._0 addrspace(1)* %handle) + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE0EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE0EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* nocapture %this, %spirv.Pipe._0 addrspace(1)* %handle) unnamed_addr align 2 { +entry: + %_handle = getelementptr inbounds %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>", %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::read>" addrspace(4)* %this, i32 0, i32 0 + store %spirv.Pipe._0 addrspace(1)* %handle, %spirv.Pipe._0 addrspace(1)* addrspace(4)* %_handle, align 4, !tbaa !11 + ret void +} + +; Function Attrs: nounwind +declare spir_func %spirv.Pipe._0 addrspace(1)* @_Z38__spirv_CreatePipeFromPipeStorage_readPU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)*) + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC1EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* nocapture %this, %spirv.Pipe._1 addrspace(1)* %handle) unnamed_addr align 2 { +entry: + tail call spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* %this, %spirv.Pipe._1 addrspace(1)* %handle) + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS42cl4pipeIDv4_iLNS_11pipe_accessE1EEC2EPU3AS1NS_7__spirv10OpTypePipeILNS3_15AccessQualifierE1EEE(%"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* nocapture %this, %spirv.Pipe._1 addrspace(1)* %handle) unnamed_addr align 2 { +entry: + %_handle = getelementptr inbounds %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>", %"class.cl::pipe<int __attribute__((ext_vector_type(4))), cl::pipe_access::write>" addrspace(4)* %this, i32 0, i32 0 + store %spirv.Pipe._1 addrspace(1)* %handle, %spirv.Pipe._1 addrspace(1)* addrspace(4)* %_handle, align 4, !tbaa !13 + ret void +} + +; Function Attrs: nounwind +declare spir_func %spirv.Pipe._1 addrspace(1)* @_Z39__spirv_CreatePipeFromPipeStorage_writePU3AS1K19__spirv_PipeStorage(%spirv.PipeStorage addrspace(1)*) + +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!0} +!opencl.ocl.version = !{!1} +!opencl.used.extensions = !{!2} +!opencl.used.optional.core.features = !{!2} +!opencl.compiler.options = !{!2} +!llvm.ident = !{!3} +!spirv.Source = !{!4} +!spirv.String = !{} + +!0 = !{i32 1, i32 2} +!1 = !{i32 2, i32 2} +!2 = !{} +!3 = !{!"clang version 3.6.1 "} +!4 = !{i32 4, i32 202000} +!6 = !{!7, !8, i64 0} +!7 = !{!"_ZTSN2cl12pipe_storageIDv4_iLj1EEE", !8, i64 0} +!8 = !{!"any pointer", !9, i64 0} +!9 = !{!"omnipotent char", !10, i64 0} +!10 = !{!"Simple C/C++ TBAA"} +!11 = !{!12, !8, i64 0} +!12 = !{!"_ZTSN2cl4pipeIDv4_iLNS_11pipe_accessE0EEE", !8, i64 0} +!13 = !{!14, !8, i64 0} +!14 = !{!"_ZTSN2cl4pipeIDv4_iLNS_11pipe_accessE1EEE", !8, i64 0} diff --git a/test/SPIRV/ExecutionMode.ll b/test/SPIRV/ExecutionMode.ll index 309595ec..9858342e 100644 --- a/test/SPIRV/ExecutionMode.ll +++ b/test/SPIRV/ExecutionMode.ll @@ -1,150 +1,150 @@ -; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t
-; RUN: FileCheck < %t %s
-
-; check for magic number followed by version 1.1
-; CHECK: 119734787 65792
-
-; CHECK-DAG: TypeVoid [[VOID:[0-9]+]]
-
-; CHECK-DAG: EntryPoint 6 [[WORKER:[0-9]+]] "worker"
-; CHECK-DAG: EntryPoint 6 [[INIT:[0-9]+]] "_SPIRV_GLOBAL__I_45b04794_Test_attr.cl"
-; CHECK-DAG: EntryPoint 6 [[FIN:[0-9]+]] "_SPIRV_GLOBAL__D_45b04794_Test_attr.cl"
-
-; CHECK-DAG: ExecutionMode [[WORKER]] 17 10 10 10
-; CHECK-DAG: ExecutionMode [[WORKER]] 18 12 10 1
-; CHECK-DAG: ExecutionMode [[WORKER]] 30 262149
-; CHECK-DAG: ExecutionMode [[WORKER]] 36 4
-; CHECK-DAG: ExecutionMode [[INIT]] 17 1 1 1
-; CHECK-DAG: ExecutionMode [[INIT]] 33
-; CHECK-DAG: ExecutionMode [[FIN]] 17 1 1 1
-; CHECK-DAG: ExecutionMode [[FIN]] 34
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-%struct.global_ctor_dtor = type { i32 }
-
-@g = addrspace(1) global %struct.global_ctor_dtor zeroinitializer, align 4
-
-; Function Attrs: nounwind
-define internal spir_func void @__cxx_global_var_init() #0 {
-entry:
- call spir_func void @_ZNU3AS416global_ctor_dtorC1Ei(%struct.global_ctor_dtor addrspace(4)* addrspacecast (%struct.global_ctor_dtor addrspace(1)* @g to %struct.global_ctor_dtor addrspace(4)*), i32 12)
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorC1Ei(%struct.global_ctor_dtor addrspace(4)* %this, i32 %i) unnamed_addr #1 align 2 {
-entry:
- %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4
- %i.addr = alloca i32, align 4
- store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4
- store i32 %i, i32* %i.addr, align 4
- %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr
- %0 = load i32, i32* %i.addr, align 4
- call spir_func void @_ZNU3AS416global_ctor_dtorC2Ei(%struct.global_ctor_dtor addrspace(4)* %this1, i32 %0)
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorD1Ev(%struct.global_ctor_dtor addrspace(4)* %this) unnamed_addr #1 align 2 {
-entry:
- %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4
- store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4
- %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr
- call spir_func void @_ZNU3AS416global_ctor_dtorD2Ev(%struct.global_ctor_dtor addrspace(4)* %this1) #0
- ret void
-}
-
-; Function Attrs: nounwind
-define internal spir_func void @__dtor_g() #0 {
-entry:
- call spir_func void @_ZNU3AS416global_ctor_dtorD1Ev(%struct.global_ctor_dtor addrspace(4)* addrspacecast (%struct.global_ctor_dtor addrspace(1)* @g to %struct.global_ctor_dtor addrspace(4)*))
- ret void
-}
-
-; CHECK: Function [[VOID]] [[WORKER]]
-
-; Function Attrs: nounwind
-define spir_kernel void @worker() #1 {
-entry:
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorD2Ev(%struct.global_ctor_dtor addrspace(4)* %this) unnamed_addr #1 align 2 {
-entry:
- %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4
- store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4
- %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr
- %a = getelementptr inbounds %struct.global_ctor_dtor, %struct.global_ctor_dtor addrspace(4)* %this1, i32 0, i32 0
- store i32 0, i32 addrspace(4)* %a, align 4
- ret void
-}
-
-; Function Attrs: nounwind
-define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorC2Ei(%struct.global_ctor_dtor addrspace(4)* %this, i32 %i) unnamed_addr #1 align 2 {
-entry:
- %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4
- %i.addr = alloca i32, align 4
- store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4
- store i32 %i, i32* %i.addr, align 4
- %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr
- %0 = load i32, i32* %i.addr, align 4
- %a = getelementptr inbounds %struct.global_ctor_dtor, %struct.global_ctor_dtor addrspace(4)* %this1, i32 0, i32 0
- store i32 %0, i32 addrspace(4)* %a, align 4
- ret void
-}
-
-; Function Attrs: nounwind
-define internal spir_func void @_GLOBAL__sub_I_Test_attr.cl() #0 {
-entry:
- call spir_func void @__cxx_global_var_init()
- ret void
-}
-
-; CHECK: Function [[VOID]] [[INIT]]
-
-; Function Attrs: noinline nounwind
-define spir_kernel void @_SPIRV_GLOBAL__I_45b04794_Test_attr.cl() #2 {
-entry:
- call spir_func void @_GLOBAL__sub_I_Test_attr.cl()
- ret void
-}
-
-; CHECK: Function [[VOID]] [[FIN]]
-
-; Function Attrs: noinline nounwind
-define spir_kernel void @_SPIRV_GLOBAL__D_45b04794_Test_attr.cl() #2 {
-entry:
- call spir_func void @__dtor_g()
- ret void
-}
-
-attributes #0 = { nounwind }
-attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { noinline nounwind }
-
-!spirv.ExecutionMode = !{!0, !1, !2, !3, !4, !5, !6, !7}
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!8}
-!opencl.ocl.version = !{!9}
-!opencl.used.extensions = !{!10}
-!opencl.used.optional.core.features = !{!10}
-!opencl.compiler.options = !{!10}
-!llvm.ident = !{!11}
-!spirv.Source = !{!12}
-
-!0 = !{void ()* @worker, i32 30, i32 262149}
-!1 = !{void ()* @worker, i32 18, i32 12, i32 10, i32 1}
-!2 = !{void ()* @worker, i32 17, i32 10, i32 10, i32 10}
-!3 = !{void ()* @worker, i32 36, i32 4}
-!4 = !{void ()* @_SPIRV_GLOBAL__I_45b04794_Test_attr.cl, i32 33}
-!5 = !{void ()* @_SPIRV_GLOBAL__I_45b04794_Test_attr.cl, i32 17, i32 1, i32 1, i32 1}
-!6 = !{void ()* @_SPIRV_GLOBAL__D_45b04794_Test_attr.cl, i32 34}
-!7 = !{void ()* @_SPIRV_GLOBAL__D_45b04794_Test_attr.cl, i32 17, i32 1, i32 1, i32 1}
-!8 = !{i32 1, i32 2}
-!9 = !{i32 2, i32 2}
-!10 = !{}
-!11 = !{!"clang version 3.6.1 "}
-!12 = !{i32 4, i32 202000}
+; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t +; RUN: FileCheck < %t %s + +; check for magic number followed by version 1.1 +; CHECK: 119734787 65792 + +; CHECK-DAG: TypeVoid [[VOID:[0-9]+]] + +; CHECK-DAG: EntryPoint 6 [[WORKER:[0-9]+]] "worker" +; CHECK-DAG: EntryPoint 6 [[INIT:[0-9]+]] "_SPIRV_GLOBAL__I_45b04794_Test_attr.cl" +; CHECK-DAG: EntryPoint 6 [[FIN:[0-9]+]] "_SPIRV_GLOBAL__D_45b04794_Test_attr.cl" + +; CHECK-DAG: ExecutionMode [[WORKER]] 17 10 10 10 +; CHECK-DAG: ExecutionMode [[WORKER]] 18 12 10 1 +; CHECK-DAG: ExecutionMode [[WORKER]] 30 262149 +; CHECK-DAG: ExecutionMode [[WORKER]] 36 4 +; CHECK-DAG: ExecutionMode [[INIT]] 17 1 1 1 +; CHECK-DAG: ExecutionMode [[INIT]] 33 +; CHECK-DAG: ExecutionMode [[FIN]] 17 1 1 1 +; CHECK-DAG: ExecutionMode [[FIN]] 34 + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +%struct.global_ctor_dtor = type { i32 } + +@g = addrspace(1) global %struct.global_ctor_dtor zeroinitializer, align 4 + +; Function Attrs: nounwind +define internal spir_func void @__cxx_global_var_init() #0 { +entry: + call spir_func void @_ZNU3AS416global_ctor_dtorC1Ei(%struct.global_ctor_dtor addrspace(4)* addrspacecast (%struct.global_ctor_dtor addrspace(1)* @g to %struct.global_ctor_dtor addrspace(4)*), i32 12) + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorC1Ei(%struct.global_ctor_dtor addrspace(4)* %this, i32 %i) unnamed_addr #1 align 2 { +entry: + %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4 + %i.addr = alloca i32, align 4 + store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4 + store i32 %i, i32* %i.addr, align 4 + %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr + %0 = load i32, i32* %i.addr, align 4 + call spir_func void @_ZNU3AS416global_ctor_dtorC2Ei(%struct.global_ctor_dtor addrspace(4)* %this1, i32 %0) + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorD1Ev(%struct.global_ctor_dtor addrspace(4)* %this) unnamed_addr #1 align 2 { +entry: + %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4 + store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4 + %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr + call spir_func void @_ZNU3AS416global_ctor_dtorD2Ev(%struct.global_ctor_dtor addrspace(4)* %this1) #0 + ret void +} + +; Function Attrs: nounwind +define internal spir_func void @__dtor_g() #0 { +entry: + call spir_func void @_ZNU3AS416global_ctor_dtorD1Ev(%struct.global_ctor_dtor addrspace(4)* addrspacecast (%struct.global_ctor_dtor addrspace(1)* @g to %struct.global_ctor_dtor addrspace(4)*)) + ret void +} + +; CHECK: Function [[VOID]] [[WORKER]] + +; Function Attrs: nounwind +define spir_kernel void @worker() #1 { +entry: + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorD2Ev(%struct.global_ctor_dtor addrspace(4)* %this) unnamed_addr #1 align 2 { +entry: + %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4 + store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4 + %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr + %a = getelementptr inbounds %struct.global_ctor_dtor, %struct.global_ctor_dtor addrspace(4)* %this1, i32 0, i32 0 + store i32 0, i32 addrspace(4)* %a, align 4 + ret void +} + +; Function Attrs: nounwind +define linkonce_odr spir_func void @_ZNU3AS416global_ctor_dtorC2Ei(%struct.global_ctor_dtor addrspace(4)* %this, i32 %i) unnamed_addr #1 align 2 { +entry: + %this.addr = alloca %struct.global_ctor_dtor addrspace(4)*, align 4 + %i.addr = alloca i32, align 4 + store %struct.global_ctor_dtor addrspace(4)* %this, %struct.global_ctor_dtor addrspace(4)** %this.addr, align 4 + store i32 %i, i32* %i.addr, align 4 + %this1 = load %struct.global_ctor_dtor addrspace(4)*, %struct.global_ctor_dtor addrspace(4)** %this.addr + %0 = load i32, i32* %i.addr, align 4 + %a = getelementptr inbounds %struct.global_ctor_dtor, %struct.global_ctor_dtor addrspace(4)* %this1, i32 0, i32 0 + store i32 %0, i32 addrspace(4)* %a, align 4 + ret void +} + +; Function Attrs: nounwind +define internal spir_func void @_GLOBAL__sub_I_Test_attr.cl() #0 { +entry: + call spir_func void @__cxx_global_var_init() + ret void +} + +; CHECK: Function [[VOID]] [[INIT]] + +; Function Attrs: noinline nounwind +define spir_kernel void @_SPIRV_GLOBAL__I_45b04794_Test_attr.cl() #2 { +entry: + call spir_func void @_GLOBAL__sub_I_Test_attr.cl() + ret void +} + +; CHECK: Function [[VOID]] [[FIN]] + +; Function Attrs: noinline nounwind +define spir_kernel void @_SPIRV_GLOBAL__D_45b04794_Test_attr.cl() #2 { +entry: + call spir_func void @__dtor_g() + ret void +} + +attributes #0 = { nounwind } +attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { noinline nounwind } + +!spirv.ExecutionMode = !{!0, !1, !2, !3, !4, !5, !6, !7} +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!8} +!opencl.ocl.version = !{!9} +!opencl.used.extensions = !{!10} +!opencl.used.optional.core.features = !{!10} +!opencl.compiler.options = !{!10} +!llvm.ident = !{!11} +!spirv.Source = !{!12} + +!0 = !{void ()* @worker, i32 30, i32 262149} +!1 = !{void ()* @worker, i32 18, i32 12, i32 10, i32 1} +!2 = !{void ()* @worker, i32 17, i32 10, i32 10, i32 10} +!3 = !{void ()* @worker, i32 36, i32 4} +!4 = !{void ()* @_SPIRV_GLOBAL__I_45b04794_Test_attr.cl, i32 33} +!5 = !{void ()* @_SPIRV_GLOBAL__I_45b04794_Test_attr.cl, i32 17, i32 1, i32 1, i32 1} +!6 = !{void ()* @_SPIRV_GLOBAL__D_45b04794_Test_attr.cl, i32 34} +!7 = !{void ()* @_SPIRV_GLOBAL__D_45b04794_Test_attr.cl, i32 17, i32 1, i32 1, i32 1} +!8 = !{i32 1, i32 2} +!9 = !{i32 2, i32 2} +!10 = !{} +!11 = !{!"clang version 3.6.1 "} +!12 = !{i32 4, i32 202000} diff --git a/test/SPIRV/ExecutionMode_SPIR_to_SPIRV.ll b/test/SPIRV/ExecutionMode_SPIR_to_SPIRV.ll index b8b2bb82..341bde87 100644 --- a/test/SPIRV/ExecutionMode_SPIR_to_SPIRV.ll +++ b/test/SPIRV/ExecutionMode_SPIR_to_SPIRV.ll @@ -1,54 +1,54 @@ -; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt
-; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
-
-; LLVM => SPIRV checks
-; check for magic number followed by version 1.0
-; CHECK-SPIRV: 119734787 65536
-
-; CHECK-SPIRV-DAG: EntryPoint 6 [[WORKER:[0-9]+]] "worker"
-; CHECK-SPIRV-DAG: ExecutionMode [[WORKER]] 18 128 10 1
-
-
-; LLVM => SPIRV => LLVM checks
-; CHECK-LLVM: define spir_kernel void @worker()
-; CHECK-LLVM: !opencl.kernels = !{![[KERNEL_MD:[0-9]+]]}
-
-; CHECK-LLVM-DAG: ![[EXEC_MODE_MD:[0-9]+]] = !{!"work_group_size_hint", i32 128, i32 10, i32 1}
-; CHECK-LLVM-DAG: ![[KERNEL_MD]] = !{void ()* @worker, {{.*}}![[EXEC_MODE_MD]]{{.*}}}
-
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
-target triple = "spir-unknown-unknown"
-
-; Function Attrs: nounwind
-define spir_kernel void @worker() #0 {
-entry:
- ret void
-}
-
-attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!opencl.kernels = !{!0}
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!7}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!8}
-!opencl.compiler.options = !{!8}
-!llvm.ident = !{!9}
-
-!0 = !{void ()* @worker, !1, !2, !3, !4, !5, !6}
-!1 = !{!"kernel_arg_addr_space"}
-!2 = !{!"kernel_arg_access_qual"}
-!3 = !{!"kernel_arg_type"}
-!4 = !{!"kernel_arg_base_type"}
-!5 = !{!"kernel_arg_type_qual"}
-!6 = !{!"work_group_size_hint", i32 128, i32 10, i32 1}
-!7 = !{i32 1, i32 2}
-!8 = !{}
-!9 = !{!"clang version 3.6.1 "}
+; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt +; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM + +; LLVM => SPIRV checks +; check for magic number followed by version 1.0 +; CHECK-SPIRV: 119734787 65536 + +; CHECK-SPIRV-DAG: EntryPoint 6 [[WORKER:[0-9]+]] "worker" +; CHECK-SPIRV-DAG: ExecutionMode [[WORKER]] 18 128 10 1 + + +; LLVM => SPIRV => LLVM checks +; CHECK-LLVM: define spir_kernel void @worker() +; CHECK-LLVM: !opencl.kernels = !{![[KERNEL_MD:[0-9]+]]} + +; CHECK-LLVM-DAG: ![[EXEC_MODE_MD:[0-9]+]] = !{!"work_group_size_hint", i32 128, i32 10, i32 1} +; CHECK-LLVM-DAG: ![[KERNEL_MD]] = !{void ()* @worker, {{.*}}![[EXEC_MODE_MD]]{{.*}}} + + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64" +target triple = "spir-unknown-unknown" + +; Function Attrs: nounwind +define spir_kernel void @worker() #0 { +entry: + ret void +} + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!opencl.kernels = !{!0} +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!7} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!8} +!opencl.compiler.options = !{!8} +!llvm.ident = !{!9} + +!0 = !{void ()* @worker, !1, !2, !3, !4, !5, !6} +!1 = !{!"kernel_arg_addr_space"} +!2 = !{!"kernel_arg_access_qual"} +!3 = !{!"kernel_arg_type"} +!4 = !{!"kernel_arg_base_type"} +!5 = !{!"kernel_arg_type_qual"} +!6 = !{!"work_group_size_hint", i32 128, i32 10, i32 1} +!7 = !{i32 1, i32 2} +!8 = !{} +!9 = !{!"clang version 3.6.1 "} diff --git a/test/SPIRV/PipeStorage.ll b/test/SPIRV/PipeStorage.ll index 1fa0d936..7a5b5d46 100644 --- a/test/SPIRV/PipeStorage.ll +++ b/test/SPIRV/PipeStorage.ll @@ -1,58 +1,58 @@ -; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt
-; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
-
-; CHECK-LLVM: %spirv.ConstantPipeStorage = type { i32, i32, i32 }
-; CHECK-LLVM: %"[[CL_PIPE_STORAGE_NAME:[^"]+]]" = type { %spirv.PipeStorage addrspace(1)* }
-; CHECK-LLVM: %spirv.PipeStorage = type opaque
-; CHECK-LLVM: [[CREATOR_NAME:[^ ]+]] = linkonce_odr addrspace(1) global %spirv.ConstantPipeStorage { i32 16, i32 16, i32 1 }, align 4
-; CHECK-LLVM: @mygpipe = addrspace(1) global %"[[CL_PIPE_STORAGE_NAME]]" { %spirv.PipeStorage addrspace(1)* bitcast (%spirv.ConstantPipeStorage addrspace(1)* [[CREATOR_NAME]] to %spirv.PipeStorage addrspace(1)*) }, align 4
-
-; check for magic number followed by version 1.1
-; CHECK-SPIRV: 119734787 65792
-
-; CHECK-SPIRV: 4 Name [[MYPIPE_ID:[0-9]+]] "mygpipe"
-
-; CHECK-SPIRV: 2 TypePipeStorage [[PIPE_STORAGE_ID:[0-9]+]]
-; CHECK-SPIRV-NEXT: 2 TypePipeStorage [[PIPE_STORAGE_ID_2:[0-9]+]]
-; CHECK-SPIRV: 3 TypeStruct [[CL_PIPE_STORAGE_ID:[0-9]+]] [[PIPE_STORAGE_ID_2]]
-; CHECK-SPIRV: 4 TypePointer [[CL_PIPE_STORAGE_PTR_ID:[0-9]+]] 5 [[CL_PIPE_STORAGE_ID]]
-
-; CHECK-SPIRV: 6 ConstantPipeStorage [[PIPE_STORAGE_ID]] [[CPS_ID:[0-9]+]] 16 16 1
-; CHECK-SPIRV: 4 ConstantComposite [[CL_PIPE_STORAGE_ID]] [[COMPOSITE_ID:[0-9]+]] [[CPS_ID]]
-; CHECK-SPIRV: 5 Variable [[CL_PIPE_STORAGE_PTR_ID]] [[MYPIPE_ID]] 5 [[COMPOSITE_ID]]
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-%spirv.ConstantPipeStorage = type { i32, i32, i32 }
-%"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" = type { %spirv.PipeStorage addrspace(1)* }
-%spirv.PipeStorage = type opaque
-
-@_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE = linkonce_odr addrspace(1) global %spirv.ConstantPipeStorage { i32 16, i32 16, i32 1 }, align 4
-@mygpipe = addrspace(1) global %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" { %spirv.PipeStorage addrspace(1)* bitcast (%spirv.ConstantPipeStorage addrspace(1)* @_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE to %spirv.PipeStorage addrspace(1)*) }, align 4
-
-; Function Attrs: nounwind
-define spir_kernel void @worker() {
-entry:
- ret void
-}
-
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!0}
-!opencl.ocl.version = !{!1}
-!opencl.used.extensions = !{!2}
-!opencl.used.optional.core.features = !{!2}
-!opencl.compiler.options = !{!2}
-!llvm.ident = !{!3}
-!spirv.Source = !{!4}
-!spirv.String = !{}
-
-!0 = !{i32 1, i32 2}
-!1 = !{i32 2, i32 2}
-!2 = !{}
-!3 = !{!"clang version 3.6.1 "}
-!4 = !{i32 4, i32 202000}
+; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt +; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM + +; CHECK-LLVM: %spirv.ConstantPipeStorage = type { i32, i32, i32 } +; CHECK-LLVM: %"[[CL_PIPE_STORAGE_NAME:[^"]+]]" = type { %spirv.PipeStorage addrspace(1)* } +; CHECK-LLVM: %spirv.PipeStorage = type opaque +; CHECK-LLVM: [[CREATOR_NAME:[^ ]+]] = linkonce_odr addrspace(1) global %spirv.ConstantPipeStorage { i32 16, i32 16, i32 1 }, align 4 +; CHECK-LLVM: @mygpipe = addrspace(1) global %"[[CL_PIPE_STORAGE_NAME]]" { %spirv.PipeStorage addrspace(1)* bitcast (%spirv.ConstantPipeStorage addrspace(1)* [[CREATOR_NAME]] to %spirv.PipeStorage addrspace(1)*) }, align 4 + +; check for magic number followed by version 1.1 +; CHECK-SPIRV: 119734787 65792 + +; CHECK-SPIRV: 4 Name [[MYPIPE_ID:[0-9]+]] "mygpipe" + +; CHECK-SPIRV: 2 TypePipeStorage [[PIPE_STORAGE_ID:[0-9]+]] +; CHECK-SPIRV-NEXT: 2 TypePipeStorage [[PIPE_STORAGE_ID_2:[0-9]+]] +; CHECK-SPIRV: 3 TypeStruct [[CL_PIPE_STORAGE_ID:[0-9]+]] [[PIPE_STORAGE_ID_2]] +; CHECK-SPIRV: 4 TypePointer [[CL_PIPE_STORAGE_PTR_ID:[0-9]+]] 5 [[CL_PIPE_STORAGE_ID]] + +; CHECK-SPIRV: 6 ConstantPipeStorage [[PIPE_STORAGE_ID]] [[CPS_ID:[0-9]+]] 16 16 1 +; CHECK-SPIRV: 4 ConstantComposite [[CL_PIPE_STORAGE_ID]] [[COMPOSITE_ID:[0-9]+]] [[CPS_ID]] +; CHECK-SPIRV: 5 Variable [[CL_PIPE_STORAGE_PTR_ID]] [[MYPIPE_ID]] 5 [[COMPOSITE_ID]] + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +%spirv.ConstantPipeStorage = type { i32, i32, i32 } +%"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" = type { %spirv.PipeStorage addrspace(1)* } +%spirv.PipeStorage = type opaque + +@_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE = linkonce_odr addrspace(1) global %spirv.ConstantPipeStorage { i32 16, i32 16, i32 1 }, align 4 +@mygpipe = addrspace(1) global %"class.cl::pipe_storage<int __attribute__((ext_vector_type(4))), 1>" { %spirv.PipeStorage addrspace(1)* bitcast (%spirv.ConstantPipeStorage addrspace(1)* @_ZN2cl9__details29OpConstantPipeStorage_CreatorILi16ELi16ELi1EE5valueE to %spirv.PipeStorage addrspace(1)*) }, align 4 + +; Function Attrs: nounwind +define spir_kernel void @worker() { +entry: + ret void +} + +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!0} +!opencl.ocl.version = !{!1} +!opencl.used.extensions = !{!2} +!opencl.used.optional.core.features = !{!2} +!opencl.compiler.options = !{!2} +!llvm.ident = !{!3} +!spirv.Source = !{!4} +!spirv.String = !{} + +!0 = !{i32 1, i32 2} +!1 = !{i32 2, i32 2} +!2 = !{} +!3 = !{!"clang version 3.6.1 "} +!4 = !{i32 4, i32 202000} diff --git a/test/SPIRV/SPIRVVersionAutodetect_1_0.ll b/test/SPIRV/SPIRVVersionAutodetect_1_0.ll index f0ed8edb..8508b97e 100644 --- a/test/SPIRV/SPIRVVersionAutodetect_1_0.ll +++ b/test/SPIRV/SPIRVVersionAutodetect_1_0.ll @@ -1,31 +1,31 @@ -; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t
-; RUN: FileCheck < %t %s
-
-; check for magic number followed by version 1.0
-; CHECK: 119734787 65536
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-; Function Attrs: nounwind
-define spir_kernel void @worker() #0 {
-entry:
- ret void
-}
-
-attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!6}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!8}
-!opencl.compiler.options = !{!8}
-!llvm.ident = !{!9}
-!spirv.Source = !{!10}
-
-!6 = !{i32 1, i32 2}
-!7 = !{i32 2, i32 2}
-!8 = !{}
-!9 = !{!"clang version 3.6.1 "}
-!10 = !{i32 4, i32 202000}
+; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t +; RUN: FileCheck < %t %s + +; check for magic number followed by version 1.0 +; CHECK: 119734787 65536 + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +; Function Attrs: nounwind +define spir_kernel void @worker() #0 { +entry: + ret void +} + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!6} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!8} +!opencl.compiler.options = !{!8} +!llvm.ident = !{!9} +!spirv.Source = !{!10} + +!6 = !{i32 1, i32 2} +!7 = !{i32 2, i32 2} +!8 = !{} +!9 = !{!"clang version 3.6.1 "} +!10 = !{i32 4, i32 202000} diff --git a/test/SPIRV/SPIRVVersionAutodetect_1_1.ll b/test/SPIRV/SPIRVVersionAutodetect_1_1.ll index 96751cf6..43ca3fab 100644 --- a/test/SPIRV/SPIRVVersionAutodetect_1_1.ll +++ b/test/SPIRV/SPIRVVersionAutodetect_1_1.ll @@ -1,33 +1,33 @@ -; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t
-; RUN: FileCheck < %t %s
-
-; check for magic number followed by version 1.1
-; CHECK: 119734787 65792
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-; Function Attrs: nounwind
-define spir_kernel void @worker() #0 {
-entry:
- ret void
-}
-
-attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!spirv.ExecutionMode = !{!0}
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!6}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!8}
-!opencl.compiler.options = !{!8}
-!llvm.ident = !{!9}
-!spirv.Source = !{!10}
-
-!0 = !{void ()* @worker, i32 33}
-!6 = !{i32 1, i32 2}
-!7 = !{i32 2, i32 2}
-!8 = !{}
-!9 = !{!"clang version 3.6.1 "}
-!10 = !{i32 4, i32 202000}
+; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t +; RUN: FileCheck < %t %s + +; check for magic number followed by version 1.1 +; CHECK: 119734787 65792 + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +; Function Attrs: nounwind +define spir_kernel void @worker() #0 { +entry: + ret void +} + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!spirv.ExecutionMode = !{!0} +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!6} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!8} +!opencl.compiler.options = !{!8} +!llvm.ident = !{!9} +!spirv.Source = !{!10} + +!0 = !{void ()* @worker, i32 33} +!6 = !{i32 1, i32 2} +!7 = !{i32 2, i32 2} +!8 = !{} +!9 = !{!"clang version 3.6.1 "} +!10 = !{i32 4, i32 202000} diff --git a/test/SPIRV/builtin_vars-decorate.ll b/test/SPIRV/builtin_vars-decorate.ll index 39d66535..d3ede335 100644 --- a/test/SPIRV/builtin_vars-decorate.ll +++ b/test/SPIRV/builtin_vars-decorate.ll @@ -1,96 +1,96 @@ -; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t
-; RUN: FileCheck < %t %s
-
-; ModuleID = 'test.cl'
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-; CHECK: {{[0-9]+}} Name [[WD:[0-9]+]] "__spirv_BuiltInWorkDim"
-; CHECK: {{[0-9]+}} Name [[GS:[0-9]+]] "__spirv_BuiltInGlobalSize"
-; CHECK: {{[0-9]+}} Name [[GII:[0-9]+]] "__spirv_BuiltInGlobalInvocationId"
-; CHECK: {{[0-9]+}} Name [[WS:[0-9]+]] "__spirv_BuiltInWorkgroupSize"
-; CHECK: {{[0-9]+}} Name [[EWS:[0-9]+]] "__spirv_BuiltInEnqueuedWorkgroupSize"
-; CHECK: {{[0-9]+}} Name [[LLI:[0-9]+]] "__spirv_BuiltInLocalInvocationId"
-; CHECK: {{[0-9]+}} Name [[NW:[0-9]+]] "__spirv_BuiltInNumWorkgroups"
-; CHECK: {{[0-9]+}} Name [[WI:[0-9]+]] "__spirv_BuiltInWorkgroupId"
-; CHECK: {{[0-9]+}} Name [[GO:[0-9]+]] "__spirv_BuiltInGlobalOffset"
-; CHECK: {{[0-9]+}} Name [[GLI:[0-9]+]] "__spirv_BuiltInGlobalLinearId"
-; CHECK: {{[0-9]+}} Name [[LLII:[0-9]+]] "__spirv_BuiltInLocalInvocationIndex"
-; CHECK: {{[0-9]+}} Name [[SS:[0-9]+]] "__spirv_BuiltInSubgroupSize"
-; CHECK: {{[0-9]+}} Name [[SMS:[0-9]+]] "__spirv_BuiltInSubgroupMaxSize"
-; CHECK: {{[0-9]+}} Name [[NS:[0-9]+]] "__spirv_BuiltInNumSubgroups"
-; CHECK: {{[0-9]+}} Name [[NES:[0-9]+]] "__spirv_BuiltInNumEnqueuedSubgroups"
-; CHECK: {{[0-9]+}} Name [[SI:[0-9]+]] "__spirv_BuiltInSubgroupId"
-; CHECK: {{[0-9]+}} Name [[SLII:[0-9]+]] "__spirv_BuiltInSubgroupLocalInvocationId"
-
-; CHECK: 4 Decorate [[NW]] BuiltIn 24
-; CHECK: 4 Decorate [[WS]] BuiltIn 25
-; CHECK: 4 Decorate [[WI]] BuiltIn 26
-; CHECK: 4 Decorate [[LLI]] BuiltIn 27
-; CHECK: 4 Decorate [[GII]] BuiltIn 28
-; CHECK: 4 Decorate [[LLII]] BuiltIn 29
-; CHECK: 4 Decorate [[WD]] BuiltIn 30
-; CHECK: 4 Decorate [[GS]] BuiltIn 31
-; CHECK: 4 Decorate [[EWS]] BuiltIn 32
-; CHECK: 4 Decorate [[GO]] BuiltIn 33
-; CHECK: 4 Decorate [[GLI]] BuiltIn 34
-; CHECK: 4 Decorate [[SS]] BuiltIn 36
-; CHECK: 4 Decorate [[SMS]] BuiltIn 37
-; CHECK: 4 Decorate [[NS]] BuiltIn 38
-; CHECK: 4 Decorate [[NES]] BuiltIn 39
-; CHECK: 4 Decorate [[SI]] BuiltIn 40
-; CHECK: 4 Decorate [[SLII]] BuiltIn 41
-@__spirv_BuiltInWorkDim = external addrspace(1) global i32
-@__spirv_BuiltInGlobalSize = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInGlobalInvocationId = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInWorkgroupSize = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInEnqueuedWorkgroupSize = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInLocalInvocationId = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInNumWorkgroups = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInWorkgroupId = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInGlobalOffset = external addrspace(1) global <3 x i32>
-@__spirv_BuiltInGlobalLinearId = external addrspace(1) global i32
-@__spirv_BuiltInLocalInvocationIndex = external addrspace(1) global i32
-@__spirv_BuiltInSubgroupSize = external addrspace(1) global i32
-@__spirv_BuiltInSubgroupMaxSize = external addrspace(1) global i32
-@__spirv_BuiltInNumSubgroups = external addrspace(1) global i32
-@__spirv_BuiltInNumEnqueuedSubgroups = external addrspace(1) global i32
-@__spirv_BuiltInSubgroupId = external addrspace(1) global i32
-@__spirv_BuiltInSubgroupLocalInvocationId = external addrspace(1) global i32
-
-; Function Attrs: nounwind readnone
-define spir_kernel void @_Z1wv() #1 {
-entry:
- ret void
-}
-
-attributes #0 = { alwaysinline nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { nounwind readnone "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!opencl.kernels = !{!0}
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!6}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!8}
-!opencl.compiler.options = !{!8}
-!llvm.ident = !{!9}
-!spirv.Source = !{!10}
-!spirv.String = !{!11}
-
-!0 = !{void ()* @_Z1wv, !1, !2, !3, !4, !5}
-!1 = !{!"kernel_arg_addr_space"}
-!2 = !{!"kernel_arg_access_qual"}
-!3 = !{!"kernel_arg_type"}
-!4 = !{!"kernel_arg_base_type"}
-!5 = !{!"kernel_arg_type_qual"}
-!6 = !{i32 1, i32 2}
-!7 = !{i32 2, i32 1}
-!8 = !{}
-!9 = !{!"clang version 3.6.1 "}
-!10 = !{i32 3, i32 200000, !11}
-!11 = !{!"test.cl"}
-!12 = !{!13, !13, i64 0}
-!13 = !{!"int", !14, i64 0}
-!14 = !{!"omnipotent char", !15, i64 0}
-!15 = !{!"Simple C/C++ TBAA"}
+; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t +; RUN: FileCheck < %t %s + +; ModuleID = 'test.cl' +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +; CHECK: {{[0-9]+}} Name [[WD:[0-9]+]] "__spirv_BuiltInWorkDim" +; CHECK: {{[0-9]+}} Name [[GS:[0-9]+]] "__spirv_BuiltInGlobalSize" +; CHECK: {{[0-9]+}} Name [[GII:[0-9]+]] "__spirv_BuiltInGlobalInvocationId" +; CHECK: {{[0-9]+}} Name [[WS:[0-9]+]] "__spirv_BuiltInWorkgroupSize" +; CHECK: {{[0-9]+}} Name [[EWS:[0-9]+]] "__spirv_BuiltInEnqueuedWorkgroupSize" +; CHECK: {{[0-9]+}} Name [[LLI:[0-9]+]] "__spirv_BuiltInLocalInvocationId" +; CHECK: {{[0-9]+}} Name [[NW:[0-9]+]] "__spirv_BuiltInNumWorkgroups" +; CHECK: {{[0-9]+}} Name [[WI:[0-9]+]] "__spirv_BuiltInWorkgroupId" +; CHECK: {{[0-9]+}} Name [[GO:[0-9]+]] "__spirv_BuiltInGlobalOffset" +; CHECK: {{[0-9]+}} Name [[GLI:[0-9]+]] "__spirv_BuiltInGlobalLinearId" +; CHECK: {{[0-9]+}} Name [[LLII:[0-9]+]] "__spirv_BuiltInLocalInvocationIndex" +; CHECK: {{[0-9]+}} Name [[SS:[0-9]+]] "__spirv_BuiltInSubgroupSize" +; CHECK: {{[0-9]+}} Name [[SMS:[0-9]+]] "__spirv_BuiltInSubgroupMaxSize" +; CHECK: {{[0-9]+}} Name [[NS:[0-9]+]] "__spirv_BuiltInNumSubgroups" +; CHECK: {{[0-9]+}} Name [[NES:[0-9]+]] "__spirv_BuiltInNumEnqueuedSubgroups" +; CHECK: {{[0-9]+}} Name [[SI:[0-9]+]] "__spirv_BuiltInSubgroupId" +; CHECK: {{[0-9]+}} Name [[SLII:[0-9]+]] "__spirv_BuiltInSubgroupLocalInvocationId" + +; CHECK: 4 Decorate [[NW]] BuiltIn 24 +; CHECK: 4 Decorate [[WS]] BuiltIn 25 +; CHECK: 4 Decorate [[WI]] BuiltIn 26 +; CHECK: 4 Decorate [[LLI]] BuiltIn 27 +; CHECK: 4 Decorate [[GII]] BuiltIn 28 +; CHECK: 4 Decorate [[LLII]] BuiltIn 29 +; CHECK: 4 Decorate [[WD]] BuiltIn 30 +; CHECK: 4 Decorate [[GS]] BuiltIn 31 +; CHECK: 4 Decorate [[EWS]] BuiltIn 32 +; CHECK: 4 Decorate [[GO]] BuiltIn 33 +; CHECK: 4 Decorate [[GLI]] BuiltIn 34 +; CHECK: 4 Decorate [[SS]] BuiltIn 36 +; CHECK: 4 Decorate [[SMS]] BuiltIn 37 +; CHECK: 4 Decorate [[NS]] BuiltIn 38 +; CHECK: 4 Decorate [[NES]] BuiltIn 39 +; CHECK: 4 Decorate [[SI]] BuiltIn 40 +; CHECK: 4 Decorate [[SLII]] BuiltIn 41 +@__spirv_BuiltInWorkDim = external addrspace(1) global i32 +@__spirv_BuiltInGlobalSize = external addrspace(1) global <3 x i32> +@__spirv_BuiltInGlobalInvocationId = external addrspace(1) global <3 x i32> +@__spirv_BuiltInWorkgroupSize = external addrspace(1) global <3 x i32> +@__spirv_BuiltInEnqueuedWorkgroupSize = external addrspace(1) global <3 x i32> +@__spirv_BuiltInLocalInvocationId = external addrspace(1) global <3 x i32> +@__spirv_BuiltInNumWorkgroups = external addrspace(1) global <3 x i32> +@__spirv_BuiltInWorkgroupId = external addrspace(1) global <3 x i32> +@__spirv_BuiltInGlobalOffset = external addrspace(1) global <3 x i32> +@__spirv_BuiltInGlobalLinearId = external addrspace(1) global i32 +@__spirv_BuiltInLocalInvocationIndex = external addrspace(1) global i32 +@__spirv_BuiltInSubgroupSize = external addrspace(1) global i32 +@__spirv_BuiltInSubgroupMaxSize = external addrspace(1) global i32 +@__spirv_BuiltInNumSubgroups = external addrspace(1) global i32 +@__spirv_BuiltInNumEnqueuedSubgroups = external addrspace(1) global i32 +@__spirv_BuiltInSubgroupId = external addrspace(1) global i32 +@__spirv_BuiltInSubgroupLocalInvocationId = external addrspace(1) global i32 + +; Function Attrs: nounwind readnone +define spir_kernel void @_Z1wv() #1 { +entry: + ret void +} + +attributes #0 = { alwaysinline nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { nounwind readnone "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!opencl.kernels = !{!0} +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!6} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!8} +!opencl.compiler.options = !{!8} +!llvm.ident = !{!9} +!spirv.Source = !{!10} +!spirv.String = !{!11} + +!0 = !{void ()* @_Z1wv, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space"} +!2 = !{!"kernel_arg_access_qual"} +!3 = !{!"kernel_arg_type"} +!4 = !{!"kernel_arg_base_type"} +!5 = !{!"kernel_arg_type_qual"} +!6 = !{i32 1, i32 2} +!7 = !{i32 2, i32 1} +!8 = !{} +!9 = !{!"clang version 3.6.1 "} +!10 = !{i32 3, i32 200000, !11} +!11 = !{!"test.cl"} +!12 = !{!13, !13, i64 0} +!13 = !{!"int", !14, i64 0} +!14 = !{!"omnipotent char", !15, i64 0} +!15 = !{!"Simple C/C++ TBAA"} diff --git a/test/SPIRV/linkage-types.ll b/test/SPIRV/linkage-types.ll index bae9194b..9e0ba2a1 100644 --- a/test/SPIRV/linkage-types.ll +++ b/test/SPIRV/linkage-types.ll @@ -1,167 +1,167 @@ -; RUN: llvm-as < %s > %t.bc
-; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt
-; RUN: FileCheck < %t.txt %s --check-prefix=SPIRV
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=BACK-TO-LLVM
-
-; ModuleID = 'c:/work/tmp/testLink.c'
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-; SPIRV: Capability Linkage
-; SPIRV: EntryPoint 6 [[kern:[0-9]+]] "kern"
-
-@ae = available_externally addrspace(1) global i32 79, align 4
-; SPIRV: Name [[ae:[0-9]+]] "ae"
-; BACK-TO-LLVM: @ae = available_externally addrspace(1) global i32 79, align 4
-
-@i1 = addrspace(1) global i32 1, align 4
-; SPIRV: Name [[i1:[0-9]+]] "i1"
-; BACK-TO-LLVM: @i1 = addrspace(1) global i32 1, align 4
-
-@i2 = internal addrspace(1) global i32 2, align 4
-; SPIRV: Name [[i2:[0-9]+]] "i2"
-; BACK-TO-LLVM: @i2 = internal addrspace(1) global i32 2, align 4
-
-@i3 = addrspace(1) global i32 3, align 4
-; SPIRV: Name [[i3:[0-9]+]] "i3"
-; BACK-TO-LLVM: @i3 = addrspace(1) global i32 3, align 4
-
-@i4 = common addrspace(1) global i32 0, align 4
-; SPIRV: Name [[i4:[0-9]+]] "i4"
-; BACK-TO-LLVM: @i4 = common addrspace(1) global i32 0, align 4
-
-@i5 = internal addrspace(1) global i32 0, align 4
-; SPIRV: Name [[i5:[0-9]+]] "i5"
-; BACK-TO-LLVM: @i5 = internal addrspace(1) global i32 0, align 4
-
-@color_table = addrspace(2) constant [2 x i32] [i32 0, i32 1], align 4
-; SPIRV: Name [[color_table:[0-9]+]] "color_table"
-; BACK-TO-LLVM: @color_table = addrspace(2) constant [2 x i32] [i32 0, i32 1], align 4
-
-@noise_table = external addrspace(2) constant [256 x i32]
-; SPIRV: Name [[noise_table:[0-9]+]] "noise_table"
-; BACK-TO-LLVM: @noise_table = external addrspace(2) constant [256 x i32]
-
-@w = addrspace(1) constant i32 0, align 4
-; SPIRV: Name [[w:[0-9]+]] "w"
-; BACK-TO-LLVM: @w = addrspace(1) constant i32 0, align 4
-
-@f.color_table = internal addrspace(2) constant [2 x i32] [i32 2, i32 3], align 4
-; SPIRV: Name [[f_color_table:[0-9]+]] "f.color_table"
-; BACK-TO-LLVM: @f.color_table = internal addrspace(2) constant [2 x i32] [i32 2, i32 3], align 4
-
-@e = external addrspace(1) global i32
-; SPIRV: Name [[e:[0-9]+]] "e"
-; BACK-TO-LLVM: @e = external addrspace(1) global i32
-
-@f.t = internal addrspace(1) global i32 5, align 4
-; SPIRV: Name [[f_t:[0-9]+]] "f.t"
-; BACK-TO-LLVM: @f.t = internal addrspace(1) global i32 5, align 4
-
-@f.stint = internal addrspace(1) global i32 0, align 4
-; SPIRV: Name [[f_stint:[0-9]+]] "f.stint"
-; BACK-TO-LLVM: @f.stint = internal addrspace(1) global i32 0, align 4
-
-@f.inside = internal addrspace(1) global i32 0, align 4
-; SPIRV: Name [[f_inside:[0-9]+]] "f.inside"
-; BACK-TO-LLVM: @f.inside = internal addrspace(1) global i32 0, align 4
-
-@f.b = internal addrspace(2) constant float 1.000000e+00, align 4
-; SPIRV: Name [[f_b:[0-9]+]] "f.b"
-; BACK-TO-LLVM: @f.b = internal addrspace(2) constant float 1.000000e+00, align 4
-
-; SPIRV-DAG: Name [[foo:[0-9]+]] "foo"
-; SPIRV-DAG: Name [[f:[0-9]+]] "f"
-; SPIRV-DAG: Name [[g:[0-9]+]] "g"
-; SPIRV-DAG: Name [[inline_fun:[0-9]+]] "inline_fun"
-
-; SPIRV-DAG: Decorate [[ae]] LinkageAttributes "ae" Import
-; SPIRV-DAG: Decorate [[e]] LinkageAttributes "e" Import
-; SPIRV-DAG: Decorate [[f]] LinkageAttributes "f" Export
-; SPIRV-DAG: Decorate [[w]] LinkageAttributes "w" Export
-; SPIRV-DAG: Decorate [[i1]] LinkageAttributes "i1" Export
-; SPIRV-DAG: Decorate [[i3]] LinkageAttributes "i3" Export
-; SPIRV-DAG: Decorate [[i4]] LinkageAttributes "i4" Export
-; SPIRV-DAG: Decorate [[foo]] LinkageAttributes "foo" Import
-; SPIRV-DAG: Decorate [[inline_fun]] LinkageAttributes "inline_fun" Export
-; SPIRV-DAG: Decorate [[color_table]] LinkageAttributes "color_table" Export
-; SPIRV-DAG: Decorate [[noise_table]] LinkageAttributes "noise_table" Import
-
-; SPIRV: Function {{[0-9]+}} [[foo]]
-; BACK-TO-LLVM: declare spir_func void @foo()
-declare spir_func void @foo() #2
-
-; SPIRV: Function {{[0-9]+}} [[f]]
-; BACK-TO-LLVM: define spir_func void @f()
-; Function Attrs: nounwind
-define spir_func void @f() #0 {
-entry:
- %q = alloca i32, align 4
- %r = alloca i32, align 4
- %0 = load i32, i32 addrspace(1)* @i2, align 4
- store i32 %0, i32* %q, align 4
- %1 = load i32, i32 addrspace(1)* @i3, align 4
- store i32 %1, i32 addrspace(1)* @i5, align 4
- %2 = load i32, i32 addrspace(1)* @e, align 4
- store i32 %2, i32* %r, align 4
- %3 = load i32, i32 addrspace(2)* getelementptr inbounds ([256 x i32], [256 x i32] addrspace(2)* @noise_table, i32 0, i32 0), align 4
- store i32 %3, i32* %r, align 4
- %4 = load i32, i32 addrspace(2)* getelementptr inbounds ([2 x i32], [2 x i32] addrspace(2)* @f.color_table, i32 0, i32 0), align 4
- store i32 %4, i32* %r, align 4
- %call = call spir_func i32 @g()
- call spir_func void @inline_fun()
- ret void
-}
-
-; SPIRV: Function {{[0-9]+}} [[g]]
-; BACK-TO-LLVM: define internal spir_func i32 @g()
-; Function Attrs: nounwind
-define internal spir_func i32 @g() #0 {
-entry:
- call spir_func void @foo()
- ret i32 25
-}
-
-; SPIRV: Function {{[0-9]+}} [[inline_fun]]
-; BACK-TO-LLVM: define spir_func void @inline_fun()
-; "linkonce_odr" is lost in translation !
-; Function Attrs: inlinehint nounwind
-define linkonce_odr spir_func void @inline_fun() #1 {
-entry:
- %t = alloca i32 addrspace(1)*, align 4
- store i32 addrspace(1)* @i1, i32 addrspace(1)** %t, align 4
- ret void
-}
-
-; SPIRV: Function {{[0-9]+}} [[kern]]
-; BACK-TO-LLVM: define spir_kernel void @kern()
-; Function Attrs: nounwind
-define spir_kernel void @kern() #0 {
-entry:
- call spir_func void @f()
- ret void
-}
-
-attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { inlinehint nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!opencl.kernels = !{!0}
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!6}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!8}
-!opencl.compiler.options = !{!8}
-
-!0 = !{void ()* @kern, !1, !2, !3, !4, !5}
-!1 = !{!"kernel_arg_addr_space"}
-!2 = !{!"kernel_arg_access_qual"}
-!3 = !{!"kernel_arg_type"}
-!4 = !{!"kernel_arg_base_type"}
-!5 = !{!"kernel_arg_type_qual"}
-!6 = !{i32 1, i32 2}
-!7 = !{i32 2, i32 0}
-!8 = !{}
+; RUN: llvm-as < %s > %t.bc +; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt +; RUN: FileCheck < %t.txt %s --check-prefix=SPIRV +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=BACK-TO-LLVM + +; ModuleID = 'c:/work/tmp/testLink.c' +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +; SPIRV: Capability Linkage +; SPIRV: EntryPoint 6 [[kern:[0-9]+]] "kern" + +@ae = available_externally addrspace(1) global i32 79, align 4 +; SPIRV: Name [[ae:[0-9]+]] "ae" +; BACK-TO-LLVM: @ae = available_externally addrspace(1) global i32 79, align 4 + +@i1 = addrspace(1) global i32 1, align 4 +; SPIRV: Name [[i1:[0-9]+]] "i1" +; BACK-TO-LLVM: @i1 = addrspace(1) global i32 1, align 4 + +@i2 = internal addrspace(1) global i32 2, align 4 +; SPIRV: Name [[i2:[0-9]+]] "i2" +; BACK-TO-LLVM: @i2 = internal addrspace(1) global i32 2, align 4 + +@i3 = addrspace(1) global i32 3, align 4 +; SPIRV: Name [[i3:[0-9]+]] "i3" +; BACK-TO-LLVM: @i3 = addrspace(1) global i32 3, align 4 + +@i4 = common addrspace(1) global i32 0, align 4 +; SPIRV: Name [[i4:[0-9]+]] "i4" +; BACK-TO-LLVM: @i4 = common addrspace(1) global i32 0, align 4 + +@i5 = internal addrspace(1) global i32 0, align 4 +; SPIRV: Name [[i5:[0-9]+]] "i5" +; BACK-TO-LLVM: @i5 = internal addrspace(1) global i32 0, align 4 + +@color_table = addrspace(2) constant [2 x i32] [i32 0, i32 1], align 4 +; SPIRV: Name [[color_table:[0-9]+]] "color_table" +; BACK-TO-LLVM: @color_table = addrspace(2) constant [2 x i32] [i32 0, i32 1], align 4 + +@noise_table = external addrspace(2) constant [256 x i32] +; SPIRV: Name [[noise_table:[0-9]+]] "noise_table" +; BACK-TO-LLVM: @noise_table = external addrspace(2) constant [256 x i32] + +@w = addrspace(1) constant i32 0, align 4 +; SPIRV: Name [[w:[0-9]+]] "w" +; BACK-TO-LLVM: @w = addrspace(1) constant i32 0, align 4 + +@f.color_table = internal addrspace(2) constant [2 x i32] [i32 2, i32 3], align 4 +; SPIRV: Name [[f_color_table:[0-9]+]] "f.color_table" +; BACK-TO-LLVM: @f.color_table = internal addrspace(2) constant [2 x i32] [i32 2, i32 3], align 4 + +@e = external addrspace(1) global i32 +; SPIRV: Name [[e:[0-9]+]] "e" +; BACK-TO-LLVM: @e = external addrspace(1) global i32 + +@f.t = internal addrspace(1) global i32 5, align 4 +; SPIRV: Name [[f_t:[0-9]+]] "f.t" +; BACK-TO-LLVM: @f.t = internal addrspace(1) global i32 5, align 4 + +@f.stint = internal addrspace(1) global i32 0, align 4 +; SPIRV: Name [[f_stint:[0-9]+]] "f.stint" +; BACK-TO-LLVM: @f.stint = internal addrspace(1) global i32 0, align 4 + +@f.inside = internal addrspace(1) global i32 0, align 4 +; SPIRV: Name [[f_inside:[0-9]+]] "f.inside" +; BACK-TO-LLVM: @f.inside = internal addrspace(1) global i32 0, align 4 + +@f.b = internal addrspace(2) constant float 1.000000e+00, align 4 +; SPIRV: Name [[f_b:[0-9]+]] "f.b" +; BACK-TO-LLVM: @f.b = internal addrspace(2) constant float 1.000000e+00, align 4 + +; SPIRV-DAG: Name [[foo:[0-9]+]] "foo" +; SPIRV-DAG: Name [[f:[0-9]+]] "f" +; SPIRV-DAG: Name [[g:[0-9]+]] "g" +; SPIRV-DAG: Name [[inline_fun:[0-9]+]] "inline_fun" + +; SPIRV-DAG: Decorate [[ae]] LinkageAttributes "ae" Import +; SPIRV-DAG: Decorate [[e]] LinkageAttributes "e" Import +; SPIRV-DAG: Decorate [[f]] LinkageAttributes "f" Export +; SPIRV-DAG: Decorate [[w]] LinkageAttributes "w" Export +; SPIRV-DAG: Decorate [[i1]] LinkageAttributes "i1" Export +; SPIRV-DAG: Decorate [[i3]] LinkageAttributes "i3" Export +; SPIRV-DAG: Decorate [[i4]] LinkageAttributes "i4" Export +; SPIRV-DAG: Decorate [[foo]] LinkageAttributes "foo" Import +; SPIRV-DAG: Decorate [[inline_fun]] LinkageAttributes "inline_fun" Export +; SPIRV-DAG: Decorate [[color_table]] LinkageAttributes "color_table" Export +; SPIRV-DAG: Decorate [[noise_table]] LinkageAttributes "noise_table" Import + +; SPIRV: Function {{[0-9]+}} [[foo]] +; BACK-TO-LLVM: declare spir_func void @foo() +declare spir_func void @foo() #2 + +; SPIRV: Function {{[0-9]+}} [[f]] +; BACK-TO-LLVM: define spir_func void @f() +; Function Attrs: nounwind +define spir_func void @f() #0 { +entry: + %q = alloca i32, align 4 + %r = alloca i32, align 4 + %0 = load i32, i32 addrspace(1)* @i2, align 4 + store i32 %0, i32* %q, align 4 + %1 = load i32, i32 addrspace(1)* @i3, align 4 + store i32 %1, i32 addrspace(1)* @i5, align 4 + %2 = load i32, i32 addrspace(1)* @e, align 4 + store i32 %2, i32* %r, align 4 + %3 = load i32, i32 addrspace(2)* getelementptr inbounds ([256 x i32], [256 x i32] addrspace(2)* @noise_table, i32 0, i32 0), align 4 + store i32 %3, i32* %r, align 4 + %4 = load i32, i32 addrspace(2)* getelementptr inbounds ([2 x i32], [2 x i32] addrspace(2)* @f.color_table, i32 0, i32 0), align 4 + store i32 %4, i32* %r, align 4 + %call = call spir_func i32 @g() + call spir_func void @inline_fun() + ret void +} + +; SPIRV: Function {{[0-9]+}} [[g]] +; BACK-TO-LLVM: define internal spir_func i32 @g() +; Function Attrs: nounwind +define internal spir_func i32 @g() #0 { +entry: + call spir_func void @foo() + ret i32 25 +} + +; SPIRV: Function {{[0-9]+}} [[inline_fun]] +; BACK-TO-LLVM: define spir_func void @inline_fun() +; "linkonce_odr" is lost in translation ! +; Function Attrs: inlinehint nounwind +define linkonce_odr spir_func void @inline_fun() #1 { +entry: + %t = alloca i32 addrspace(1)*, align 4 + store i32 addrspace(1)* @i1, i32 addrspace(1)** %t, align 4 + ret void +} + +; SPIRV: Function {{[0-9]+}} [[kern]] +; BACK-TO-LLVM: define spir_kernel void @kern() +; Function Attrs: nounwind +define spir_kernel void @kern() #0 { +entry: + call spir_func void @f() + ret void +} + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { inlinehint nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!opencl.kernels = !{!0} +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!6} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!8} +!opencl.compiler.options = !{!8} + +!0 = !{void ()* @kern, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space"} +!2 = !{!"kernel_arg_access_qual"} +!3 = !{!"kernel_arg_type"} +!4 = !{!"kernel_arg_base_type"} +!5 = !{!"kernel_arg_type_qual"} +!6 = !{i32 1, i32 2} +!7 = !{i32 2, i32 0} +!8 = !{} diff --git a/test/SPIRV/simple.ll b/test/SPIRV/simple.ll index ff4d26b3..153ff2c8 100644 --- a/test/SPIRV/simple.ll +++ b/test/SPIRV/simple.ll @@ -1,158 +1,158 @@ -; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t
-; RUN: FileCheck < %t %s
-target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir64-unknown-unknown"
-
-; Support of doubles is required.
-; CHECK: Capability Float64
-; CHECK: "fun01"
-; Function Attrs: nounwind
-define spir_kernel void @fun01(i32 addrspace(1)* noalias %a, i32 addrspace(1)* %b, i32 %c) #0 {
-entry:
- %a.addr = alloca i32 addrspace(1)*, align 8
- %b.addr = alloca i32 addrspace(1)*, align 8
- %c.addr = alloca i32, align 4
- store i32 addrspace(1)* %a, i32 addrspace(1)** %a.addr, align 8
- store i32 addrspace(1)* %b, i32 addrspace(1)** %b.addr, align 8
- store i32 %c, i32* %c.addr, align 4
- %0 = load i32 addrspace(1)*, i32 addrspace(1)** %b.addr, align 8
- %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 0
- %1 = load i32, i32 addrspace(1)* %arrayidx, align 4
- %2 = load i32 addrspace(1)*, i32 addrspace(1)** %a.addr, align 8
- %arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %2, i64 0
- store i32 %1, i32 addrspace(1)* %arrayidx1, align 4
- %3 = load i32 addrspace(1)*, i32 addrspace(1)** %b.addr, align 8
- %cmp = icmp ugt i32 addrspace(1)* %3, null
- br i1 %cmp, label %if.then, label %if.end
-
-if.then: ; preds = %entry
- %4 = load i32 addrspace(1)*, i32 addrspace(1)** %a.addr, align 8
- %arrayidx2 = getelementptr inbounds i32, i32 addrspace(1)* %4, i64 0
- store i32 2, i32 addrspace(1)* %arrayidx2, align 4
- br label %if.end
-
-if.end: ; preds = %if.then, %entry
- ret void
-}
-
-; CHECK: "fun02"
-; Function Attrs: nounwind
-define spir_kernel void @fun02(double addrspace(1)* %a, double addrspace(1)* %b, i32 %c) #0 {
-entry:
- %a.addr = alloca double addrspace(1)*, align 8
- %b.addr = alloca double addrspace(1)*, align 8
- %c.addr = alloca i32, align 4
- store double addrspace(1)* %a, double addrspace(1)** %a.addr, align 8
- store double addrspace(1)* %b, double addrspace(1)** %b.addr, align 8
- store i32 %c, i32* %c.addr, align 4
- %0 = load i32, i32* %c.addr, align 4
- %idxprom = sext i32 %0 to i64
- %1 = load double addrspace(1)*, double addrspace(1)** %b.addr, align 8
- %arrayidx = getelementptr inbounds double, double addrspace(1)* %1, i64 %idxprom
- %2 = load double, double addrspace(1)* %arrayidx, align 8
- %3 = load i32, i32* %c.addr, align 4
- %idxprom1 = sext i32 %3 to i64
- %4 = load double addrspace(1)*, double addrspace(1)** %a.addr, align 8
- %arrayidx2 = getelementptr inbounds double, double addrspace(1)* %4, i64 %idxprom1
- store double %2, double addrspace(1)* %arrayidx2, align 8
- ret void
-}
-
-; CHECK: "test_builtin"
-; Function Attrs: nounwind
-define spir_func void @test_builtin(i32 addrspace(1)* %in, i32 addrspace(1)* %out) #0 {
-entry:
- %in.addr = alloca i32 addrspace(1)*, align 8
- %out.addr = alloca i32 addrspace(1)*, align 8
- %n = alloca i32, align 4
- store i32 addrspace(1)* %in, i32 addrspace(1)** %in.addr, align 8
- store i32 addrspace(1)* %out, i32 addrspace(1)** %out.addr, align 8
- %call = call spir_func i64 @_Z13get_global_idj(i32 0) #2
- %conv = trunc i64 %call to i32
- store i32 %conv, i32* %n, align 4
- %0 = load i32, i32* %n, align 4
- %idxprom = sext i32 %0 to i64
- %1 = load i32 addrspace(1)*, i32 addrspace(1)** %in.addr, align 8
- %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %1, i64 %idxprom
- %2 = load i32, i32 addrspace(1)* %arrayidx, align 4
- %call1 = call spir_func i32 @_Z3absi(i32 %2) #2
- %3 = load i32, i32* %n, align 4
- %idxprom2 = sext i32 %3 to i64
- %4 = load i32 addrspace(1)*, i32 addrspace(1)** %out.addr, align 8
- %arrayidx3 = getelementptr inbounds i32, i32 addrspace(1)* %4, i64 %idxprom2
- store i32 %call1, i32 addrspace(1)* %arrayidx3, align 4
- ret void
-}
-
-; CHECK-NOT: "_Z13get_global_idj"
-; Function Attrs: nounwind readnone
-declare spir_func i64 @_Z13get_global_idj(i32) #1
-
-; CHECK-NOT: "_Z3absi"
-; Function Attrs: nounwind readnone
-declare spir_func i32 @_Z3absi(i32) #1
-
-; CHECK: "myabs"
-; Function Attrs: nounwind
-define spir_func i32 @myabs(i32 %x) #0 {
-entry:
- %x.addr = alloca i32, align 4
- store i32 %x, i32* %x.addr, align 4
- %0 = load i32, i32* %x.addr, align 4
- %call = call spir_func i32 @_Z3absi(i32 %0) #2
- ret i32 %call
-}
-
-; CHECK: "test_function_call"
-; Function Attrs: nounwind
-define spir_func void @test_function_call(i32 addrspace(1)* %in, i32 addrspace(1)* %out) #0 {
-entry:
- %in.addr = alloca i32 addrspace(1)*, align 8
- %out.addr = alloca i32 addrspace(1)*, align 8
- %n = alloca i32, align 4
- store i32 addrspace(1)* %in, i32 addrspace(1)** %in.addr, align 8
- store i32 addrspace(1)* %out, i32 addrspace(1)** %out.addr, align 8
- %call = call spir_func i64 @_Z13get_global_idj(i32 0) #2
- %conv = trunc i64 %call to i32
- store i32 %conv, i32* %n, align 4
- %0 = load i32, i32* %n, align 4
- %idxprom = sext i32 %0 to i64
- %1 = load i32 addrspace(1)*, i32 addrspace(1)** %in.addr, align 8
- %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %1, i64 %idxprom
- %2 = load i32, i32 addrspace(1)* %arrayidx, align 4
- %call1 = call spir_func i32 @myabs(i32 %2)
- %3 = load i32, i32* %n, align 4
- %idxprom2 = sext i32 %3 to i64
- %4 = load i32 addrspace(1)*, i32 addrspace(1)** %out.addr, align 8
- %arrayidx3 = getelementptr inbounds i32, i32 addrspace(1)* %4, i64 %idxprom2
- store i32 %call1, i32 addrspace(1)* %arrayidx3, align 4
- ret void
-}
-
-attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #1 = { nounwind readnone "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-attributes #2 = { nounwind readnone }
-
-!opencl.kernels = !{!0, !7}
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!12}
-!opencl.ocl.version = !{!12}
-!opencl.used.extensions = !{!13}
-!opencl.used.optional.core.features = !{!14}
-!opencl.compiler.options = !{!13}
-
-!0 = !{void (i32 addrspace(1)*, i32 addrspace(1)*, i32)* @fun01, !1, !2, !3, !4, !5, !6}
-!1 = !{!"kernel_arg_addr_space", i32 1, i32 1, i32 0}
-!2 = !{!"kernel_arg_access_qual", !"none", !"none", !"none"}
-!3 = !{!"kernel_arg_type", !"int*", !"int*", !"int"}
-!4 = !{!"kernel_arg_base_type", !"int*", !"int*", !"int"}
-!5 = !{!"kernel_arg_type_qual", !"restrict", !"const", !""}
-!6 = !{!"reqd_work_group_size", i32 1, i32 2, i32 3}
-!7 = !{void (double addrspace(1)*, double addrspace(1)*, i32)* @fun02, !1, !2, !8, !9, !10, !11}
-!8 = !{!"kernel_arg_type", !"double*", !"double*", !"int"}
-!9 = !{!"kernel_arg_base_type", !"double*", !"double*", !"int"}
-!10 = !{!"kernel_arg_type_qual", !"", !"", !""}
-!11 = !{!"vec_type_hint", double undef, i32 1}
-!12 = !{i32 1, i32 2}
-!13 = !{}
-!14 = !{!"cl_doubles"}
+; RUN: llvm-as < %s | llvm-spirv -spirv-text -o %t +; RUN: FileCheck < %t %s +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir64-unknown-unknown" + +; Support of doubles is required. +; CHECK: Capability Float64 +; CHECK: "fun01" +; Function Attrs: nounwind +define spir_kernel void @fun01(i32 addrspace(1)* noalias %a, i32 addrspace(1)* %b, i32 %c) #0 { +entry: + %a.addr = alloca i32 addrspace(1)*, align 8 + %b.addr = alloca i32 addrspace(1)*, align 8 + %c.addr = alloca i32, align 4 + store i32 addrspace(1)* %a, i32 addrspace(1)** %a.addr, align 8 + store i32 addrspace(1)* %b, i32 addrspace(1)** %b.addr, align 8 + store i32 %c, i32* %c.addr, align 4 + %0 = load i32 addrspace(1)*, i32 addrspace(1)** %b.addr, align 8 + %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 0 + %1 = load i32, i32 addrspace(1)* %arrayidx, align 4 + %2 = load i32 addrspace(1)*, i32 addrspace(1)** %a.addr, align 8 + %arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %2, i64 0 + store i32 %1, i32 addrspace(1)* %arrayidx1, align 4 + %3 = load i32 addrspace(1)*, i32 addrspace(1)** %b.addr, align 8 + %cmp = icmp ugt i32 addrspace(1)* %3, null + br i1 %cmp, label %if.then, label %if.end + +if.then: ; preds = %entry + %4 = load i32 addrspace(1)*, i32 addrspace(1)** %a.addr, align 8 + %arrayidx2 = getelementptr inbounds i32, i32 addrspace(1)* %4, i64 0 + store i32 2, i32 addrspace(1)* %arrayidx2, align 4 + br label %if.end + +if.end: ; preds = %if.then, %entry + ret void +} + +; CHECK: "fun02" +; Function Attrs: nounwind +define spir_kernel void @fun02(double addrspace(1)* %a, double addrspace(1)* %b, i32 %c) #0 { +entry: + %a.addr = alloca double addrspace(1)*, align 8 + %b.addr = alloca double addrspace(1)*, align 8 + %c.addr = alloca i32, align 4 + store double addrspace(1)* %a, double addrspace(1)** %a.addr, align 8 + store double addrspace(1)* %b, double addrspace(1)** %b.addr, align 8 + store i32 %c, i32* %c.addr, align 4 + %0 = load i32, i32* %c.addr, align 4 + %idxprom = sext i32 %0 to i64 + %1 = load double addrspace(1)*, double addrspace(1)** %b.addr, align 8 + %arrayidx = getelementptr inbounds double, double addrspace(1)* %1, i64 %idxprom + %2 = load double, double addrspace(1)* %arrayidx, align 8 + %3 = load i32, i32* %c.addr, align 4 + %idxprom1 = sext i32 %3 to i64 + %4 = load double addrspace(1)*, double addrspace(1)** %a.addr, align 8 + %arrayidx2 = getelementptr inbounds double, double addrspace(1)* %4, i64 %idxprom1 + store double %2, double addrspace(1)* %arrayidx2, align 8 + ret void +} + +; CHECK: "test_builtin" +; Function Attrs: nounwind +define spir_func void @test_builtin(i32 addrspace(1)* %in, i32 addrspace(1)* %out) #0 { +entry: + %in.addr = alloca i32 addrspace(1)*, align 8 + %out.addr = alloca i32 addrspace(1)*, align 8 + %n = alloca i32, align 4 + store i32 addrspace(1)* %in, i32 addrspace(1)** %in.addr, align 8 + store i32 addrspace(1)* %out, i32 addrspace(1)** %out.addr, align 8 + %call = call spir_func i64 @_Z13get_global_idj(i32 0) #2 + %conv = trunc i64 %call to i32 + store i32 %conv, i32* %n, align 4 + %0 = load i32, i32* %n, align 4 + %idxprom = sext i32 %0 to i64 + %1 = load i32 addrspace(1)*, i32 addrspace(1)** %in.addr, align 8 + %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %1, i64 %idxprom + %2 = load i32, i32 addrspace(1)* %arrayidx, align 4 + %call1 = call spir_func i32 @_Z3absi(i32 %2) #2 + %3 = load i32, i32* %n, align 4 + %idxprom2 = sext i32 %3 to i64 + %4 = load i32 addrspace(1)*, i32 addrspace(1)** %out.addr, align 8 + %arrayidx3 = getelementptr inbounds i32, i32 addrspace(1)* %4, i64 %idxprom2 + store i32 %call1, i32 addrspace(1)* %arrayidx3, align 4 + ret void +} + +; CHECK-NOT: "_Z13get_global_idj" +; Function Attrs: nounwind readnone +declare spir_func i64 @_Z13get_global_idj(i32) #1 + +; CHECK-NOT: "_Z3absi" +; Function Attrs: nounwind readnone +declare spir_func i32 @_Z3absi(i32) #1 + +; CHECK: "myabs" +; Function Attrs: nounwind +define spir_func i32 @myabs(i32 %x) #0 { +entry: + %x.addr = alloca i32, align 4 + store i32 %x, i32* %x.addr, align 4 + %0 = load i32, i32* %x.addr, align 4 + %call = call spir_func i32 @_Z3absi(i32 %0) #2 + ret i32 %call +} + +; CHECK: "test_function_call" +; Function Attrs: nounwind +define spir_func void @test_function_call(i32 addrspace(1)* %in, i32 addrspace(1)* %out) #0 { +entry: + %in.addr = alloca i32 addrspace(1)*, align 8 + %out.addr = alloca i32 addrspace(1)*, align 8 + %n = alloca i32, align 4 + store i32 addrspace(1)* %in, i32 addrspace(1)** %in.addr, align 8 + store i32 addrspace(1)* %out, i32 addrspace(1)** %out.addr, align 8 + %call = call spir_func i64 @_Z13get_global_idj(i32 0) #2 + %conv = trunc i64 %call to i32 + store i32 %conv, i32* %n, align 4 + %0 = load i32, i32* %n, align 4 + %idxprom = sext i32 %0 to i64 + %1 = load i32 addrspace(1)*, i32 addrspace(1)** %in.addr, align 8 + %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %1, i64 %idxprom + %2 = load i32, i32 addrspace(1)* %arrayidx, align 4 + %call1 = call spir_func i32 @myabs(i32 %2) + %3 = load i32, i32* %n, align 4 + %idxprom2 = sext i32 %3 to i64 + %4 = load i32 addrspace(1)*, i32 addrspace(1)** %out.addr, align 8 + %arrayidx3 = getelementptr inbounds i32, i32 addrspace(1)* %4, i64 %idxprom2 + store i32 %call1, i32 addrspace(1)* %arrayidx3, align 4 + ret void +} + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { nounwind readnone "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { nounwind readnone } + +!opencl.kernels = !{!0, !7} +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!12} +!opencl.ocl.version = !{!12} +!opencl.used.extensions = !{!13} +!opencl.used.optional.core.features = !{!14} +!opencl.compiler.options = !{!13} + +!0 = !{void (i32 addrspace(1)*, i32 addrspace(1)*, i32)* @fun01, !1, !2, !3, !4, !5, !6} +!1 = !{!"kernel_arg_addr_space", i32 1, i32 1, i32 0} +!2 = !{!"kernel_arg_access_qual", !"none", !"none", !"none"} +!3 = !{!"kernel_arg_type", !"int*", !"int*", !"int"} +!4 = !{!"kernel_arg_base_type", !"int*", !"int*", !"int"} +!5 = !{!"kernel_arg_type_qual", !"restrict", !"const", !""} +!6 = !{!"reqd_work_group_size", i32 1, i32 2, i32 3} +!7 = !{void (double addrspace(1)*, double addrspace(1)*, i32)* @fun02, !1, !2, !8, !9, !10, !11} +!8 = !{!"kernel_arg_type", !"double*", !"double*", !"int"} +!9 = !{!"kernel_arg_base_type", !"double*", !"double*", !"int"} +!10 = !{!"kernel_arg_type_qual", !"", !"", !""} +!11 = !{!"vec_type_hint", double undef, i32 1} +!12 = !{i32 1, i32 2} +!13 = !{} +!14 = !{!"cl_doubles"} diff --git a/test/SPIRV/transcoding/DecorationMaxByteOffset.ll b/test/SPIRV/transcoding/DecorationMaxByteOffset.ll index a9caba5b..dabccfb5 100644 --- a/test/SPIRV/transcoding/DecorationMaxByteOffset.ll +++ b/test/SPIRV/transcoding/DecorationMaxByteOffset.ll @@ -1,53 +1,53 @@ -; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt
-; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
-
-; CHECK-LLVM: define spir_kernel void @worker(i8 addrspace(3)* dereferenceable(12) %ptr)
-; CHECK-LLVM: define spir_func void @not_a_kernel(i8 addrspace(3)* dereferenceable(123) %ptr2)
-
-; CHECK-SPIRV: 3 Name [[PTR_ID:[0-9]+]] "ptr"
-; CHECK-SPIRV: 4 Name [[PTR2_ID:[0-9]+]] "ptr2"
-; CHECK-SPIRV: 4 Decorate [[PTR_ID]] MaxByteOffset 12
-; CHECK-SPIRV: 4 Decorate [[PTR2_ID]] MaxByteOffset 123
-; CHECK-SPIRV: 4 TypeInt [[CHAR_T:[0-9]+]] 8 0
-; CHECK-SPIRV: 4 TypePointer [[CHAR_PTR_T:[0-9]+]] 4 [[CHAR_T]]
-; CHECK-SPIRV: 3 FunctionParameter [[CHAR_PTR_T]] [[PTR_ID]]
-; CHECK-SPIRV: 3 FunctionParameter [[CHAR_PTR_T]] [[PTR2_ID]]
-
-target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir-unknown-unknown"
-
-; Function Attrs: nounwind
-define spir_kernel void @worker(i8 addrspace(3)* dereferenceable(12) %ptr) #0 {
-entry:
- %ptr.addr = alloca i8 addrspace(3)*, align 4
- store i8 addrspace(3)* %ptr, i8 addrspace(3)** %ptr.addr, align 4
- ret void
-}
-
-; Function Attrs: nounwind
-define spir_func void @not_a_kernel(i8 addrspace(3)* dereferenceable(123) %ptr2) #0 {
-entry:
- ret void
-}
-
-attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
-
-!opencl.enable.FP_CONTRACT = !{}
-!opencl.spir.version = !{!0}
-!opencl.ocl.version = !{!1}
-!opencl.used.extensions = !{!2}
-!opencl.used.optional.core.features = !{!2}
-!opencl.compiler.options = !{!2}
-!llvm.ident = !{!3}
-!spirv.Source = !{!4}
-!spirv.String = !{}
-
-!0 = !{i32 1, i32 2}
-!1 = !{i32 2, i32 2}
-!2 = !{}
-!3 = !{!"clang version 3.6.1 "}
-!4 = !{i32 4, i32 202000}
+; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -spirv-text -o %t.txt +; RUN: FileCheck < %t.txt %s --check-prefix=CHECK-SPIRV +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM + +; CHECK-LLVM: define spir_kernel void @worker(i8 addrspace(3)* dereferenceable(12) %ptr) +; CHECK-LLVM: define spir_func void @not_a_kernel(i8 addrspace(3)* dereferenceable(123) %ptr2) + +; CHECK-SPIRV: 3 Name [[PTR_ID:[0-9]+]] "ptr" +; CHECK-SPIRV: 4 Name [[PTR2_ID:[0-9]+]] "ptr2" +; CHECK-SPIRV: 4 Decorate [[PTR_ID]] MaxByteOffset 12 +; CHECK-SPIRV: 4 Decorate [[PTR2_ID]] MaxByteOffset 123 +; CHECK-SPIRV: 4 TypeInt [[CHAR_T:[0-9]+]] 8 0 +; CHECK-SPIRV: 4 TypePointer [[CHAR_PTR_T:[0-9]+]] 4 [[CHAR_T]] +; CHECK-SPIRV: 3 FunctionParameter [[CHAR_PTR_T]] [[PTR_ID]] +; CHECK-SPIRV: 3 FunctionParameter [[CHAR_PTR_T]] [[PTR2_ID]] + +target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir-unknown-unknown" + +; Function Attrs: nounwind +define spir_kernel void @worker(i8 addrspace(3)* dereferenceable(12) %ptr) #0 { +entry: + %ptr.addr = alloca i8 addrspace(3)*, align 4 + store i8 addrspace(3)* %ptr, i8 addrspace(3)** %ptr.addr, align 4 + ret void +} + +; Function Attrs: nounwind +define spir_func void @not_a_kernel(i8 addrspace(3)* dereferenceable(123) %ptr2) #0 { +entry: + ret void +} + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!opencl.enable.FP_CONTRACT = !{} +!opencl.spir.version = !{!0} +!opencl.ocl.version = !{!1} +!opencl.used.extensions = !{!2} +!opencl.used.optional.core.features = !{!2} +!opencl.compiler.options = !{!2} +!llvm.ident = !{!3} +!spirv.Source = !{!4} +!spirv.String = !{} + +!0 = !{i32 1, i32 2} +!1 = !{i32 2, i32 2} +!2 = !{} +!3 = !{!"clang version 3.6.1 "} +!4 = !{i32 4, i32 202000} diff --git a/test/SPIRV/transcoding/check_ro_qualifier.ll b/test/SPIRV/transcoding/check_ro_qualifier.ll index 8096e8c8..24a66976 100644 --- a/test/SPIRV/transcoding/check_ro_qualifier.ll +++ b/test/SPIRV/transcoding/check_ro_qualifier.ll @@ -1,61 +1,61 @@ -; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r -spirv-gen-image-type-acc-postfix %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
-
-; CHECK-LLVM: opencl.image2d_array_ro_t = type opaque
-; CHECK-LLVM: define spir_kernel void @sample_kernel(%opencl.image2d_array_ro_t addrspace(1)
-; CHECK-LLVM: call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)
-; CHECK-LLVM: call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)
-; CHECK-LLVM: declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)
-; CHECK-LLVM: declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)
-; CHECK-LLVM: !{{[0-9]+}} = !{void (%opencl.image2d_array_ro_t
-; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_type", !"image2d_array_ro_t"}
-; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_base_type", !"image2d_array_ro_t"}
-
-; ModuleID = 'out.ll'
-target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir64-unknown-unknown"
-
-%opencl.image2d_array_ro_t = type opaque
-
-; Function Attrs: nounwind
-define spir_kernel void @sample_kernel(%opencl.image2d_array_ro_t addrspace(1)* %input) #0 {
-entry:
- %call.tmp1 = call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)* %input)
- %call.tmp2 = shufflevector <2 x i32> %call.tmp1, <2 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
- %call.tmp3 = call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)* %input)
- %call.tmp4 = trunc i64 %call.tmp3 to i32
- %call.tmp5 = insertelement <3 x i32> %call.tmp2, i32 %call.tmp4, i32 2
- %call.old = extractelement <3 x i32> %call.tmp5, i32 0
- ret void
-}
-
-; Function Attrs: nounwind
-declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)*) #0
-
-; Function Attrs: nounwind
-declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)*) #0
-
-attributes #0 = { nounwind }
-
-!opencl.kernels = !{!0}
-!opencl.enable.FP_CONTRACT = !{}
-!spirv.Source = !{!6}
-!opencl.spir.version = !{!7}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!9}
-!spirv.Generator = !{!10}
-
-!0 = !{void (%opencl.image2d_array_ro_t addrspace(1)*)* @sample_kernel, !1, !2, !3, !4, !5}
-!1 = !{!"kernel_arg_addr_space", i32 1}
-!2 = !{!"kernel_arg_access_qual", !"read_only"}
-!3 = !{!"kernel_arg_type", !"image2d_array_ro_t"}
-!4 = !{!"kernel_arg_type_qual", !""}
-!5 = !{!"kernel_arg_base_type", !"image2d_array_ro_t"}
-!6 = !{i32 3, i32 102000}
-!7 = !{i32 1, i32 2}
-!8 = !{}
-!9 = !{!"cl_images"}
+; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r -spirv-gen-image-type-acc-postfix %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM + +; CHECK-LLVM: opencl.image2d_array_ro_t = type opaque +; CHECK-LLVM: define spir_kernel void @sample_kernel(%opencl.image2d_array_ro_t addrspace(1) +; CHECK-LLVM: call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1) +; CHECK-LLVM: call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1) +; CHECK-LLVM: declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1) +; CHECK-LLVM: declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1) +; CHECK-LLVM: !{{[0-9]+}} = !{void (%opencl.image2d_array_ro_t +; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_type", !"image2d_array_ro_t"} +; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_base_type", !"image2d_array_ro_t"} + +; ModuleID = 'out.ll' +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir64-unknown-unknown" + +%opencl.image2d_array_ro_t = type opaque + +; Function Attrs: nounwind +define spir_kernel void @sample_kernel(%opencl.image2d_array_ro_t addrspace(1)* %input) #0 { +entry: + %call.tmp1 = call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)* %input) + %call.tmp2 = shufflevector <2 x i32> %call.tmp1, <2 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> + %call.tmp3 = call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)* %input) + %call.tmp4 = trunc i64 %call.tmp3 to i32 + %call.tmp5 = insertelement <3 x i32> %call.tmp2, i32 %call.tmp4, i32 2 + %call.old = extractelement <3 x i32> %call.tmp5, i32 0 + ret void +} + +; Function Attrs: nounwind +declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)*) #0 + +; Function Attrs: nounwind +declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_ro_t(%opencl.image2d_array_ro_t addrspace(1)*) #0 + +attributes #0 = { nounwind } + +!opencl.kernels = !{!0} +!opencl.enable.FP_CONTRACT = !{} +!spirv.Source = !{!6} +!opencl.spir.version = !{!7} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!9} +!spirv.Generator = !{!10} + +!0 = !{void (%opencl.image2d_array_ro_t addrspace(1)*)* @sample_kernel, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space", i32 1} +!2 = !{!"kernel_arg_access_qual", !"read_only"} +!3 = !{!"kernel_arg_type", !"image2d_array_ro_t"} +!4 = !{!"kernel_arg_type_qual", !""} +!5 = !{!"kernel_arg_base_type", !"image2d_array_ro_t"} +!6 = !{i32 3, i32 102000} +!7 = !{i32 1, i32 2} +!8 = !{} +!9 = !{!"cl_images"} !10 = !{i16 6, i16 14}
\ No newline at end of file diff --git a/test/SPIRV/transcoding/check_wo_qualifier.ll b/test/SPIRV/transcoding/check_wo_qualifier.ll index 1f85d437..58b723f1 100644 --- a/test/SPIRV/transcoding/check_wo_qualifier.ll +++ b/test/SPIRV/transcoding/check_wo_qualifier.ll @@ -1,62 +1,62 @@ -; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-spirv %t.bc -o %t.spv
-; RUN: llvm-spirv -r -spirv-gen-image-type-acc-postfix %t.spv -o %t.rev.bc
-; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
-
-; CHECK-LLVM: opencl.image2d_array_wo_t = type opaque
-; CHECK-LLVM: define spir_kernel void @sample_kernel(%opencl.image2d_array_wo_t addrspace(1)
-; CHECK-LLVM: call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)
-; CHECK-LLVM: call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)
-; CHECK-LLVM: declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)
-; CHECK-LLVM: declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)
-; CHECK-LLVM: !{{[0-9]+}} = !{void (%opencl.image2d_array_wo_t
-; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_type", !"image2d_array_wo_t"}
-; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_base_type", !"image2d_array_wo_t"}
-
-
-; ModuleID = 'out.ll'
-target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
-target triple = "spir64-unknown-unknown"
-
-%opencl.image2d_array_wo_t = type opaque
-
-; Function Attrs: nounwind
-define spir_kernel void @sample_kernel(%opencl.image2d_array_wo_t addrspace(1)* %input) #0 {
-entry:
- %call.tmp1 = call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)* %input)
- %call.tmp2 = shufflevector <2 x i32> %call.tmp1, <2 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
- %call.tmp3 = call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)* %input)
- %call.tmp4 = trunc i64 %call.tmp3 to i32
- %call.tmp5 = insertelement <3 x i32> %call.tmp2, i32 %call.tmp4, i32 2
- %call.old = extractelement <3 x i32> %call.tmp5, i32 0
- ret void
-}
-
-; Function Attrs: nounwind
-declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)*) #0
-
-; Function Attrs: nounwind
-declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)*) #0
-
-attributes #0 = { nounwind }
-
-!opencl.kernels = !{!0}
-!opencl.enable.FP_CONTRACT = !{}
-!spirv.Source = !{!6}
-!opencl.spir.version = !{!7}
-!opencl.ocl.version = !{!7}
-!opencl.used.extensions = !{!8}
-!opencl.used.optional.core.features = !{!9}
-!spirv.Generator = !{!10}
-
-!0 = !{void (%opencl.image2d_array_wo_t addrspace(1)*)* @sample_kernel, !1, !2, !3, !4, !5}
-!1 = !{!"kernel_arg_addr_space", i32 1}
-!2 = !{!"kernel_arg_access_qual", !"write_only"}
-!3 = !{!"kernel_arg_type", !"image2d_array_wo_t"}
-!4 = !{!"kernel_arg_type_qual", !""}
-!5 = !{!"kernel_arg_base_type", !"image2d_array_wo_t"}
-!6 = !{i32 3, i32 102000}
-!7 = !{i32 1, i32 2}
-!8 = !{}
-!9 = !{!"cl_images"}
+; RUN: llvm-as %s -o %t.bc +; RUN: llvm-spirv %t.bc -o %t.spv +; RUN: llvm-spirv -r -spirv-gen-image-type-acc-postfix %t.spv -o %t.rev.bc +; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM + +; CHECK-LLVM: opencl.image2d_array_wo_t = type opaque +; CHECK-LLVM: define spir_kernel void @sample_kernel(%opencl.image2d_array_wo_t addrspace(1) +; CHECK-LLVM: call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1) +; CHECK-LLVM: call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1) +; CHECK-LLVM: declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1) +; CHECK-LLVM: declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1) +; CHECK-LLVM: !{{[0-9]+}} = !{void (%opencl.image2d_array_wo_t +; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_type", !"image2d_array_wo_t"} +; CHECK-LLVM: !{{[0-9]+}} = !{!"kernel_arg_base_type", !"image2d_array_wo_t"} + + +; ModuleID = 'out.ll' +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" +target triple = "spir64-unknown-unknown" + +%opencl.image2d_array_wo_t = type opaque + +; Function Attrs: nounwind +define spir_kernel void @sample_kernel(%opencl.image2d_array_wo_t addrspace(1)* %input) #0 { +entry: + %call.tmp1 = call spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)* %input) + %call.tmp2 = shufflevector <2 x i32> %call.tmp1, <2 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> + %call.tmp3 = call spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)* %input) + %call.tmp4 = trunc i64 %call.tmp3 to i32 + %call.tmp5 = insertelement <3 x i32> %call.tmp2, i32 %call.tmp4, i32 2 + %call.old = extractelement <3 x i32> %call.tmp5, i32 0 + ret void +} + +; Function Attrs: nounwind +declare spir_func <2 x i32> @_Z13get_image_dimPU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)*) #0 + +; Function Attrs: nounwind +declare spir_func i64 @_Z20get_image_array_sizePU3AS125opencl.image2d_array_wo_t(%opencl.image2d_array_wo_t addrspace(1)*) #0 + +attributes #0 = { nounwind } + +!opencl.kernels = !{!0} +!opencl.enable.FP_CONTRACT = !{} +!spirv.Source = !{!6} +!opencl.spir.version = !{!7} +!opencl.ocl.version = !{!7} +!opencl.used.extensions = !{!8} +!opencl.used.optional.core.features = !{!9} +!spirv.Generator = !{!10} + +!0 = !{void (%opencl.image2d_array_wo_t addrspace(1)*)* @sample_kernel, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space", i32 1} +!2 = !{!"kernel_arg_access_qual", !"write_only"} +!3 = !{!"kernel_arg_type", !"image2d_array_wo_t"} +!4 = !{!"kernel_arg_type_qual", !""} +!5 = !{!"kernel_arg_base_type", !"image2d_array_wo_t"} +!6 = !{i32 3, i32 102000} +!7 = !{i32 1, i32 2} +!8 = !{} +!9 = !{!"cl_images"} !10 = !{i16 6, i16 14}
\ No newline at end of file |