Skip to content

Commit c704401

Browse files
committed
[CIR] Add some IITDescriptor types
This patch adds support for the following IITDescriptor types and adds NYI for the others. ```cpp IITDescriptor::Half IITDescriptor::BFloat IITDescriptor::Vector ```
1 parent f601904 commit c704401

File tree

1 file changed

+52
-5
lines changed

1 file changed

+52
-5
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "CIRGenValue.h"
2020
#include "TargetInfo.h"
2121
#include "clang/AST/Expr.h"
22+
#include "clang/AST/Type.h"
2223
#include "clang/CIR/Dialect/IR/CIRAttrs.h"
2324
#include "clang/CIR/Dialect/IR/CIROpsEnums.h"
2425
#include "clang/CIR/MissingFeatures.h"
@@ -474,15 +475,61 @@ decodeFixedType(ArrayRef<llvm::Intrinsic::IITDescriptor> &infos,
474475
switch (descriptor.Kind) {
475476
case IITDescriptor::Void:
476477
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);
479490
case IITDescriptor::Float:
480491
return SingleType::get(context);
481492
case IITDescriptor::Double:
482493
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");
486533
}
487534

488535
// llvm::Intrinsics accepts only LLVMContext. We need to reimplement it here.

0 commit comments

Comments
 (0)