================ @@ -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