clang 24.0.0git
CIRGenBuiltinAMDGPU.cpp
Go to the documentation of this file.
1//===---- CIRGenBuiltinAMDGPU.cpp - Emit CIR for AMDGPU builtins ----------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This contains code to emit AMDGPU Builtin calls.
10//
11//===----------------------------------------------------------------------===//
12
13#include "CIRGenFunction.h"
14
15#include "mlir/IR/Value.h"
17#include "llvm/Support/AMDGPUAddrSpace.h"
18#include "llvm/Support/ErrorHandling.h"
19
20using namespace clang;
21using namespace clang::CIRGen;
22using namespace cir;
23
24// Emit the `amdgcn.dispatch.ptr` intrinsic, address-space-casting the
25// result to match \p e's return type when needed.
26// If \p e is null, returns the raw AS-4 pointer.
27static mlir::Value emitAMDGPUDispatchPtr(CIRGenFunction &cgf,
28 const CallExpr *e = nullptr) {
29 CIRGenBuilderTy &builder = cgf.getBuilder();
30 mlir::Location loc =
31 e ? cgf.getLoc(e->getExprLoc()) : builder.getUnknownLoc();
32 // The intrinsic always returns a pointer in the constant AS.
33 mlir::Type retTy = cir::PointerType::get(
34 cir::VoidType::get(builder.getContext()),
35 cir::TargetAddressSpaceAttr::get(builder.getContext(),
36 llvm::AMDGPUAS::CONSTANT_ADDRESS));
37 mlir::Value call = builder.emitIntrinsicCallOp(loc, "amdgcn.dispatch.ptr",
38 retTy, mlir::ValueRange{});
39 if (!e)
40 return call;
41 // Only cast when the caller-visible AS differs from the intrinsic's AS;
42 auto expectedPtrTy =
43 mlir::cast<cir::PointerType>(cgf.convertType(e->getType()));
44 auto callPtrTy = mlir::cast<cir::PointerType>(call.getType());
45 if (expectedPtrTy.getAddrSpace() == callPtrTy.getAddrSpace())
46 return call;
47 return builder.createAddrSpaceCast(loc, call, expectedPtrTy);
48}
49
51 CIRGenFunction &cgf, const CallExpr *e, llvm::StringRef intrinsicName,
52 llvm::StringRef constrainedIntrinsicName) {
53 mlir::Value src0 = cgf.emitScalarExpr(e->getArg(0));
54 mlir::Value src1 = cgf.emitScalarExpr(e->getArg(1));
55 mlir::Location loc = cgf.getLoc(e->getExprLoc());
56
57 CIRGenBuilderTy &builder = cgf.getBuilder();
58
59 CIRGenFunction::CIRGenFPOptionsRAII fpOptsRAII(cgf, e);
60
61 if (builder.getIsFPConstrained()) {
63 "constrained FP intrinsic support is NYI.");
64 }
65
66 return builder.emitIntrinsicCallOp(loc, intrinsicName, src0.getType(),
67 mlir::ValueRange{src0, src1});
68}
69
70static mlir::Value emitLogbBuiltin(CIRGenFunction &cgf, const CallExpr *e,
71 const llvm::fltSemantics &fSem) {
72 CIRGenBuilderTy &builder = cgf.getBuilder();
73 mlir::Location loc = cgf.getLoc(e->getExprLoc());
74
75 mlir::Value src0 = cgf.emitScalarExpr(e->getArg(0));
76 mlir::Type srcTy = src0.getType();
77 mlir::Type int32Ty = builder.getSInt32Ty();
78
79 cir::RecordType frExpResTy =
80 builder.getAnonRecordTy({srcTy, int32Ty}, false, false);
81
82 mlir::Value frExpResult = builder.emitIntrinsicCallOp(
83 loc, "frexp", frExpResTy, mlir::ValueRange{src0});
84
85 mlir::Value exp =
86 cir::ExtractMemberOp::create(builder, loc, int32Ty, frExpResult, 1);
87
88 mlir::Value negativeOne =
89 builder.getConstant(loc, cir::IntAttr::get(int32Ty, -1));
90 mlir::Value expMinus1 = builder.createAdd(loc, exp, negativeOne);
91
92 mlir::Value siToFp = cir::CastOp::create(
93 builder, loc, srcTy, cir::CastKind::int_to_float, expMinus1);
94
95 mlir::Value fabs = cir::FAbsOp::create(builder, loc, srcTy, src0);
96
97 llvm::APFloat infVal = llvm::APFloat::getInf(fSem);
98 mlir::Value inf = builder.getConstant(loc, cir::FPAttr::get(srcTy, infVal));
99
100 mlir::Value fabsNegInf =
101 builder.createCompare(loc, cir::CmpOpKind::ne, fabs, inf);
102
103 mlir::Value sel = builder.createSelect(loc, fabsNegInf, siToFp, fabs);
104
105 llvm::APFloat zeroValue = llvm::APFloat::getZero(fSem);
106 mlir::Value zero =
107 builder.getConstant(loc, cir::FPAttr::get(srcTy, zeroValue));
108
109 mlir::Value srcEqZero =
110 builder.createCompare(loc, cir::CmpOpKind::eq, src0, zero);
111
112 llvm::APFloat negInfVal = llvm::APFloat::getInf(fSem, true);
113 mlir::Value negInf =
114 builder.getConstant(loc, cir::FPAttr::get(srcTy, negInfVal));
115
116 mlir::Value res = builder.createSelect(loc, srcEqZero, negInf, sel);
117
118 return res;
119}
120
121static mlir::Value
123 llvm::StringRef intrinsicName,
124 bool isImageStore) {
125 auto &builder = cgf.getBuilder();
126
128 for (unsigned i = 0, n = e->getNumArgs(); i < n; ++i)
129 args.push_back(cgf.emitScalarExpr(e->getArg(i)));
130
131 mlir::Type retTy = isImageStore ? cir::VoidType::get(builder.getContext())
132 : cgf.convertType(e->getType());
133
134 auto callOp = cir::LLVMIntrinsicCallOp::create(
135 builder, cgf.getLoc(e->getExprLoc()),
136 builder.getStringAttr(intrinsicName), retTy, args);
137
138 return callOp.getResult();
139}
140
141std::optional<mlir::Value>
143 const CallExpr *expr) {
144 switch (builtinId) {
145 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
146 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
147 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
148 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
149 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
150 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
151 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
152 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
153 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
154 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
155 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
156 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
157 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
158 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
159 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
160 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
161 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
162 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
163 cgm.errorNYI(expr->getSourceRange(),
164 std::string("unimplemented AMDGPU builtin call: ") +
165 getContext().BuiltinInfo.getName(builtinId));
166 return mlir::Value{};
167 }
168 case AMDGPU::BI__builtin_amdgcn_div_scale:
169 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
170 Address flagOutPtr = emitPointerWithAlignment(expr->getArg(3));
171 llvm::StringRef intrinsicName = "amdgcn.div.scale";
172 mlir::Value x = emitScalarExpr(expr->getArg(0));
173 mlir::Value y = emitScalarExpr(expr->getArg(1));
174 mlir::Value z = emitScalarExpr(expr->getArg(2));
175
176 auto i1Ty = builder.getUIntNTy(1);
177 cir::RecordType resTy = builder.getAnonRecordTy(
178 {x.getType(), i1Ty}, /*packed=*/false, /*padded=*/false);
179
180 mlir::Value structResult =
181 cir::LLVMIntrinsicCallOp::create(builder, getLoc(expr->getExprLoc()),
182 builder.getStringAttr(intrinsicName),
183 resTy, {x, y, z})
184 .getResult();
185
186 mlir::Value result = cir::ExtractMemberOp::create(
187 builder, getLoc(expr->getExprLoc()), x.getType(), structResult, 0);
188 mlir::Value flag = cir::ExtractMemberOp::create(
189 builder, getLoc(expr->getExprLoc()), i1Ty, structResult, 1);
190
191 mlir::Type flagType = flagOutPtr.getElementType();
192 mlir::Value flagToStore =
193 cir::CastOp::create(builder, getLoc(expr->getExprLoc()), flagType,
194 cir::CastKind::int_to_bool, flag);
195 builder.createStore(getLoc(expr->getExprLoc()), flagToStore, flagOutPtr);
196 return result;
197 }
198 case AMDGPU::BI__builtin_amdgcn_div_fmas:
199 case AMDGPU::BI__builtin_amdgcn_div_fmasf:
200 return emitBuiltinWithOneOverloadedType<4>(expr, "amdgcn.div.fmas")
201 .getValue();
202 case AMDGPU::BI__builtin_amdgcn_ds_swizzle:
203 return emitBuiltinWithOneOverloadedType<2>(expr, "amdgcn.ds.swizzle")
204 .getValue();
205 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
206 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
207 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
208 cgm.errorNYI(expr->getSourceRange(),
209 std::string("unimplemented AMDGPU builtin call: ") +
210 getContext().BuiltinInfo.getName(builtinId));
211 return mlir::Value{};
212 }
213 case AMDGPU::BI__builtin_amdgcn_permlane16:
214 case AMDGPU::BI__builtin_amdgcn_permlanex16:
215 case AMDGPU::BI__builtin_amdgcn_permlane64: {
216 cgm.errorNYI(expr->getSourceRange(),
217 std::string("unimplemented AMDGPU builtin call: ") +
218 getContext().BuiltinInfo.getName(builtinId));
219 return mlir::Value{};
220 }
221 case AMDGPU::BI__builtin_amdgcn_readlane:
222 return emitBuiltinWithOneOverloadedType<2>(expr, "amdgcn.readlane")
223 .getValue();
224 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
225 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.readfirstlane")
226 .getValue();
227 case AMDGPU::BI__builtin_amdgcn_wave_shuffle: {
228 cgm.errorNYI(expr->getSourceRange(),
229 std::string("unimplemented AMDGPU builtin call: ") +
230 getContext().BuiltinInfo.getName(builtinId));
231 return mlir::Value{};
232 }
233 case AMDGPU::BI__builtin_amdgcn_div_fixup:
234 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
235 case AMDGPU::BI__builtin_amdgcn_div_fixuph: {
236 mlir::Value src0 = emitScalarExpr(expr->getArg(0));
237 mlir::Value src1 = emitScalarExpr(expr->getArg(1));
238 mlir::Value src2 = emitScalarExpr(expr->getArg(2));
239 return builder.emitIntrinsicCallOp(getLoc(expr->getExprLoc()),
240 "amdgcn.div.fixup", src0.getType(),
241 mlir::ValueRange{src0, src1, src2});
242 }
243 case AMDGPU::BI__builtin_amdgcn_trig_preop:
244 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
245 return emitBuiltinWithOneOverloadedType<2>(expr, "amdgcn.trig.preop")
246 .getValue();
247 case AMDGPU::BI__builtin_amdgcn_rcp:
248 case AMDGPU::BI__builtin_amdgcn_rcpf:
249 case AMDGPU::BI__builtin_amdgcn_rcph:
250 case AMDGPU::BI__builtin_amdgcn_rcp_bf16: {
251 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.rcp").getValue();
252 }
253 case AMDGPU::BI__builtin_amdgcn_sqrt:
254 case AMDGPU::BI__builtin_amdgcn_sqrtf:
255 case AMDGPU::BI__builtin_amdgcn_sqrth:
256 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16: {
257 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.sqrt").getValue();
258 }
259 case AMDGPU::BI__builtin_amdgcn_rsq:
260 case AMDGPU::BI__builtin_amdgcn_rsqf:
261 case AMDGPU::BI__builtin_amdgcn_rsqh:
262 case AMDGPU::BI__builtin_amdgcn_rsq_bf16: {
263 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.rsq").getValue();
264 }
265 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
266 case AMDGPU::BI__builtin_amdgcn_rsq_clampf: {
267 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.rsq.clamp")
268 .getValue();
269 }
270 case AMDGPU::BI__builtin_amdgcn_sinf:
271 case AMDGPU::BI__builtin_amdgcn_sinh:
272 case AMDGPU::BI__builtin_amdgcn_sin_bf16: {
273 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.sin").getValue();
274 }
275 case AMDGPU::BI__builtin_amdgcn_cosf:
276 case AMDGPU::BI__builtin_amdgcn_cosh:
277 case AMDGPU::BI__builtin_amdgcn_cos_bf16: {
278 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.cos").getValue();
279 }
280 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
281 return emitAMDGPUDispatchPtr(*this, expr);
282 case AMDGPU::BI__builtin_amdgcn_logf:
283 case AMDGPU::BI__builtin_amdgcn_log_bf16: {
284 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.log").getValue();
285 }
286 case AMDGPU::BI__builtin_amdgcn_exp2f:
287 case AMDGPU::BI__builtin_amdgcn_exp2_bf16: {
288 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.exp2").getValue();
289 }
290 case AMDGPU::BI__builtin_amdgcn_log_clampf: {
291 cgm.errorNYI(expr->getSourceRange(),
292 std::string("unimplemented AMDGPU builtin call: ") +
293 getContext().BuiltinInfo.getName(builtinId));
294 return mlir::Value{};
295 }
296 case AMDGPU::BI__builtin_amdgcn_ldexp:
297 case AMDGPU::BI__builtin_amdgcn_ldexpf:
298 case AMDGPU::BI__builtin_amdgcn_ldexph: {
299 mlir::Value src0 = emitScalarExpr(expr->getArg(0));
300 mlir::Value src1 = emitScalarExpr(expr->getArg(1));
301 // For ldexph, the raw instruction has different behavior for out-of-bounds
302 // exponent values (implicit truncation instead of saturate to
303 // short_min/short_max), so truncate the exponent to i16 first.
304 mlir::Value exp =
305 builtinId == AMDGPU::BI__builtin_amdgcn_ldexph
306 ? cir::CastOp::create(builder, getLoc(expr->getExprLoc()),
307 builder.getSInt16Ty(),
308 cir::CastKind::integral, src1)
309 : src1;
310 return builder.emitIntrinsicCallOp(getLoc(expr->getExprLoc()), "ldexp",
311 src0.getType(),
312 mlir::ValueRange{src0, exp});
313 }
314 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
315 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
316 case AMDGPU::BI__builtin_amdgcn_frexp_manth: {
317 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.frexp.mant")
318 .getValue();
319 }
320 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
321 case AMDGPU::BI__builtin_amdgcn_frexp_expf:
322 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
323 cgm.errorNYI(expr->getSourceRange(),
324 std::string("unimplemented AMDGPU builtin call: ") +
325 getContext().BuiltinInfo.getName(builtinId));
326 return mlir::Value{};
327 }
328 case AMDGPU::BI__builtin_amdgcn_fract:
329 case AMDGPU::BI__builtin_amdgcn_fractf:
330 case AMDGPU::BI__builtin_amdgcn_fracth: {
331 cgm.errorNYI(expr->getSourceRange(),
332 std::string("unimplemented AMDGPU builtin call: ") +
333 getContext().BuiltinInfo.getName(builtinId));
334 return mlir::Value{};
335 }
336 case AMDGPU::BI__builtin_amdgcn_lerp: {
337 cgm.errorNYI(expr->getSourceRange(),
338 std::string("unimplemented AMDGPU builtin call: ") +
339 getContext().BuiltinInfo.getName(builtinId));
340 return mlir::Value{};
341 }
342 case AMDGPU::BI__builtin_amdgcn_ubfe: {
343 cgm.errorNYI(expr->getSourceRange(),
344 std::string("unimplemented AMDGPU builtin call: ") +
345 getContext().BuiltinInfo.getName(builtinId));
346 return mlir::Value{};
347 }
348 case AMDGPU::BI__builtin_amdgcn_sbfe: {
349 cgm.errorNYI(expr->getSourceRange(),
350 std::string("unimplemented AMDGPU builtin call: ") +
351 getContext().BuiltinInfo.getName(builtinId));
352 return mlir::Value{};
353 }
354 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
355 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
356 cgm.errorNYI(expr->getSourceRange(),
357 std::string("unimplemented AMDGPU builtin call: ") +
358 getContext().BuiltinInfo.getName(builtinId));
359 return mlir::Value{};
360 }
361 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
362 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
363 cgm.errorNYI(expr->getSourceRange(),
364 std::string("unimplemented AMDGPU builtin call: ") +
365 getContext().BuiltinInfo.getName(builtinId));
366 return mlir::Value{};
367 }
368 case AMDGPU::BI__builtin_amdgcn_tanhf:
369 case AMDGPU::BI__builtin_amdgcn_tanhh:
370 case AMDGPU::BI__builtin_amdgcn_tanh_bf16: {
371 return emitBuiltinWithOneOverloadedType<1>(expr, "amdgcn.tanh").getValue();
372 }
373 case AMDGPU::BI__builtin_amdgcn_uicmp:
374 case AMDGPU::BI__builtin_amdgcn_uicmpl:
375 case AMDGPU::BI__builtin_amdgcn_sicmp:
376 case AMDGPU::BI__builtin_amdgcn_sicmpl: {
377 cgm.errorNYI(expr->getSourceRange(),
378 std::string("unimplemented AMDGPU builtin call: ") +
379 getContext().BuiltinInfo.getName(builtinId));
380 return mlir::Value{};
381 }
382 case AMDGPU::BI__builtin_amdgcn_fcmp:
383 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
384 cgm.errorNYI(expr->getSourceRange(),
385 std::string("unimplemented AMDGPU builtin call: ") +
386 getContext().BuiltinInfo.getName(builtinId));
387 return mlir::Value{};
388 }
389 case AMDGPU::BI__builtin_amdgcn_class:
390 case AMDGPU::BI__builtin_amdgcn_classf:
391 case AMDGPU::BI__builtin_amdgcn_classh: {
392 cgm.errorNYI(expr->getSourceRange(),
393 std::string("unimplemented AMDGPU builtin call: ") +
394 getContext().BuiltinInfo.getName(builtinId));
395 return mlir::Value{};
396 }
397 case AMDGPU::BI__builtin_amdgcn_fmed3f:
398 case AMDGPU::BI__builtin_amdgcn_fmed3h: {
399 cgm.errorNYI(expr->getSourceRange(),
400 std::string("unimplemented AMDGPU builtin call: ") +
401 getContext().BuiltinInfo.getName(builtinId));
402 return mlir::Value{};
403 }
404 case AMDGPU::BI__builtin_amdgcn_ds_append:
405 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
406 cgm.errorNYI(expr->getSourceRange(),
407 std::string("unimplemented AMDGPU builtin call: ") +
408 getContext().BuiltinInfo.getName(builtinId));
409 return mlir::Value{};
410 }
411 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
412 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
413 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
414 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
415 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
416 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
417 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
418 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
419 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
420 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
421 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
422 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
423 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
424 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16: {
425 cgm.errorNYI(expr->getSourceRange(),
426 std::string("unimplemented AMDGPU builtin call: ") +
427 getContext().BuiltinInfo.getName(builtinId));
428 return mlir::Value{};
429 }
430 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
431 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
432 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
433 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
434 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
435 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16: {
436 cgm.errorNYI(expr->getSourceRange(),
437 std::string("unimplemented AMDGPU builtin call: ") +
438 getContext().BuiltinInfo.getName(builtinId));
439 return mlir::Value{};
440 }
441 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
442 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
443 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
444 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
445 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
446 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
447 cgm.errorNYI(expr->getSourceRange(),
448 std::string("unimplemented AMDGPU builtin call: ") +
449 getContext().BuiltinInfo.getName(builtinId));
450 return mlir::Value{};
451 }
452 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
453 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
454 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
455 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
456 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
457 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
458 cgm.errorNYI(expr->getSourceRange(),
459 std::string("unimplemented AMDGPU builtin call: ") +
460 getContext().BuiltinInfo.getName(builtinId));
461 return mlir::Value{};
462 }
463 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
464 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
465 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
466 cgm.errorNYI(expr->getSourceRange(),
467 std::string("unimplemented AMDGPU builtin call: ") +
468 getContext().BuiltinInfo.getName(builtinId));
469 return mlir::Value{};
470 }
471 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
472 cgm.errorNYI(expr->getSourceRange(),
473 std::string("unimplemented AMDGPU builtin call: ") +
474 getContext().BuiltinInfo.getName(builtinId));
475 return mlir::Value{};
476 }
477 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
478 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
479 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
480 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
481 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
482 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
483 cgm.errorNYI(expr->getSourceRange(),
484 std::string("unimplemented AMDGPU builtin call: ") +
485 getContext().BuiltinInfo.getName(builtinId));
486 return mlir::Value{};
487 }
488 case AMDGPU::BI__builtin_amdgcn_get_fpenv:
489 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
490 cgm.errorNYI(expr->getSourceRange(),
491 std::string("unimplemented AMDGPU builtin call: ") +
492 getContext().BuiltinInfo.getName(builtinId));
493 return mlir::Value{};
494 }
495 case AMDGPU::BI__builtin_amdgcn_read_exec:
496 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
497 case AMDGPU::BI__builtin_amdgcn_read_exec_hi: {
498 cgm.errorNYI(expr->getSourceRange(),
499 std::string("unimplemented AMDGPU builtin call: ") +
500 getContext().BuiltinInfo.getName(builtinId));
501 return mlir::Value{};
502 }
503 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
504 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
505 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
506 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
507 cgm.errorNYI(expr->getSourceRange(),
508 std::string("unimplemented AMDGPU builtin call: ") +
509 getContext().BuiltinInfo.getName(builtinId));
510 return mlir::Value{};
511 }
512 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
513 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
514 cgm.errorNYI(expr->getSourceRange(),
515 std::string("unimplemented AMDGPU builtin call: ") +
516 getContext().BuiltinInfo.getName(builtinId));
517 return mlir::Value{};
518 }
519 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
520 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
521 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
522 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
523 cgm.errorNYI(expr->getSourceRange(),
524 std::string("unimplemented AMDGPU builtin call: ") +
525 getContext().BuiltinInfo.getName(builtinId));
526 return mlir::Value{};
527 }
528 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
529 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
531 "amdgcn.image.load.1d", false);
532 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
533 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
535 *this, expr, "amdgcn.image.load.1darray", false);
536 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
537 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
538 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
540 "amdgcn.image.load.2d", false);
541 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
542 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
543 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
545 *this, expr, "amdgcn.image.load.2darray", false);
546 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
547 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
549 "amdgcn.image.load.3d", false);
550 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
551 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
553 "amdgcn.image.load.cube", false);
554 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
555 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
557 *this, expr, "amdgcn.image.load.mip.1d", false);
558 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
559 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
561 *this, expr, "amdgcn.image.load.mip.1darray", false);
562 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
563 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
564 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
566 *this, expr, "amdgcn.image.load.mip.2d", false);
567 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
568 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
569 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
571 *this, expr, "amdgcn.image.load.mip.2darray", false);
572 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
573 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
575 *this, expr, "amdgcn.image.load.mip.3d", false);
576 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
577 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
579 *this, expr, "amdgcn.image.load.mip.cube", false);
580 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
581 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
583 "amdgcn.image.store.1d", true);
584 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
585 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
587 *this, expr, "amdgcn.image.store.1darray", true);
588 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
589 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
590 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
592 "amdgcn.image.store.2d", true);
593 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
594 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
595 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
597 *this, expr, "amdgcn.image.store.2darray", true);
598 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
599 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
601 "amdgcn.image.store.3d", true);
602 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
603 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
605 "amdgcn.image.store.cube", true);
606 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
607 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
609 *this, expr, "amdgcn.image.store.mip.1d", true);
610 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
611 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
613 *this, expr, "amdgcn.image.store.mip.1darray", true);
614 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
615 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
616 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
618 *this, expr, "amdgcn.image.store.mip.2d", true);
619 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
620 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
621 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
623 *this, expr, "amdgcn.image.store.mip.2darray", true);
624 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
625 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
627 *this, expr, "amdgcn.image.store.mip.3d", true);
628 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
629 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
631 *this, expr, "amdgcn.image.store.mip.cube", true);
632 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
633 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
635 "amdgcn.image.sample.1d", false);
636 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
637 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
639 *this, expr, "amdgcn.image.sample.1darray", false);
640 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
641 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
642 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
644 "amdgcn.image.sample.2d", false);
645 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
646 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
647 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
649 *this, expr, "amdgcn.image.sample.2darray", false);
650 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
651 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
653 "amdgcn.image.sample.3d", false);
654 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
655 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
657 *this, expr, "amdgcn.image.sample.cube", false);
658 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
659 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
661 *this, expr, "amdgcn.image.sample.lz.1d", false);
662 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
663 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
665 *this, expr, "amdgcn.image.sample.l.1d", false);
666 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
667 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
669 *this, expr, "amdgcn.image.sample.d.1d", false);
670 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
671 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
672 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
674 *this, expr, "amdgcn.image.sample.lz.2d", false);
675 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
676 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
677 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
679 *this, expr, "amdgcn.image.sample.l.2d", false);
680 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
681 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
682 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
684 *this, expr, "amdgcn.image.sample.d.2d", false);
685 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
686 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
688 *this, expr, "amdgcn.image.sample.lz.3d", false);
689 case AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
690 case AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
692 *this, expr, "amdgcn.image.sample.l.3d", false);
693 case AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
694 case AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
696 *this, expr, "amdgcn.image.sample.d.3d", false);
697 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
698 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
700 *this, expr, "amdgcn.image.sample.lz.cube", false);
701 case AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
702 case AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
704 *this, expr, "amdgcn.image.sample.l.cube", false);
705 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
706 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
708 *this, expr, "amdgcn.image.sample.lz.1darray", false);
709 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
710 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
712 *this, expr, "amdgcn.image.sample.l.1darray", false);
713 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
714 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
716 *this, expr, "amdgcn.image.sample.d.1darray", false);
717 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
718 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
719 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
721 *this, expr, "amdgcn.image.sample.lz.2darray", false);
722 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
723 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
724 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
726 *this, expr, "amdgcn.image.sample.l.2darray", false);
727 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
728 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
729 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
731 *this, expr, "amdgcn.image.sample.d.2darray", false);
732 case AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
734 *this, expr, "amdgcn.image.gather4.lz.2d", false);
735 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
736 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
737 cgm.errorNYI(expr->getSourceRange(),
738 std::string("unimplemented AMDGPU builtin call: ") +
739 getContext().BuiltinInfo.getName(builtinId));
740 return mlir::Value{};
741 }
742 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
743 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
744 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
745 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
746 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
747 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
748 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
749 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
750 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
751 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
752 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
753 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
754 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
755 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
756 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
757 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
758 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
759 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
760 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
761 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
762 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
763 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
764 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
765 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
766 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
767 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
768 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
769 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
770 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
771 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
772 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
773 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
774 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
775 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
776 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
777 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
778 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
779 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12: {
780 cgm.errorNYI(expr->getSourceRange(),
781 std::string("unimplemented AMDGPU builtin call: ") +
782 getContext().BuiltinInfo.getName(builtinId));
783 return mlir::Value{};
784 }
785 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
786 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
787 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
788 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
789 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
790 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
791 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
792 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
793 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
794 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
795 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
796 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
797 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
798 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
799 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
800 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
801 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
802 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
803 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
804 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
805 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
806 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64: {
807 cgm.errorNYI(expr->getSourceRange(),
808 std::string("unimplemented AMDGPU builtin call: ") +
809 getContext().BuiltinInfo.getName(builtinId));
810 return mlir::Value{};
811 }
812 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
813 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
814 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
815 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
816 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
817 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
818 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
819 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
820 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
821 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
822 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
823 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
824 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
825 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
826 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
827 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
828 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
829 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
830 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
831 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
832 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
833 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
834 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
835 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
836 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
837 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
838 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
839 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
840 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4: {
841 cgm.errorNYI(expr->getSourceRange(),
842 std::string("unimplemented AMDGPU builtin call: ") +
843 getContext().BuiltinInfo.getName(builtinId));
844 return mlir::Value{};
845 }
846 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
847 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
848 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
849 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
850 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
851 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
852 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
853 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
854 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
855 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
856 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
857 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
858 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
859 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
860 cgm.errorNYI(expr->getSourceRange(),
861 std::string("unimplemented AMDGPU builtin call: ") +
862 getContext().BuiltinInfo.getName(builtinId));
863 return mlir::Value{};
864 }
865 // amdgcn workgroup size
866 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
867 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
868 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z: {
869 cgm.errorNYI(expr->getSourceRange(),
870 std::string("unimplemented AMDGPU builtin call: ") +
871 getContext().BuiltinInfo.getName(builtinId));
872 return mlir::Value{};
873 }
874 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
875 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
876 case AMDGPU::BI__builtin_amdgcn_grid_size_z: {
877 cgm.errorNYI(expr->getSourceRange(),
878 std::string("unimplemented AMDGPU builtin call: ") +
879 getContext().BuiltinInfo.getName(builtinId));
880 return mlir::Value{};
881 }
882 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
883 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef: {
884 cgm.errorNYI(expr->getSourceRange(),
885 std::string("unimplemented AMDGPU builtin call: ") +
886 getContext().BuiltinInfo.getName(builtinId));
887 return mlir::Value{};
888 }
889 case AMDGPU::BI__builtin_amdgcn_alignbit: {
890 cgm.errorNYI(expr->getSourceRange(),
891 std::string("unimplemented AMDGPU builtin call: ") +
892 getContext().BuiltinInfo.getName(builtinId));
893 return mlir::Value{};
894 }
895 case AMDGPU::BI__builtin_amdgcn_fence: {
896 cgm.errorNYI(expr->getSourceRange(),
897 std::string("unimplemented AMDGPU builtin call: ") +
898 getContext().BuiltinInfo.getName(builtinId));
899 return mlir::Value{};
900 }
901 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
902 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
903 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
904 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
905 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
906 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
907 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
908 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
909 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
910 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
911 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
912 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
913 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
914 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
915 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
916 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
917 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
918 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
919 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
920 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
921 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
922 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
923 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
924 cgm.errorNYI(expr->getSourceRange(),
925 std::string("unimplemented AMDGPU builtin call: ") +
926 getContext().BuiltinInfo.getName(builtinId));
927 return mlir::Value{};
928 }
929 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
930 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
931 cgm.errorNYI(expr->getSourceRange(),
932 std::string("unimplemented AMDGPU builtin call: ") +
933 getContext().BuiltinInfo.getName(builtinId));
934 return mlir::Value{};
935 }
936 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
937 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
938 cgm.errorNYI(expr->getSourceRange(),
939 std::string("unimplemented AMDGPU builtin call: ") +
940 getContext().BuiltinInfo.getName(builtinId));
941 return mlir::Value{};
942 }
943 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
944 case AMDGPU::BI__builtin_amdgcn_bitop3_b16: {
945 cgm.errorNYI(expr->getSourceRange(),
946 std::string("unimplemented AMDGPU builtin call: ") +
947 getContext().BuiltinInfo.getName(builtinId));
948 return mlir::Value{};
949 }
950 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
951 cgm.errorNYI(expr->getSourceRange(),
952 std::string("unimplemented AMDGPU builtin call: ") +
953 getContext().BuiltinInfo.getName(builtinId));
954 return mlir::Value{};
955 }
956 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
957 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
958 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
959 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
960 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
961 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128: {
962 cgm.errorNYI(expr->getSourceRange(),
963 std::string("unimplemented AMDGPU builtin call: ") +
964 getContext().BuiltinInfo.getName(builtinId));
965 return mlir::Value{};
966 }
967 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
968 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
969 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
970 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
971 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
972 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
973 cgm.errorNYI(expr->getSourceRange(),
974 std::string("unimplemented AMDGPU builtin call: ") +
975 getContext().BuiltinInfo.getName(builtinId));
976 return mlir::Value{};
977 }
978 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32: {
979 cgm.errorNYI(expr->getSourceRange(),
980 std::string("unimplemented AMDGPU builtin call: ") +
981 getContext().BuiltinInfo.getName(builtinId));
982 return mlir::Value{};
983 }
984 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
985 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16: {
986 cgm.errorNYI(expr->getSourceRange(),
987 std::string("unimplemented AMDGPU builtin call: ") +
988 getContext().BuiltinInfo.getName(builtinId));
989 return mlir::Value{};
990 }
991 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
992 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64: {
993 cgm.errorNYI(expr->getSourceRange(),
994 std::string("unimplemented AMDGPU builtin call: ") +
995 getContext().BuiltinInfo.getName(builtinId));
996 return mlir::Value{};
997 }
998 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
999 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64: {
1000 cgm.errorNYI(expr->getSourceRange(),
1001 std::string("unimplemented AMDGPU builtin call: ") +
1002 getContext().BuiltinInfo.getName(builtinId));
1003 return mlir::Value{};
1004 }
1005 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data: {
1006 cgm.errorNYI(expr->getSourceRange(),
1007 std::string("unimplemented AMDGPU builtin call: ") +
1008 getContext().BuiltinInfo.getName(builtinId));
1009 return mlir::Value{};
1010 }
1011 case AMDGPU::BI__builtin_amdgcn_s_prefetch_inst: {
1012 cgm.errorNYI(expr->getSourceRange(),
1013 std::string("unimplemented AMDGPU builtin call: ") +
1014 getContext().BuiltinInfo.getName(builtinId));
1015 return mlir::Value{};
1016 }
1017 case Builtin::BIlogbf:
1018 case Builtin::BI__builtin_logbf:
1019 return emitLogbBuiltin(*this, expr, llvm::APFloat::IEEEsingle());
1020 case Builtin::BIlogb:
1021 case Builtin::BI__builtin_logb:
1022 return emitLogbBuiltin(*this, expr, llvm::APFloat::IEEEdouble());
1023 case Builtin::BIscalbnf:
1024 case Builtin::BI__builtin_scalbnf:
1025 case Builtin::BIscalbn:
1026 case Builtin::BI__builtin_scalbn: {
1028 *this, expr, "ldexp", "experimental.constrained.ldexp");
1029 }
1030 default:
1031 return std::nullopt;
1032 }
1033}
static mlir::Value emitAMDGPUDispatchPtr(CIRGenFunction &cgf, const CallExpr *e=nullptr)
static mlir::Value emitLogbBuiltin(CIRGenFunction &cgf, const CallExpr *e, const llvm::fltSemantics &fSem)
static mlir::Value emitAMDGCNImageOverloadedReturnType(CIRGenFunction &cgf, const CallExpr *e, llvm::StringRef intrinsicName, bool isImageStore)
static mlir::Value emitBinaryExpMaybeConstrainedFPBuiltin(CIRGenFunction &cgf, const CallExpr *e, llvm::StringRef intrinsicName, llvm::StringRef constrainedIntrinsicName)
Enumerates target-specific builtins in their own namespaces within namespace clang.
cir::ConstantOp getConstant(mlir::Location loc, mlir::TypedAttr attr)
mlir::Value createAdd(mlir::Location loc, mlir::Value lhs, mlir::Value rhs, OverflowBehavior ob=OverflowBehavior::None)
cir::CmpOp createCompare(mlir::Location loc, cir::CmpOpKind kind, mlir::Value lhs, mlir::Value rhs)
mlir::Value createSelect(mlir::Location loc, mlir::Value condition, mlir::Value trueValue, mlir::Value falseValue)
bool getIsFPConstrained() const
Query for the use of constrained floating point math.
mlir::Value createAddrSpaceCast(mlir::Location loc, mlir::Value src, mlir::Type newTy)
C++ view class that accepts both !cir.struct and !cir.union types.
Definition CIRTypes.h:103
mlir::Type getElementType() const
Definition Address.h:125
mlir::Value emitIntrinsicCallOp(mlir::Location loc, const llvm::StringRef str, const mlir::Type &resTy, Operands &&...op)
cir::StructType getAnonRecordTy(llvm::ArrayRef< mlir::Type > members, bool packed=false, bool padded=false)
Get a CIR anonymous struct type.
mlir::Type convertType(clang::QualType t)
Address emitPointerWithAlignment(const clang::Expr *expr, LValueBaseInfo *baseInfo=nullptr)
Given an expression with a pointer type, emit the value and compute our best estimate of the alignmen...
mlir::Location getLoc(clang::SourceLocation srcLoc)
Helpers to convert Clang's SourceLocation to a MLIR Location.
RValue emitBuiltinWithOneOverloadedType(const CallExpr *e, llvm::StringRef intrinName, mlir::Type resultType={})
Emit a simple LLVM intrinsic that takes N scalar arguments.
std::optional< mlir::Value > emitAMDGPUBuiltinExpr(unsigned builtinID, const CallExpr *expr)
Emit a call to an AMDGPU builtin function.
mlir::Value emitScalarExpr(const clang::Expr *e, bool ignoreResultAssign=false)
Emit the computation of the specified expression of scalar type.
CIRGenBuilderTy & getBuilder()
clang::ASTContext & getContext() const
DiagnosticBuilder errorNYI(SourceLocation, llvm::StringRef)
Helpers to emit "not yet implemented" error diagnostics.
mlir::Value getValue() const
Return the value of this scalar value.
Definition CIRGenValue.h:57
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
Definition Expr.h:2949
Expr * getArg(unsigned Arg)
getArg - Return the specified argument.
Definition Expr.h:3153
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
Definition Expr.h:3140
SourceLocation getExprLoc() const LLVM_READONLY
getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic exp...
Definition Expr.cpp:283
QualType getType() const
Definition Expr.h:144
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
Definition Stmt.cpp:343
const internal::VariadicDynCastAllOfMatcher< Stmt, Expr > expr
Matches expressions.
The JSON file list parser is used to communicate input to InstallAPI.
#define exp(__x)
Definition tgmath.h:431
#define fabs(__x)
Definition tgmath.h:549