================
@@ -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.
----------------
erichkeane wrote:

What does this do for members of inherited types?  is that encoded via the 
`record`?  Or are they 'flattened' and the index is consistent?

Does it seem sensible to have examples of inheritance? 

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... so I wonder if encoding that (which, debatably, can 
change the common-initial-sequence rules) is worth-while some-day.  (This last 
part is lamenting/thinking, not necessariy immediately actionable).

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