Skip to content

Commit 7ad17f2

Browse files
[CIR] Add IITDescriptor type cases (#1852)
This patch adds support for IITDescriptor::Vector type and adds NYI for the others.
1 parent 19b7f07 commit 7ad17f2

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -472,15 +472,63 @@ decodeFixedType(ArrayRef<llvm::Intrinsic::IITDescriptor> &infos,
472472
switch (descriptor.Kind) {
473473
case IITDescriptor::Void:
474474
return VoidType::get(context);
475-
case IITDescriptor::Integer:
476-
return IntType::get(context, descriptor.Integer_Width, /*signed=*/true);
475+
case IITDescriptor::VarArg:
476+
llvm_unreachable("NYI: IITDescriptor::VarArg");
477+
case IITDescriptor::MMX:
478+
llvm_unreachable("NYI: IITDescriptor::MMX");
479+
case IITDescriptor::Token:
480+
llvm_unreachable("NYI: IITDescriptor::Token");
481+
case IITDescriptor::Metadata:
482+
llvm_unreachable("NYI: IITDescriptor::Metadata");
483+
case IITDescriptor::Half:
484+
llvm_unreachable("NYI: IITDescriptor::Half");
485+
case IITDescriptor::BFloat:
486+
llvm_unreachable("NYI: IITDescriptor::BFloat");
477487
case IITDescriptor::Float:
478488
return SingleType::get(context);
479489
case IITDescriptor::Double:
480490
return DoubleType::get(context);
481-
default:
482-
llvm_unreachable("NYI");
483-
}
491+
case IITDescriptor::Quad:
492+
llvm_unreachable("NYI: IITDescriptor::Quad");
493+
case IITDescriptor::Integer:
494+
return IntType::get(context, descriptor.Integer_Width, /*isSigned=*/true);
495+
case IITDescriptor::Vector: {
496+
mlir::Type elementType = decodeFixedType(infos, context);
497+
unsigned numElements = descriptor.Vector_Width.getFixedValue();
498+
return cir::VectorType::get(context, elementType, numElements);
499+
}
500+
case IITDescriptor::Pointer:
501+
llvm_unreachable("NYI: IITDescriptor::Pointer");
502+
case IITDescriptor::Struct:
503+
llvm_unreachable("NYI: IITDescriptor::Struct");
504+
case IITDescriptor::Argument:
505+
llvm_unreachable("NYI: IITDescriptor::Argument");
506+
case IITDescriptor::ExtendArgument:
507+
llvm_unreachable("NYI: IITDescriptor::ExtendArgument");
508+
case IITDescriptor::TruncArgument:
509+
llvm_unreachable("NYI: IITDescriptor::TruncArgument");
510+
case IITDescriptor::OneNthEltsVecArgument:
511+
llvm_unreachable("NYI: IITDescriptor::OneNthEltsVecArgument");
512+
case IITDescriptor::SameVecWidthArgument:
513+
llvm_unreachable("NYI: IITDescriptor::SameVecWidthArgument");
514+
case IITDescriptor::VecOfAnyPtrsToElt:
515+
llvm_unreachable("NYI: IITDescriptor::VecOfAnyPtrsToElt");
516+
case IITDescriptor::VecElementArgument:
517+
llvm_unreachable("NYI: IITDescriptor::VecElementArgument");
518+
case IITDescriptor::Subdivide2Argument:
519+
llvm_unreachable("NYI: IITDescriptor::Subdivide2Argument");
520+
case IITDescriptor::Subdivide4Argument:
521+
llvm_unreachable("NYI: IITDescriptor::Subdivide4Argument");
522+
case IITDescriptor::VecOfBitcastsToInt:
523+
llvm_unreachable("NYI: IITDescriptor::VecOfBitcastsToInt");
524+
case IITDescriptor::AMX:
525+
llvm_unreachable("NYI: IITDescriptor::AMX");
526+
case IITDescriptor::PPCQuad:
527+
llvm_unreachable("NYI: IITDescriptor::PPCQuad");
528+
case IITDescriptor::AArch64Svcount:
529+
llvm_unreachable("NYI: IITDescriptor::AArch64Svcount");
530+
}
531+
llvm_unreachable("Unhandled IITDescriptor, must return from switch");
484532
}
485533

486534
// llvm::Intrinsics accepts only LLVMContext. We need to reimplement it here.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +avx10.2-256 -fclangir -emit-cir -o %t.cir
2+
// RUN: FileCheck --check-prefix=CIR-CHECK --input-file=%t.cir %s
3+
4+
// CIR-CHECK: !cir.vector<!s16i x 8>
5+
#include <emmintrin.h>
6+
int A() { __m128i h = _mm_srli_epi16(h, 0); }

0 commit comments

Comments
 (0)