================
@@ -141,6 +142,78 @@ CompilerType RegisterTypeBuilderClang::BuildFlagsType(
   return flags_type;
 }
 
+CompilerType
+RegisterTypeBuilderClang::BuildVectorType(const RegisterTypeVector 
*vector_type,
+                                          uint32_t expected_byte_size,
+                                          lldb::TypeSystemClangSP type_system) 
{
+  if (!expected_byte_size)
+    return {};
+  if (auto type = GetExistingCompilerType(vector_type, expected_byte_size))
+    return *type;
+
+  std::optional<uint64_t> element_size =
+      vector_type->GetElementType()->GetByteSize();
+  if (!element_size) {
+    if (expected_byte_size % vector_type->GetCount())
+      return {};
+    element_size = expected_byte_size / vector_type->GetCount();
+  }
+  if (*element_size > UINT32_MAX ||
+      expected_byte_size % vector_type->GetCount() ||
+      *element_size != expected_byte_size / vector_type->GetCount())
+    return {};
+
+  CompilerType element_type;
+  const RegisterType *element_register_type = vector_type->GetElementType();
+  switch (element_register_type->getKind()) {
+  case RegisterType::eRegisterTypeKindBuiltin:
+    element_type =
+        
BuildBuiltinType(llvm::cast<RegisterTypeBuiltin>(element_register_type),
+                         *element_size, type_system);
+    break;
+  case RegisterType::eRegisterTypeKindVector:
+    element_type =
+        BuildVectorType(llvm::cast<RegisterTypeVector>(element_register_type),
+                        *element_size, type_system);
+    break;
+  case RegisterType::eRegisterTypeKindEnum:
+  case RegisterType::eRegisterTypeKindFlags:
+    return {};
+  }
----------------
DavidSpickett wrote:

I wonder if we can generalise this dispatch later with some extra "allowed 
types" parameter. Anyway, better to keep it verbose for now.

https://github.com/llvm/llvm-project/pull/220707
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to