1*8468e674SAndrey Tretyakov; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV 2*8468e674SAndrey Tretyakov 3*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: OpStore %[[#]] %[[#]] Volatile Aligned 8 4*8468e674SAndrey Tretyakov; CHECK-SPIRV: OpStore %[[#]] %[[#]] Volatile|Aligned 8 5*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: %[[#]] = OpLoad %[[#]] %[[#]] Volatile Aligned 8 6*8468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpLoad %[[#]] %[[#]] Volatile|Aligned 8 7*8468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpLoad %[[#]] %[[#]] Aligned 4 8*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: %[[#]] = OpLoad %[[#]] %[[#]] Volatile Aligned 8 9*8468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpLoad %[[#]] %[[#]] Volatile|Aligned 8 10*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: %[[#]] = OpLoad %[[#]] %[[#]] Volatile Aligned 0 11*8468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpLoad %[[#]] %[[#]] Volatile|Aligned 8 12*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: %[[#]] = OpLoad %[[#]] %[[#]] Volatile Aligned 8 13*8468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpLoad %[[#]] %[[#]] Volatile|Aligned|Nontemporal 8 14*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: OpStore %[[#]] %[[#]] Aligned 4 15*8468e674SAndrey Tretyakov; CHECK-SPIRV: OpStore %[[#]] %[[#]] Aligned|Nontemporal 4 16*8468e674SAndrey Tretyakov; CHECK-SPIRV-NOT: OpStore %[[#]] %[[#]] Aligned 0 17*8468e674SAndrey Tretyakov; CHECK-SPIRV: OpStore %[[#]] %[[#]] 18*8468e674SAndrey Tretyakov 19*8468e674SAndrey Tretyakovdefine spir_kernel void @test_load_store(i32 addrspace(1)* %destMemory, i32 addrspace(1)* %oldValues, i32 %newValue) { 20*8468e674SAndrey Tretyakoventry: 21*8468e674SAndrey Tretyakov %ptr = alloca i32 addrspace(4)*, align 8 22*8468e674SAndrey Tretyakov %0 = addrspacecast i32 addrspace(1)* %oldValues to i32 addrspace(4)* 23*8468e674SAndrey Tretyakov store volatile i32 addrspace(4)* %0, i32 addrspace(4)** %ptr, align 8 24*8468e674SAndrey Tretyakov %1 = load volatile i32 addrspace(4)*, i32 addrspace(4)** %ptr, align 8 25*8468e674SAndrey Tretyakov %2 = load i32, i32 addrspace(4)* %1, align 4 26*8468e674SAndrey Tretyakov %call = call spir_func i32 @_Z14atomic_cmpxchgPVU3AS1iii(i32 addrspace(1)* %destMemory, i32 %2, i32 %newValue) 27*8468e674SAndrey Tretyakov %3 = load volatile i32 addrspace(4)*, i32 addrspace(4)** %ptr, align 8 28*8468e674SAndrey Tretyakov %4 = load volatile i32 addrspace(4)*, i32 addrspace(4)** %ptr 29*8468e674SAndrey Tretyakov %5 = load volatile i32 addrspace(4)*, i32 addrspace(4)** %ptr, align 8, !nontemporal !9 30*8468e674SAndrey Tretyakov %arrayidx = getelementptr inbounds i32, i32 addrspace(4)* %3, i64 0 31*8468e674SAndrey Tretyakov store i32 %call, i32 addrspace(4)* %arrayidx, align 4, !nontemporal !9 32*8468e674SAndrey Tretyakov store i32 addrspace(4)* %5, i32 addrspace(4)** %ptr 33*8468e674SAndrey Tretyakov ret void 34*8468e674SAndrey Tretyakov} 35*8468e674SAndrey Tretyakov 36*8468e674SAndrey Tretyakovdeclare spir_func i32 @_Z14atomic_cmpxchgPVU3AS1iii(i32 addrspace(1)*, i32, i32) 37*8468e674SAndrey Tretyakov 38*8468e674SAndrey Tretyakov!9 = !{i32 1} 39