@@ -200,63 +200,6 @@ def CIR_AnyIntOrFloat: AnyTypeOf<[CIR_AnyFloat, CIR_IntType]>;
200
200
// PointerType
201
201
//===----------------------------------------------------------------------===//
202
202
203
- def AS_Default : I32EnumAttrCase<"Default", 1>;
204
- def AS_OpenCLGlobal : I32EnumAttrCase<"opencl_global", 2>;
205
- def AS_OpenCLLocal : I32EnumAttrCase<"opencl_local", 3>;
206
- def AS_OpenCLConstant : I32EnumAttrCase<"opencl_constant", 4>;
207
- def AS_OpenCLPrivate : I32EnumAttrCase<"opencl_private", 5>;
208
- def AS_OpenCLGeneric : I32EnumAttrCase<"opencl_generic", 6>;
209
- def AS_OpenCLGlobalDevice : I32EnumAttrCase<"opencl_global_device", 7>;
210
- def AS_OpenCLGlobalHost : I32EnumAttrCase<"opencl_global_host", 8>;
211
- def AS_CUDADevice : I32EnumAttrCase<"cuda_device", 9>;
212
- def AS_CUDAConstant : I32EnumAttrCase<"cuda_constant", 10>;
213
- def AS_CUDAShared : I32EnumAttrCase<"cuda_shared", 11>;
214
- def AS_SYCLGlobal : I32EnumAttrCase<"sycl_global", 12>;
215
- def AS_SYCLGlobalDevice : I32EnumAttrCase<"sycl_global_device", 13>;
216
- def AS_SYCLGlobalHost : I32EnumAttrCase<"sycl_global_host", 14>;
217
- def AS_SYCLLocal : I32EnumAttrCase<"sycl_local", 15>;
218
- def AS_SYCLPrivate : I32EnumAttrCase<"sycl_private", 16>;
219
- def AS_Ptr32SPtr : I32EnumAttrCase<"ptr32_sptr", 17>;
220
- def AS_Ptr32UPtr : I32EnumAttrCase<"ptr32_uptr", 18>;
221
- def AS_Ptr64 : I32EnumAttrCase<"ptr64", 19>;
222
- def AS_HLSLGroupShared : I32EnumAttrCase<"hlsl_groupshared", 20>;
223
- def AS_WasmFuncref : I32EnumAttrCase<"wasm_funcref", 21>;
224
- def AS_Target : I32EnumAttrCase<"target", 22>;
225
-
226
- // This enum must be sync with `clang::LangAS`
227
- def LangAddrSpace : I32EnumAttr<
228
- "LangAddrSpace",
229
- "language address space",
230
- [
231
- AS_Default, AS_OpenCLGlobal, AS_OpenCLLocal, AS_OpenCLConstant,
232
- AS_OpenCLPrivate, AS_OpenCLGeneric, AS_OpenCLGlobalDevice,
233
- AS_OpenCLGlobalHost, AS_CUDADevice, AS_CUDAConstant, AS_CUDAShared,
234
- AS_SYCLGlobal, AS_SYCLGlobalDevice, AS_SYCLGlobalHost, AS_SYCLLocal,
235
- AS_SYCLPrivate, AS_Ptr32SPtr, AS_Ptr32UPtr, AS_Ptr64, AS_HLSLGroupShared,
236
- AS_WasmFuncref, AS_Target
237
- ]> {
238
- let cppNamespace = "::mlir::cir";
239
-
240
- let genSpecializedAttr = 0;
241
- }
242
-
243
- // Shorthands for long types
244
- def LangAddrSpaceParam : DefaultValuedParameter<
245
- "::mlir::cir::LangAddrSpace",
246
- "::mlir::cir::LangAddrSpace::Default"
247
- >;
248
- def LangAddrSpaceArg : CArg<
249
- "::mlir::cir::LangAddrSpace",
250
- "::mlir::cir::LangAddrSpace::Default"
251
- >;
252
- def TargetAddrSpaceParam : OptionalParameter<
253
- "std::optional<unsigned>"
254
- >;
255
- def TargetAddrSpaceArg : CArg<
256
- "std::optional<unsigned>",
257
- "std::nullopt"
258
- >;
259
-
260
203
def CIR_PointerType : CIR_Type<"Pointer", "ptr",
261
204
[DeclareTypeInterfaceMethods<DataLayoutTypeInterface>]> {
262
205
@@ -272,82 +215,36 @@ def CIR_PointerType : CIR_Type<"Pointer", "ptr",
272
215
273
216
let parameters = (ins
274
217
"mlir::Type":$pointee,
275
- LangAddrSpaceParam:$addrSpaceKind,
276
- TargetAddrSpaceParam:$targetAddrSpaceValue
218
+ OptionalParameter<"mlir::Attribute">:$addrSpace
277
219
);
278
220
221
+ let assemblyFormat = [{
222
+ `<` $pointee ( `,` `addrspace` `(`
223
+ custom<PointerAddrSpace>($addrSpace)^
224
+ `)` )? `>`
225
+ }];
226
+
227
+ let genVerifyDecl = 1;
228
+
279
229
let skipDefaultBuilders = 1;
280
230
281
231
let builders = [
282
232
TypeBuilderWithInferredContext<(ins
283
233
"mlir::Type":$pointee,
284
- LangAddrSpaceArg:$addrSpaceKind,
285
- TargetAddrSpaceArg:$targetAddrSpaceValue), [{
286
- return $_get(
287
- pointee.getContext(), pointee, addrSpaceKind, targetAddrSpaceValue);
234
+ CArg<"mlir::Attribute", "{}">:$addrSpace), [{
235
+ return $_get(pointee.getContext(), pointee, addrSpace);
288
236
}]>,
289
237
TypeBuilder<(ins
290
238
"mlir::Type":$pointee,
291
- LangAddrSpaceArg:$addrSpaceKind,
292
- TargetAddrSpaceArg:$targetAddrSpaceValue), [{
293
- return $_get($_ctxt, pointee, addrSpaceKind, targetAddrSpaceValue);
239
+ CArg<"mlir::Attribute", "{}">:$addrSpace), [{
240
+ return $_get($_ctxt, pointee, addrSpace);
294
241
}]>
295
242
];
296
243
297
- let assemblyFormat = [{
298
- `<` $pointee ( `,` `addrspace` `(`
299
- $addrSpaceKind^
300
- (`<` $targetAddrSpaceValue^ `>`)?
301
- `)` )? `>`
302
- }];
303
-
304
- let genVerifyDecl = 1;
305
-
306
- // AS_Target should be excluded in codegen
307
- list<I32EnumAttrCase> langASCases =
308
- LangAddrSpace.enumerants[0...!sub(!size(LangAddrSpace.enumerants), 2)];
309
-
310
244
let extraClassDeclaration = [{
311
245
bool isVoidPtr() const {
312
246
return getPointee().isa<mlir::cir::VoidType>();
313
247
}
314
-
315
- static LangAddrSpace getCIRASKindFromLangAS(clang::LangAS langAS) {
316
- switch (langAS) {
317
- }]
318
- #
319
- !interleave(
320
- !foreach(case, langASCases, "case clang::LangAS::"#case.symbol
321
- # ": return LangAddrSpace::"#case.symbol # ";" ),
322
- "\n"
323
- )
324
- #
325
- [{
326
- default:
327
- return LangAddrSpace::target;
328
- }
329
- }
330
-
331
- clang::LangAS getLangAS() {
332
- auto kind = getAddrSpaceKind();
333
- auto targetValue = getTargetAddrSpaceValue();
334
- switch (kind) {
335
- }]
336
- #
337
- !interleave(
338
- !foreach(case, langASCases, "case LangAddrSpace::"#case.symbol
339
- # ": return clang::LangAS::"#case.symbol # ";" ),
340
- "\n"
341
- )
342
- #
343
- [{
344
- default: {
345
- assert(kind == LangAddrSpace::target &&
346
- targetValue.has_value() && "unexpected address space kind");
347
- return clang::getLangASFromTargetAS(*targetValue);
348
- }
349
- }
350
- }
351
248
}];
352
249
}
353
250
0 commit comments