11
11
#include " flang/Optimizer/Builder/Character.h"
12
12
#include " flang/Optimizer/Builder/FIRBuilder.h"
13
13
#include " flang/Optimizer/Builder/Runtime/RTBuilder.h"
14
- #include " flang/Optimizer/Builder/Todo .h"
14
+ #include " flang/Optimizer/Support/Utils .h"
15
15
#include " flang/Runtime/numeric.h"
16
16
#include " mlir/Dialect/Func/IR/FuncOps.h"
17
17
@@ -240,10 +240,7 @@ mlir::Value fir::runtime::genExponent(fir::FirOpBuilder &builder,
240
240
mlir::Value x) {
241
241
mlir::func::FuncOp func;
242
242
mlir::Type fltTy = x.getType ();
243
-
244
- if (fltTy.isF16 ()) {
245
- TODO (loc, " support for REAL with KIND = 2 in EXPONENT" );
246
- } else if (fltTy.isF32 ()) {
243
+ if (fltTy.isF32 ()) {
247
244
if (resultType.isInteger (32 ))
248
245
func = fir::runtime::getRuntimeFunc<mkRTKey (Exponent4_4)>(loc, builder);
249
246
else if (resultType.isInteger (64 ))
@@ -264,7 +261,7 @@ mlir::Value fir::runtime::genExponent(fir::FirOpBuilder &builder,
264
261
else if (resultType.isInteger (64 ))
265
262
func = fir::runtime::getRuntimeFunc<ForcedExponent16_8>(loc, builder);
266
263
} else
267
- fir::emitFatalError (loc, " unsupported REAL kind in EXPONENT" );
264
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " EXPONENT" );
268
265
269
266
auto funcTy = func.getFunctionType ();
270
267
llvm::SmallVector<mlir::Value> args = {
@@ -278,9 +275,7 @@ mlir::Value fir::runtime::genFraction(fir::FirOpBuilder &builder,
278
275
mlir::Location loc, mlir::Value x) {
279
276
mlir::func::FuncOp func;
280
277
mlir::Type fltTy = x.getType ();
281
- if (fltTy.isF16 ())
282
- TODO (loc, " support for REAL with KIND = 2 in FRACTION" );
283
- else if (fltTy.isF32 ())
278
+ if (fltTy.isF32 ())
284
279
func = fir::runtime::getRuntimeFunc<mkRTKey (Fraction4)>(loc, builder);
285
280
else if (fltTy.isF64 ())
286
281
func = fir::runtime::getRuntimeFunc<mkRTKey (Fraction8)>(loc, builder);
@@ -289,7 +284,7 @@ mlir::Value fir::runtime::genFraction(fir::FirOpBuilder &builder,
289
284
else if (fltTy.isF128 ())
290
285
func = fir::runtime::getRuntimeFunc<ForcedFraction16>(loc, builder);
291
286
else
292
- fir::emitFatalError (loc, " unsupported REAL kind in FRACTION" );
287
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " FRACTION" );
293
288
294
289
auto funcTy = func.getFunctionType ();
295
290
llvm::SmallVector<mlir::Value> args = {
@@ -307,9 +302,7 @@ mlir::Value fir::runtime::genMod(fir::FirOpBuilder &builder, mlir::Location loc,
307
302
if (fltTy != p.getType ())
308
303
fir::emitFatalError (loc, " arguments type mismatch in MOD" );
309
304
310
- if (fltTy.isF16 ())
311
- TODO (loc, " support for REAL with KIND = 2 in MOD" );
312
- else if (fltTy.isF32 ())
305
+ if (fltTy.isF32 ())
313
306
func = fir::runtime::getRuntimeFunc<mkRTKey (ModReal4)>(loc, builder);
314
307
else if (fltTy.isF64 ())
315
308
func = fir::runtime::getRuntimeFunc<mkRTKey (ModReal8)>(loc, builder);
@@ -318,7 +311,7 @@ mlir::Value fir::runtime::genMod(fir::FirOpBuilder &builder, mlir::Location loc,
318
311
else if (fltTy.isF128 ())
319
312
func = fir::runtime::getRuntimeFunc<ForcedMod16>(loc, builder);
320
313
else
321
- fir::emitFatalError (loc, " unsupported REAL kind in MOD" );
314
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " MOD" );
322
315
323
316
auto funcTy = func.getFunctionType ();
324
317
auto sourceFile = fir::factory::locationToFilename (builder, loc);
@@ -337,9 +330,7 @@ mlir::Value fir::runtime::genNearest(fir::FirOpBuilder &builder,
337
330
mlir::func::FuncOp func;
338
331
mlir::Type fltTy = x.getType ();
339
332
340
- if (fltTy.isF16 ())
341
- TODO (loc, " support for REAL with KIND = 2 in NEAREST" );
342
- else if (fltTy.isF32 ())
333
+ if (fltTy.isF32 ())
343
334
func = fir::runtime::getRuntimeFunc<mkRTKey (Nearest4)>(loc, builder);
344
335
else if (fltTy.isF64 ())
345
336
func = fir::runtime::getRuntimeFunc<mkRTKey (Nearest8)>(loc, builder);
@@ -348,7 +339,7 @@ mlir::Value fir::runtime::genNearest(fir::FirOpBuilder &builder,
348
339
else if (fltTy.isF128 ())
349
340
func = fir::runtime::getRuntimeFunc<ForcedNearest16>(loc, builder);
350
341
else
351
- fir::emitFatalError (loc, " unsupported REAL kind in NEAREST" );
342
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " NEAREST" );
352
343
353
344
auto funcTy = func.getFunctionType ();
354
345
@@ -374,9 +365,7 @@ mlir::Value fir::runtime::genRRSpacing(fir::FirOpBuilder &builder,
374
365
mlir::func::FuncOp func;
375
366
mlir::Type fltTy = x.getType ();
376
367
377
- if (fltTy.isF16 ())
378
- TODO (loc, " support for REAL with KIND = 2 in RRSPACING" );
379
- else if (fltTy.isF32 ())
368
+ if (fltTy.isF32 ())
380
369
func = fir::runtime::getRuntimeFunc<mkRTKey (RRSpacing4)>(loc, builder);
381
370
else if (fltTy.isF64 ())
382
371
func = fir::runtime::getRuntimeFunc<mkRTKey (RRSpacing8)>(loc, builder);
@@ -385,7 +374,7 @@ mlir::Value fir::runtime::genRRSpacing(fir::FirOpBuilder &builder,
385
374
else if (fltTy.isF128 ())
386
375
func = fir::runtime::getRuntimeFunc<ForcedRRSpacing16>(loc, builder);
387
376
else
388
- fir::emitFatalError (loc, " unsupported REAL kind in RRSPACING" );
377
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " RRSPACING" );
389
378
390
379
auto funcTy = func.getFunctionType ();
391
380
llvm::SmallVector<mlir::Value> args = {
@@ -401,9 +390,7 @@ mlir::Value fir::runtime::genScale(fir::FirOpBuilder &builder,
401
390
mlir::func::FuncOp func;
402
391
mlir::Type fltTy = x.getType ();
403
392
404
- if (fltTy.isF16 ())
405
- TODO (loc, " support for REAL with KIND = 2 in SCALE" );
406
- else if (fltTy.isF32 ())
393
+ if (fltTy.isF32 ())
407
394
func = fir::runtime::getRuntimeFunc<mkRTKey (Scale4)>(loc, builder);
408
395
else if (fltTy.isF64 ())
409
396
func = fir::runtime::getRuntimeFunc<mkRTKey (Scale8)>(loc, builder);
@@ -412,7 +399,7 @@ mlir::Value fir::runtime::genScale(fir::FirOpBuilder &builder,
412
399
else if (fltTy.isF128 ())
413
400
func = fir::runtime::getRuntimeFunc<ForcedScale16>(loc, builder);
414
401
else
415
- fir::emitFatalError (loc, " unsupported REAL kind in SCALE" );
402
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " SCALE" );
416
403
417
404
auto funcTy = func.getFunctionType ();
418
405
auto args = fir::runtime::createArguments (builder, loc, funcTy, x, i);
@@ -480,9 +467,7 @@ mlir::Value fir::runtime::genSetExponent(fir::FirOpBuilder &builder,
480
467
mlir::func::FuncOp func;
481
468
mlir::Type fltTy = x.getType ();
482
469
483
- if (fltTy.isF16 ())
484
- TODO (loc, " support for REAL with KIND = 2 in FRACTION" );
485
- else if (fltTy.isF32 ())
470
+ if (fltTy.isF32 ())
486
471
func = fir::runtime::getRuntimeFunc<mkRTKey (SetExponent4)>(loc, builder);
487
472
else if (fltTy.isF64 ())
488
473
func = fir::runtime::getRuntimeFunc<mkRTKey (SetExponent8)>(loc, builder);
@@ -491,7 +476,7 @@ mlir::Value fir::runtime::genSetExponent(fir::FirOpBuilder &builder,
491
476
else if (fltTy.isF128 ())
492
477
func = fir::runtime::getRuntimeFunc<ForcedSetExponent16>(loc, builder);
493
478
else
494
- fir::emitFatalError (loc, " unsupported REAL kind in FRACTION " );
479
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " SET_EXPONENT " );
495
480
496
481
auto funcTy = func.getFunctionType ();
497
482
auto args = fir::runtime::createArguments (builder, loc, funcTy, x, i);
@@ -505,9 +490,7 @@ mlir::Value fir::runtime::genSpacing(fir::FirOpBuilder &builder,
505
490
mlir::func::FuncOp func;
506
491
mlir::Type fltTy = x.getType ();
507
492
508
- if (fltTy.isF16 ())
509
- TODO (loc, " support for REAL with KIND = 2 in SPACING" );
510
- else if (fltTy.isF32 ())
493
+ if (fltTy.isF32 ())
511
494
func = fir::runtime::getRuntimeFunc<mkRTKey (Spacing4)>(loc, builder);
512
495
else if (fltTy.isF64 ())
513
496
func = fir::runtime::getRuntimeFunc<mkRTKey (Spacing8)>(loc, builder);
@@ -516,7 +499,7 @@ mlir::Value fir::runtime::genSpacing(fir::FirOpBuilder &builder,
516
499
else if (fltTy.isF128 ())
517
500
func = fir::runtime::getRuntimeFunc<ForcedSpacing16>(loc, builder);
518
501
else
519
- fir::emitFatalError (loc, " unsupported REAL kind in SPACING" );
502
+ fir::intrinsicTypeTODO (builder, fltTy, loc, " SPACING" );
520
503
521
504
auto funcTy = func.getFunctionType ();
522
505
llvm::SmallVector<mlir::Value> args = {
0 commit comments