================
@@ -1310,6 +1310,70 @@ def GetGlobalOp : CIR_Op<"get_global",
   let hasVerifier = 0;
 }
 
+//===----------------------------------------------------------------------===//
+// GetMemberOp
+//===----------------------------------------------------------------------===//
+
+def GetMemberOp : CIR_Op<"get_member"> {
+  let summary = "Get the address of a member of a record";
+  let description = [{
+    The `cir.get_member` operation gets the address of a particular named
+    member from the input record.
+
+    It expects a pointer to the base record as well as the name of the member
+    and its field index.
----------------
bcardosolopes wrote:

> Or are they 'flattened' and the index is consistent?

This one. For a bit of extra context: whenever something more complex is going 
on CIRGen takes care of it such that the final getmember is reliable.

> One thing that might be interesting if we don't encode it is sometimes casts 
> between types are legal if they have a 'common initial sequence' depending on 
> language mode and use

Indeed interesting. If this turns out to help CIRGen / optimization we should 
be all in for it in the future. Any compelling use case in mind?

https://github.com/llvm/llvm-project/pull/136383
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to