|
19 | 19 | #include "CIRGenValue.h"
|
20 | 20 | #include "TargetInfo.h"
|
21 | 21 | #include "clang/AST/Expr.h"
|
| 22 | +#include "clang/AST/Type.h" |
22 | 23 | #include "clang/CIR/Dialect/IR/CIRAttrs.h"
|
23 | 24 | #include "clang/CIR/Dialect/IR/CIROpsEnums.h"
|
24 | 25 | #include "clang/CIR/MissingFeatures.h"
|
@@ -474,15 +475,61 @@ decodeFixedType(ArrayRef<llvm::Intrinsic::IITDescriptor> &infos,
|
474 | 475 | switch (descriptor.Kind) {
|
475 | 476 | case IITDescriptor::Void:
|
476 | 477 | return VoidType::get(context);
|
477 |
| - case IITDescriptor::Integer: |
478 |
| - return IntType::get(context, descriptor.Integer_Width, /*signed=*/true); |
| 478 | + case IITDescriptor::VarArg: |
| 479 | + llvm_unreachable("NYI: IITDescriptor::VarArg"); |
| 480 | + case IITDescriptor::MMX: |
| 481 | + llvm_unreachable("NYI: IITDescriptor::MMX"); |
| 482 | + case IITDescriptor::Token: |
| 483 | + llvm_unreachable("NYI: IITDescriptor::Token"); |
| 484 | + case IITDescriptor::Metadata: |
| 485 | + llvm_unreachable("NYI: IITDescriptor::Metadata"); |
| 486 | + case IITDescriptor::Half: |
| 487 | + return FP16Type::get(context); |
| 488 | + case IITDescriptor::BFloat: |
| 489 | + return BF16Type::get(context); |
479 | 490 | case IITDescriptor::Float:
|
480 | 491 | return SingleType::get(context);
|
481 | 492 | case IITDescriptor::Double:
|
482 | 493 | return DoubleType::get(context);
|
483 |
| - default: |
484 |
| - llvm_unreachable("NYI"); |
485 |
| - } |
| 494 | + case IITDescriptor::Quad: |
| 495 | + llvm_unreachable("NYI: IITDescriptor::Quad"); |
| 496 | + case IITDescriptor::Integer: |
| 497 | + return IntType::get(context, descriptor.Integer_Width, /*isSigned=*/true); |
| 498 | + case IITDescriptor::Vector: { |
| 499 | + mlir::Type elementType = decodeFixedType(infos, context); |
| 500 | + unsigned numElements = descriptor.Vector_Width.getFixedValue(); |
| 501 | + return cir::VectorType::get(context, elementType, numElements); |
| 502 | + } |
| 503 | + case IITDescriptor::Pointer: |
| 504 | + llvm_unreachable("NYI: IITDescriptor::Pointer"); |
| 505 | + case IITDescriptor::Struct: |
| 506 | + llvm_unreachable("NYI: IITDescriptor::Struct"); |
| 507 | + case IITDescriptor::Argument: |
| 508 | + llvm_unreachable("NYI: IITDescriptor::Argument"); |
| 509 | + case IITDescriptor::ExtendArgument: |
| 510 | + llvm_unreachable("NYI: IITDescriptor::ExtendArgument"); |
| 511 | + case IITDescriptor::TruncArgument: |
| 512 | + llvm_unreachable("NYI: IITDescriptor::TruncArgument"); |
| 513 | + case IITDescriptor::OneNthEltsVecArgument: |
| 514 | + llvm_unreachable("NYI: IITDescriptor::OneNthEltsVecArgument"); |
| 515 | + case IITDescriptor::SameVecWidthArgument: |
| 516 | + llvm_unreachable("NYI: IITDescriptor::SameVecWidthArgument"); |
| 517 | + case IITDescriptor::VecOfAnyPtrsToElt: |
| 518 | + llvm_unreachable("NYI: IITDescriptor::VecOfAnyPtrsToElt"); |
| 519 | + case IITDescriptor::Subdivide2Argument: |
| 520 | + llvm_unreachable("NYI: IITDescriptor::Subdivide2Argument"); |
| 521 | + case IITDescriptor::Subdivide4Argument: |
| 522 | + llvm_unreachable("NYI: IITDescriptor::Subdivide4Argument"); |
| 523 | + case IITDescriptor::VecOfBitcastsToInt: |
| 524 | + llvm_unreachable("NYI: IITDescriptor::VecOfBitcastsToInt"); |
| 525 | + case IITDescriptor::AMX: |
| 526 | + llvm_unreachable("NYI: IITDescriptor::AMX"); |
| 527 | + case IITDescriptor::PPCQuad: |
| 528 | + llvm_unreachable("NYI: IITDescriptor::PPCQuad"); |
| 529 | + case IITDescriptor::AArch64Svcount: |
| 530 | + llvm_unreachable("NYI: IITDescriptor::AArch64Svcount"); |
| 531 | + } |
| 532 | + llvm_unreachable("Unknown builtin: Must return from switch"); |
486 | 533 | }
|
487 | 534 |
|
488 | 535 | // llvm::Intrinsics accepts only LLVMContext. We need to reimplement it here.
|
|
0 commit comments