14TEST(TypeTests, TestIsOrContains)
19 auto pointerType = PointerType::Create();
20 auto memoryStateType = MemoryStateType::Create();
21 auto ioStateType = IOStateType::Create();
24 EXPECT_TRUE(IsOrContains<PointerType>(*pointerType));
25 EXPECT_FALSE(IsOrContains<PointerType>(*memoryStateType));
26 EXPECT_FALSE(IsOrContains<PointerType>(*ioStateType));
35 { PointerType::Create(), MemoryStateType::Create(), IOStateType::Create() },
36 { PointerType::Create(), MemoryStateType::Create(), IOStateType::Create() });
37 EXPECT_FALSE(IsAggregateType(*functionType));
38 EXPECT_TRUE(IsOrContains<jlm::rvsdg::FunctionType>(*functionType));
39 EXPECT_FALSE(IsOrContains<PointerType>(*functionType));
43 auto structType = StructType::CreateIdentified({ valueType, pointerType },
false);
44 EXPECT_TRUE(IsAggregateType(*structType));
45 EXPECT_TRUE(IsOrContains<StructType>(*structType));
46 EXPECT_TRUE(IsOrContains<PointerType>(*structType));
50 auto arrayType = ArrayType::Create(structType, 20);
51 EXPECT_TRUE(IsAggregateType(*arrayType));
52 EXPECT_TRUE(IsOrContains<ArrayType>(*arrayType));
53 EXPECT_TRUE(IsOrContains<StructType>(*arrayType));
54 EXPECT_TRUE(IsOrContains<PointerType>(*arrayType));
59 const auto vectorType = FixedVectorType::Create(structType, 20);
60 EXPECT_FALSE(IsAggregateType(*vectorType));
61 EXPECT_TRUE(IsOrContains<VectorType>(*vectorType));
62 EXPECT_TRUE(IsOrContains<StructType>(*vectorType));
63 EXPECT_TRUE(IsOrContains<PointerType>(*vectorType));
67TEST(TypeTests, TestGetTypeSizeAndAlignment)
71 auto pointerType = PointerType::Create();
72 EXPECT_EQ(GetTypeStoreSize(*pointerType), 8u);
73 EXPECT_EQ(GetTypeAllocSize(*pointerType), 8u);
74 EXPECT_EQ(GetTypeAlignment(*pointerType), 8u);
78 EXPECT_EQ(GetTypeStoreSize(*bits32), 4u);
79 EXPECT_EQ(GetTypeAllocSize(*bits32), 4u);
80 EXPECT_EQ(GetTypeAlignment(*bits32), 4u);
82 EXPECT_EQ(GetTypeStoreSize(*bits50), 7u);
83 EXPECT_EQ(GetTypeAllocSize(*bits50), 8u);
84 EXPECT_EQ(GetTypeAlignment(*bits50), 8u);
86 auto floatType = FloatingPointType::Create(fpsize::fp128);
87 EXPECT_EQ(GetTypeStoreSize(*floatType), 16u);
88 EXPECT_EQ(GetTypeAllocSize(*floatType), 16u);
89 EXPECT_EQ(GetTypeAlignment(*floatType), 16u);
90 floatType = FloatingPointType::Create(fpsize::half);
91 EXPECT_EQ(GetTypeStoreSize(*floatType), 2u);
92 EXPECT_EQ(GetTypeAllocSize(*floatType), 2u);
93 EXPECT_EQ(GetTypeAlignment(*floatType), 2u);
95 auto arrayType = ArrayType::Create(bits32, 5);
96 unsigned int expectedArrayStoreSize = 4 * 5;
97 unsigned int expectedArrayAllocAize = 4 * 5;
98 EXPECT_EQ(GetTypeStoreSize(*arrayType), expectedArrayStoreSize);
99 EXPECT_EQ(GetTypeAllocSize(*arrayType), expectedArrayAllocAize);
100 EXPECT_EQ(GetTypeAlignment(*arrayType), 4u);
104 auto vectorType = FixedVectorType::Create(bits32, 3);
105 EXPECT_EQ(GetTypeStoreSize(*vectorType), 12u);
106 EXPECT_EQ(GetTypeAllocSize(*vectorType), 16u);
107 EXPECT_EQ(GetTypeAlignment(*vectorType), 16u);
109 auto structType = StructType::CreateIdentified(
117 EXPECT_EQ(structType->GetFieldOffset(0), 0u);
118 EXPECT_EQ(structType->GetFieldOffset(1), 8u);
119 EXPECT_EQ(structType->GetFieldOffset(2), 16u);
120 EXPECT_EQ(structType->GetFieldOffset(3), 48u);
121 EXPECT_EQ(structType->GetFieldOffset(4), 64u);
122 EXPECT_EQ(GetTypeStoreSize(*structType), 80u);
123 EXPECT_EQ(GetTypeAllocSize(*structType), 80u);
124 EXPECT_EQ(GetTypeAlignment(*structType), 16u);
126 auto packedStructType = StructType::CreateIdentified(
134 EXPECT_EQ(packedStructType->GetFieldOffset(0), 0u);
135 EXPECT_EQ(packedStructType->GetFieldOffset(1), 4u);
136 EXPECT_EQ(packedStructType->GetFieldOffset(2), 12u);
137 EXPECT_EQ(packedStructType->GetFieldOffset(3), 32u);
138 EXPECT_EQ(packedStructType->GetFieldOffset(4), 48u);
139 EXPECT_EQ(GetTypeStoreSize(*packedStructType), 52u);
140 EXPECT_EQ(GetTypeAllocSize(*packedStructType), 52u);
141 EXPECT_EQ(GetTypeAlignment(*packedStructType), 1u);