blob: 67ec10e24c5e974541fe6e98210cdd412f66537e [file] [edit]
; Verify that atomic load/store of vectors correctly fail to select.
; RUN: split-file %s %t
; RUN: not llc -O0 -mtriple=spirv64-- %t/load-vector.ll -o /dev/null 2>&1 | FileCheck --check-prefix=FAIL-LOAD-VEC %s
; RUN: not llc -O0 -mtriple=spirv64-- %t/store-vector.ll -o /dev/null 2>&1 | FileCheck --check-prefix=FAIL-STORE-VEC %s
; RUN: not llc -O0 -mtriple=spirv %t/store-ptr-vulkan.ll -o /dev/null 2>&1 | FileCheck --check-prefix=FAIL-STORE-PTR %s
; RUN: not llc -O0 -mtriple=spirv %t/load-ptr-vulkan.ll -o /dev/null 2>&1 | FileCheck --check-prefix=FAIL-LOAD-PTR %s
; FAIL-LOAD-VEC: error:{{.*}}atomic load is only allowed for integer, floating point or pointer types
; FAIL-STORE-VEC: error:{{.*}}atomic store is only allowed for integer or floating point types
; FAIL-STORE-PTR: error:{{.*}}atomic store is only allowed for pointer types for physical addressing model
; FAIL-LOAD-PTR: error:{{.*}}atomic load is only allowed for pointer types for physical addressing model
;--- load-vector.ll
define <2 x i32> @load_vector_acquire(ptr addrspace(1) %ptr) {
%val = load atomic <2 x i32>, ptr addrspace(1) %ptr acquire, align 8
ret <2 x i32> %val
}
;--- store-vector.ll
define void @store_vector_release(ptr addrspace(1) %ptr, <2 x i32> %val) {
store atomic <2 x i32> %val, ptr addrspace(1) %ptr release, align 8
ret void
}
;--- store-ptr-vulkan.ll
define void @store_ptr_release(ptr addrspace(1) %ptr, ptr addrspace(1) %val) {
store atomic ptr addrspace(1) %val, ptr addrspace(1) %ptr monotonic, align 8
ret void
}
;--- load-ptr-vulkan.ll
define ptr addrspace(1) @load_ptr_release(ptr addrspace(1) %ptr) {
%val = load atomic ptr addrspace(1), ptr addrspace(1) %ptr monotonic, align 8
ret ptr addrspace(1) %val
}