30 if (isa<seq::ClockType>(type))
33 if (
auto intType = dyn_cast<IntegerType>(type))
34 return intType.getWidth();
36 if (
auto arrayType = dyn_cast<hw::ArrayType>(type)) {
42 auto width = std::max<uint64_t>(*maybeWidth, 8);
44 auto alignment = llvm::bit_ceil(std::min<uint64_t>(width, 16 * 8));
45 auto alignedWidth = llvm::alignToPowerOf2(width, alignment);
47 return arrayType.getNumElements() * alignedWidth;
50 if (
auto structType = dyn_cast<hw::StructType>(type)) {
51 uint64_t structWidth = 0;
52 uint64_t structAlignment = 8;
53 for (
auto element : structType.getElements()) {
59 auto width = std::max<uint64_t>(*maybeWidth, 8);
61 auto alignment = llvm::bit_ceil(std::min<uint64_t>(width, 16 * 8));
62 auto alignedWidth = llvm::alignToPowerOf2(width, alignment);
65 structWidth = llvm::alignToPowerOf2(structWidth, alignment);
66 structWidth += alignedWidth;
68 structAlignment = std::max<uint64_t>(alignment, structAlignment);
71 return llvm::alignToPowerOf2(structWidth, structAlignment);