@@ -100,6 +100,21 @@ func.func @load_aligned(%src: memref<4xi1, #spirv.storage_class<StorageBuffer>>,
100100 return %0: i1
101101}
102102
103+ // CHECK-LABEL: func @load_aligned_nontemporal
104+ // CHECK-SAME: (%[[SRC:.+]]: memref<4xi1, #spirv.storage_class<StorageBuffer>>, %[[IDX:.+]]: index)
105+ func.func @load_aligned_nontemporal (%src: memref <4 xi1 , #spirv.storage_class <StorageBuffer >>, %i : index ) -> i1 {
106+ // CHECK-DAG: %[[SRC_CAST:.+]] = builtin.unrealized_conversion_cast %[[SRC]] : memref<4xi1, #spirv.storage_class<StorageBuffer>> to !spirv.ptr<!spirv.struct<(!spirv.array<4 x i8, stride=1> [0])>, StorageBuffer>
107+ // CHECK-DAG: %[[IDX_CAST:.+]] = builtin.unrealized_conversion_cast %[[IDX]]
108+ // CHECK: %[[ZERO:.*]] = spirv.Constant 0 : i32
109+ // CHECK: %[[ADDR:.+]] = spirv.AccessChain %[[SRC_CAST]][%[[ZERO]], %[[IDX_CAST]]]
110+ // CHECK: %[[VAL:.+]] = spirv.Load "StorageBuffer" %[[ADDR]] ["Aligned|Nontemporal", 32] : i8
111+ // CHECK: %[[ZERO_I8:.+]] = spirv.Constant 0 : i8
112+ // CHECK: %[[BOOL:.+]] = spirv.INotEqual %[[VAL]], %[[ZERO_I8]] : i8
113+ %0 = memref.load %src [%i ] { alignment = 32 , nontemporal = true } : memref <4 xi1 , #spirv.storage_class <StorageBuffer >>
114+ // CHECK: return %[[BOOL]]
115+ return %0: i1
116+ }
117+
103118// CHECK-LABEL: func @load_aligned_psb
104119// CHECK-SAME: (%[[SRC:.+]]: memref<4xi1, #spirv.storage_class<PhysicalStorageBuffer>>, %[[IDX:.+]]: index)
105120func.func @load_aligned_psb (%src: memref <4 xi1 , #spirv.storage_class <PhysicalStorageBuffer >>, %i : index ) -> i1 {
0 commit comments