@@ -323,6 +323,64 @@ define void @foo(<4 x i16> %vi0, <4 x float> %vf1, i8 %i0) {
323
323
EXPECT_FALSE (sandboxir::VectorType::isValidElementType (FVecTy));
324
324
}
325
325
326
+ TEST_F (SandboxTypeTest, FixedVectorType) {
327
+ parseIR (C, R"IR(
328
+ define void @foo(<4 x i16> %vi0, <4 x float> %vf1, i8 %i0) {
329
+ ret void
330
+ }
331
+ )IR" );
332
+ llvm::Function *LLVMF = &*M->getFunction (" foo" );
333
+ sandboxir::Context Ctx (C);
334
+ auto *F = Ctx.createFunction (LLVMF);
335
+ // Check classof(), creation, accessors
336
+ auto *Vec4i16Ty = cast<sandboxir::FixedVectorType>(F->getArg (0 )->getType ());
337
+ EXPECT_TRUE (Vec4i16Ty->getElementType ()->isIntegerTy (16 ));
338
+ EXPECT_EQ (Vec4i16Ty->getElementCount (), ElementCount::getFixed (4 ));
339
+
340
+ // get(ElementType, NumElements)
341
+ EXPECT_EQ (
342
+ sandboxir::FixedVectorType::get (sandboxir::Type::getInt16Ty (Ctx), 4 ),
343
+ F->getArg (0 )->getType ());
344
+ // get(ElementType, Other)
345
+ EXPECT_EQ (sandboxir::FixedVectorType::get (
346
+ sandboxir::Type::getInt16Ty (Ctx),
347
+ cast<sandboxir::FixedVectorType>(F->getArg (0 )->getType ())),
348
+ F->getArg (0 )->getType ());
349
+ auto *Vec4FTy = cast<sandboxir::FixedVectorType>(F->getArg (1 )->getType ());
350
+ EXPECT_TRUE (Vec4FTy->getElementType ()->isFloatTy ());
351
+ // getInteger
352
+ auto *Vec4i32Ty = sandboxir::FixedVectorType::getInteger (Vec4FTy);
353
+ EXPECT_TRUE (Vec4i32Ty->getElementType ()->isIntegerTy (32 ));
354
+ EXPECT_EQ (Vec4i32Ty->getElementCount (), Vec4FTy->getElementCount ());
355
+ // getExtendedElementCountVectorType
356
+ auto *Vec4i64Ty =
357
+ sandboxir::FixedVectorType::getExtendedElementVectorType (Vec4i16Ty);
358
+ EXPECT_TRUE (Vec4i64Ty->getElementType ()->isIntegerTy (32 ));
359
+ EXPECT_EQ (Vec4i64Ty->getElementCount (), Vec4i16Ty->getElementCount ());
360
+ // getTruncatedElementVectorType
361
+ auto *Vec4i8Ty =
362
+ sandboxir::FixedVectorType::getTruncatedElementVectorType (Vec4i16Ty);
363
+ EXPECT_TRUE (Vec4i8Ty->getElementType ()->isIntegerTy (8 ));
364
+ EXPECT_EQ (Vec4i8Ty->getElementCount (), Vec4i8Ty->getElementCount ());
365
+ // getSubdividedVectorType
366
+ auto *Vec8i8Ty =
367
+ sandboxir::FixedVectorType::getSubdividedVectorType (Vec4i16Ty, 1 );
368
+ EXPECT_TRUE (Vec8i8Ty->getElementType ()->isIntegerTy (8 ));
369
+ EXPECT_EQ (Vec8i8Ty->getElementCount (), ElementCount::getFixed (8 ));
370
+ // getNumElements
371
+ EXPECT_EQ (Vec8i8Ty->getNumElements (), 8u );
372
+ // getHalfElementsVectorType
373
+ auto *Vec2i16Ty =
374
+ sandboxir::FixedVectorType::getHalfElementsVectorType (Vec4i16Ty);
375
+ EXPECT_TRUE (Vec2i16Ty->getElementType ()->isIntegerTy (16 ));
376
+ EXPECT_EQ (Vec2i16Ty->getElementCount (), ElementCount::getFixed (2 ));
377
+ // getDoubleElementsVectorType
378
+ auto *Vec8i16Ty =
379
+ sandboxir::FixedVectorType::getDoubleElementsVectorType (Vec4i16Ty);
380
+ EXPECT_TRUE (Vec8i16Ty->getElementType ()->isIntegerTy (16 ));
381
+ EXPECT_EQ (Vec8i16Ty->getElementCount (), ElementCount::getFixed (8 ));
382
+ }
383
+
326
384
TEST_F (SandboxTypeTest, FunctionType) {
327
385
parseIR (C, R"IR(
328
386
define void @foo() {
0 commit comments