@@ -79,8 +79,141 @@ void main() {
79
79
// CHECK-NEXT: [[value:%[0-9]+]] = OpLoad %double %value
80
80
// CHECK-NEXT: [[resultVec:%[0-9]+]] = OpBitcast %v2uint [[value]]
81
81
// CHECK-NEXT: [[resultVec0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec]] 0
82
- // CHECK-NEXT: OpStore %lowbits [[resultVec0]]
83
82
// CHECK-NEXT: [[resultVec1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec]] 1
83
+ // CHECK-NEXT: OpStore %lowbits [[resultVec0]]
84
84
// CHECK-NEXT: OpStore %highbits [[resultVec1]]
85
85
asuint (value, lowbits, highbits);
86
+
87
+ double3 value3;
88
+ uint3 lowbits3;
89
+ uint3 highbits3;
90
+ // CHECK-NEXT: [[value:%[0-9]+]] = OpLoad %v3double %value3
91
+ // CHECK-NEXT: [[value0:%[0-9]+]] = OpCompositeExtract %double [[value]] 0
92
+ // CHECK-NEXT: [[resultVec0:%[0-9]+]] = OpBitcast %v2uint [[value0]]
93
+ // CHECK-NEXT: [[low0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 0
94
+ // CHECK-NEXT: [[high0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 1
95
+ // CHECK-NEXT: [[value1:%[0-9]+]] = OpCompositeExtract %double [[value]] 1
96
+ // CHECK-NEXT: [[resultVec1:%[0-9]+]] = OpBitcast %v2uint [[value1]]
97
+ // CHECK-NEXT: [[low1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 0
98
+ // CHECK-NEXT: [[high1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 1
99
+ // CHECK-NEXT: [[value2:%[0-9]+]] = OpCompositeExtract %double [[value]] 2
100
+ // CHECK-NEXT: [[resultVec2:%[0-9]+]] = OpBitcast %v2uint [[value2]]
101
+ // CHECK-NEXT: [[low2:%[0-9]+]] = OpCompositeExtract %uint [[resultVec2]] 0
102
+ // CHECK-NEXT: [[high2:%[0-9]+]] = OpCompositeExtract %uint [[resultVec2]] 1
103
+ // CHECK-NEXT: [[low:%[0-9]+]] = OpCompositeConstruct %v3uint [[low0]] [[low1]] [[low2]]
104
+ // CHECK-NEXT: [[high:%[0-9]+]] = OpCompositeConstruct %v3uint [[high0]] [[high1]] [[high2]]
105
+ // CHECK-NEXT: OpStore %lowbits3 [[low]]
106
+ // CHECK-NEXT: OpStore %highbits3 [[high]]
107
+ asuint (value3, lowbits3, highbits3);
108
+
109
+ double2x2 value2x2;
110
+ uint2x2 lowbits2x2;
111
+ uint2x2 highbits2x2;
112
+ // CHECK-NEXT: [[value:%[0-9]+]] = OpLoad %mat2v2double %value2x2
113
+ // CHECK-NEXT: [[row0:%[0-9]+]] = OpCompositeExtract %v2double [[value]] 0
114
+ // CHECK-NEXT: [[value0:%[0-9]+]] = OpCompositeExtract %double [[row0]] 0
115
+ // CHECK-NEXT: [[resultVec0:%[0-9]+]] = OpBitcast %v2uint [[value0]]
116
+ // CHECK-NEXT: [[low0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 0
117
+ // CHECK-NEXT: [[high0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 1
118
+ // CHECK-NEXT: [[value1:%[0-9]+]] = OpCompositeExtract %double [[row0]] 1
119
+ // CHECK-NEXT: [[resultVec1:%[0-9]+]] = OpBitcast %v2uint [[value1]]
120
+ // CHECK-NEXT: [[low1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 0
121
+ // CHECK-NEXT: [[high1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 1
122
+ // CHECK-NEXT: [[lowRow0:%[0-9]+]] = OpCompositeConstruct %v2uint [[low0]] [[low1]]
123
+ // CHECK-NEXT: [[highRow0:%[0-9]+]] = OpCompositeConstruct %v2uint [[high0]] [[high1]]
124
+ // CHECK-NEXT: [[row1:%[0-9]+]] = OpCompositeExtract %v2double [[value]] 1
125
+ // CHECK-NEXT: [[value2:%[0-9]+]] = OpCompositeExtract %double [[row1]] 0
126
+ // CHECK-NEXT: [[resultVec2:%[0-9]+]] = OpBitcast %v2uint [[value2]]
127
+ // CHECK-NEXT: [[low2:%[0-9]+]] = OpCompositeExtract %uint [[resultVec2]] 0
128
+ // CHECK-NEXT: [[high2:%[0-9]+]] = OpCompositeExtract %uint [[resultVec2]] 1
129
+ // CHECK-NEXT: [[value3:%[0-9]+]] = OpCompositeExtract %double [[row1]] 1
130
+ // CHECK-NEXT: [[resultVec3:%[0-9]+]] = OpBitcast %v2uint [[value3]]
131
+ // CHECK-NEXT: [[low3:%[0-9]+]] = OpCompositeExtract %uint [[resultVec3]] 0
132
+ // CHECK-NEXT: [[high3:%[0-9]+]] = OpCompositeExtract %uint [[resultVec3]] 1
133
+ // CHECK-NEXT: [[lowRow1:%[0-9]+]] = OpCompositeConstruct %v2uint [[low2]] [[low3]]
134
+ // CHECK-NEXT: [[highRow1:%[0-9]+]] = OpCompositeConstruct %v2uint [[high2]] [[high3]]
135
+ // CHECK-NEXT: [[low:%[0-9]+]] = OpCompositeConstruct %_arr_v2uint_uint_2 [[lowRow0]] [[lowRow1]]
136
+ // CHECK-NEXT: [[high:%[0-9]+]] = OpCompositeConstruct %_arr_v2uint_uint_2 [[highRow0]] [[highRow1]]
137
+ // CHECK-NEXT: OpStore %lowbits2x2 [[low]]
138
+ // CHECK-NEXT: OpStore %highbits2x2 [[high]]
139
+ asuint (value2x2, lowbits2x2, highbits2x2);
140
+
141
+ double3x2 value3x2;
142
+ uint3x2 lowbits3x2;
143
+ uint3x2 highbits3x2;
144
+ // CHECK-NEXT: [[value:%[0-9]+]] = OpLoad %mat3v2double %value3x2
145
+ // CHECK-NEXT: [[row0:%[0-9]+]] = OpCompositeExtract %v2double [[value]] 0
146
+ // CHECK-NEXT: [[value0:%[0-9]+]] = OpCompositeExtract %double [[row0]] 0
147
+ // CHECK-NEXT: [[resultVec0:%[0-9]+]] = OpBitcast %v2uint [[value0]]
148
+ // CHECK-NEXT: [[low0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 0
149
+ // CHECK-NEXT: [[high0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 1
150
+ // CHECK-NEXT: [[value1:%[0-9]+]] = OpCompositeExtract %double [[row0]] 1
151
+ // CHECK-NEXT: [[resultVec1:%[0-9]+]] = OpBitcast %v2uint [[value1]]
152
+ // CHECK-NEXT: [[low1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 0
153
+ // CHECK-NEXT: [[high1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 1
154
+ // CHECK-NEXT: [[lowRow0:%[0-9]+]] = OpCompositeConstruct %v2uint [[low0]] [[low1]]
155
+ // CHECK-NEXT: [[highRow0:%[0-9]+]] = OpCompositeConstruct %v2uint [[high0]] [[high1]]
156
+ // CHECK-NEXT: [[row1:%[0-9]+]] = OpCompositeExtract %v2double [[value]] 1
157
+ // CHECK-NEXT: [[value2:%[0-9]+]] = OpCompositeExtract %double [[row1]] 0
158
+ // CHECK-NEXT: [[resultVec2:%[0-9]+]] = OpBitcast %v2uint [[value2]]
159
+ // CHECK-NEXT: [[low2:%[0-9]+]] = OpCompositeExtract %uint [[resultVec2]] 0
160
+ // CHECK-NEXT: [[high2:%[0-9]+]] = OpCompositeExtract %uint [[resultVec2]] 1
161
+ // CHECK-NEXT: [[value3:%[0-9]+]] = OpCompositeExtract %double [[row1]] 1
162
+ // CHECK-NEXT: [[resultVec3:%[0-9]+]] = OpBitcast %v2uint [[value3]]
163
+ // CHECK-NEXT: [[low3:%[0-9]+]] = OpCompositeExtract %uint [[resultVec3]] 0
164
+ // CHECK-NEXT: [[high3:%[0-9]+]] = OpCompositeExtract %uint [[resultVec3]] 1
165
+ // CHECK-NEXT: [[lowRow1:%[0-9]+]] = OpCompositeConstruct %v2uint [[low2]] [[low3]]
166
+ // CHECK-NEXT: [[highRow1:%[0-9]+]] = OpCompositeConstruct %v2uint [[high2]] [[high3]]
167
+ // CHECK-NEXT: [[row2:%[0-9]+]] = OpCompositeExtract %v2double [[value]] 2
168
+ // CHECK-NEXT: [[value4:%[0-9]+]] = OpCompositeExtract %double [[row2]] 0
169
+ // CHECK-NEXT: [[resultVec4:%[0-9]+]] = OpBitcast %v2uint [[value4]]
170
+ // CHECK-NEXT: [[low4:%[0-9]+]] = OpCompositeExtract %uint [[resultVec4]] 0
171
+ // CHECK-NEXT: [[high4:%[0-9]+]] = OpCompositeExtract %uint [[resultVec4]] 1
172
+ // CHECK-NEXT: [[value5:%[0-9]+]] = OpCompositeExtract %double [[row2]] 1
173
+ // CHECK-NEXT: [[resultVec5:%[0-9]+]] = OpBitcast %v2uint [[value5]]
174
+ // CHECK-NEXT: [[low5:%[0-9]+]] = OpCompositeExtract %uint [[resultVec5]] 0
175
+ // CHECK-NEXT: [[high5:%[0-9]+]] = OpCompositeExtract %uint [[resultVec5]] 1
176
+ // CHECK-NEXT: [[lowRow2:%[0-9]+]] = OpCompositeConstruct %v2uint [[low4]] [[low5]]
177
+ // CHECK-NEXT: [[highRow2:%[0-9]+]] = OpCompositeConstruct %v2uint [[high4]] [[high5]]
178
+ // CHECK-NEXT: [[low:%[0-9]+]] = OpCompositeConstruct %_arr_v2uint_uint_3 [[lowRow0]] [[lowRow1]] [[lowRow2]]
179
+ // CHECK-NEXT: [[high:%[0-9]+]] = OpCompositeConstruct %_arr_v2uint_uint_3 [[highRow0]] [[highRow1]] [[highRow2]]
180
+ // CHECK-NEXT: OpStore %lowbits3x2 [[low]]
181
+ // CHECK-NEXT: OpStore %highbits3x2 [[high]]
182
+ asuint (value3x2, lowbits3x2, highbits3x2);
183
+
184
+ double2x1 value2x1;
185
+ uint2x1 lowbits2x1;
186
+ uint2x1 highbits2x1;
187
+ // CHECK-NEXT: [[value:%[0-9]+]] = OpLoad %v2double %value2x1
188
+ // CHECK-NEXT: [[value0:%[0-9]+]] = OpCompositeExtract %double [[value]] 0
189
+ // CHECK-NEXT: [[resultVec0:%[0-9]+]] = OpBitcast %v2uint [[value0]]
190
+ // CHECK-NEXT: [[low0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 0
191
+ // CHECK-NEXT: [[high0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 1
192
+ // CHECK-NEXT: [[value1:%[0-9]+]] = OpCompositeExtract %double [[value]] 1
193
+ // CHECK-NEXT: [[resultVec1:%[0-9]+]] = OpBitcast %v2uint [[value1]]
194
+ // CHECK-NEXT: [[low1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 0
195
+ // CHECK-NEXT: [[high1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 1
196
+ // CHECK-NEXT: [[low:%[0-9]+]] = OpCompositeConstruct %v2uint [[low0]] [[low1]]
197
+ // CHECK-NEXT: [[high:%[0-9]+]] = OpCompositeConstruct %v2uint [[high0]] [[high1]]
198
+ // CHECK-NEXT: OpStore %lowbits2x1 [[low]]
199
+ // CHECK-NEXT: OpStore %highbits2x1 [[high]]
200
+ asuint (value2x1, lowbits2x1, highbits2x1);
201
+
202
+ double1x2 value1x2;
203
+ uint1x2 lowbits1x2;
204
+ uint1x2 highbits1x2;
205
+ // CHECK-NEXT: [[value:%[0-9]+]] = OpLoad %v2double %value1x2
206
+ // CHECK-NEXT: [[value0:%[0-9]+]] = OpCompositeExtract %double [[value]] 0
207
+ // CHECK-NEXT: [[resultVec0:%[0-9]+]] = OpBitcast %v2uint [[value0]]
208
+ // CHECK-NEXT: [[low0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 0
209
+ // CHECK-NEXT: [[high0:%[0-9]+]] = OpCompositeExtract %uint [[resultVec0]] 1
210
+ // CHECK-NEXT: [[value1:%[0-9]+]] = OpCompositeExtract %double [[value]] 1
211
+ // CHECK-NEXT: [[resultVec1:%[0-9]+]] = OpBitcast %v2uint [[value1]]
212
+ // CHECK-NEXT: [[low1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 0
213
+ // CHECK-NEXT: [[high1:%[0-9]+]] = OpCompositeExtract %uint [[resultVec1]] 1
214
+ // CHECK-NEXT: [[low:%[0-9]+]] = OpCompositeConstruct %v2uint [[low0]] [[low1]]
215
+ // CHECK-NEXT: [[high:%[0-9]+]] = OpCompositeConstruct %v2uint [[high0]] [[high1]]
216
+ // CHECK-NEXT: OpStore %lowbits1x2 [[low]]
217
+ // CHECK-NEXT: OpStore %highbits1x2 [[high]]
218
+ asuint (value1x2, lowbits1x2, highbits1x2);
86
219
}
0 commit comments