@@ -72,3 +72,60 @@ gpu.module @kernels {
72
72
}
73
73
74
74
}
75
+
76
+ // -----
77
+
78
+ module attributes {
79
+ gpu.container_module ,
80
+ spirv.target_env = #spirv.target_env <#spirv.vce <v1.4 , [Shader , GroupNonUniformShuffle , GroupNonUniformRotateKHR ], []>,
81
+ #spirv.resource_limits <subgroup_size = 16 >>
82
+ } {
83
+
84
+ gpu.module @kernels {
85
+ // CHECK-LABEL: spirv.func @shuffle_down()
86
+ gpu.func @shuffle_down () kernel
87
+ attributes {spirv.entry_point_abi = #spirv.entry_point_abi <workgroup_size = [16 , 1 , 1 ]>} {
88
+ %offset = arith.constant 4 : i32
89
+ %width = arith.constant 16 : i32
90
+ %val = arith.constant 42.0 : f32
91
+
92
+ // CHECK: %[[OFFSET:.+]] = spirv.Constant 4 : i32
93
+ // CHECK: %[[WIDTH:.+]] = spirv.Constant 16 : i32
94
+ // CHECK: %[[VAL:.+]] = spirv.Constant 4.200000e+01 : f32
95
+ // CHECK: %{{.+}} = spirv.Constant true
96
+ // CHECK: %{{.+}} = spirv.GroupNonUniformRotateKHR <Subgroup>, %[[VAL]], %[[OFFSET]], cluster_size(%[[WIDTH]]) : f32, i32, i32 -> f32
97
+ %result , %valid = gpu.shuffle down %val , %offset , %width : f32
98
+ gpu.return
99
+ }
100
+ }
101
+
102
+ }
103
+
104
+ // -----
105
+
106
+ module attributes {
107
+ gpu.container_module ,
108
+ spirv.target_env = #spirv.target_env <#spirv.vce <v1.4 , [Shader , GroupNonUniformShuffle , GroupNonUniformRotateKHR ], []>,
109
+ #spirv.resource_limits <subgroup_size = 16 >>
110
+ } {
111
+
112
+ gpu.module @kernels {
113
+ // CHECK-LABEL: spirv.func @shuffle_up()
114
+ gpu.func @shuffle_up () kernel
115
+ attributes {spirv.entry_point_abi = #spirv.entry_point_abi <workgroup_size = [16 , 1 , 1 ]>} {
116
+ %offset = arith.constant 4 : i32
117
+ %width = arith.constant 16 : i32
118
+ %val = arith.constant 42.0 : f32
119
+
120
+ // CHECK: %[[OFFSET:.+]] = spirv.Constant 4 : i32
121
+ // CHECK: %[[WIDTH:.+]] = spirv.Constant 16 : i32
122
+ // CHECK: %[[VAL:.+]] = spirv.Constant 4.200000e+01 : f32
123
+ // CHECK: %{{.+}} = spirv.Constant true
124
+ // CHECK: %[[DOWN_OFFSET:.+]] = spirv.Constant 12 : i32
125
+ // CHECK: %{{.+}} = spirv.GroupNonUniformRotateKHR <Subgroup>, %[[VAL]], %[[DOWN_OFFSET]], cluster_size(%[[WIDTH]]) : f32, i32, i32 -> f32
126
+ %result , %valid = gpu.shuffle up %val , %offset , %width : f32
127
+ gpu.return
128
+ }
129
+ }
130
+
131
+ }
0 commit comments