[clang] [CIR] floating-point, pointer, and function types (PR #120484)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 18 15:17:53 PST 2024


================
@@ -18,6 +21,87 @@ mlir::MLIRContext &CIRGenTypes::getMLIRContext() const {
   return *builder.getContext();
 }
 
+/// Return true if the specified type in a function parameter or result position
+/// can be converted to a CIR type at this point. This boils down to being
+/// whether it is complete, as well as whether we've temporarily deferred
+/// expanding the type because we're in a recursive context.
+bool CIRGenTypes::isFuncParamTypeConvertible(clang::QualType type) {
+  // Some ABIs cannot have their member pointers represented in LLVM IR unless
+  // certain circumstances have been reached.
+  assert(!type->getAs<MemberPointerType>() && "NYI");
+
+  // If this isn't a tagged type, we can convert it!
----------------
erichkeane wrote:

First, `tag` type, not `tagged` type, as this just represents any of the struct, class, union, or enum types.

Second, is the rest of this true?  Non-Tag types include atomics, Attributed types, bitint types, block pointers, complex, various dependent types, vector types, etc.  Do we really just mean to do `BuiltinType` here instead?  Or do we really mean we can do the rest already?

https://github.com/llvm/llvm-project/pull/120484


More information about the cfe-commits mailing list