11// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s -check-prefix=CPP-DEFAULT
22
3- func.func @member (%arg0: !emitc.opaque <" mystruct" >, %arg1: i32 ) {
3+ func.func @member (%arg0: !emitc.opaque <" mystruct" >, %arg1: i32 , %arg2: index ) {
44 %var0 = " emitc.variable" () <{value = #emitc.opaque <" " >}> : () -> !emitc.lvalue <!emitc.opaque <" mystruct" >>
55 emitc.assign %arg0 : !emitc.opaque <" mystruct" > to %var0 : !emitc.lvalue <!emitc.opaque <" mystruct" >>
66
@@ -12,19 +12,31 @@ func.func @member(%arg0: !emitc.opaque<"mystruct">, %arg1: i32) {
1212 %3 = " emitc.variable" () <{value = #emitc.opaque <" " >}> : () -> !emitc.lvalue <i32 >
1313 emitc.assign %2 : i32 to %3 : !emitc.lvalue <i32 >
1414
15+ %4 = " emitc.member" (%var0 ) {member = " c" } : (!emitc.lvalue <!emitc.opaque <" mystruct" >>) -> !emitc.array <2 xi32 >
16+ %5 = emitc.subscript %4 [%arg2 ] : (!emitc.array <2 xi32 >, index ) -> !emitc.lvalue <i32 >
17+ %6 = emitc.load %5 : <i32 >
18+ emitc.assign %6 : i32 to %3 : !emitc.lvalue <i32 >
19+
20+ %7 = " emitc.member" (%var0 ) {member = " d" } : (!emitc.lvalue <!emitc.opaque <" mystruct" >>) -> !emitc.array <2 xi32 >
21+ %8 = emitc.subscript %7 [%arg2 ] : (!emitc.array <2 xi32 >, index ) -> !emitc.lvalue <i32 >
22+ emitc.assign %arg1 : i32 to %8 : !emitc.lvalue <i32 >
23+
1524 return
1625}
1726
18- // CPP-DEFAULT: void member(mystruct [[V0:[^ ]*]], int32_t [[V1:[^ ]*]]) {
27+ // CPP-DEFAULT: void member(mystruct [[V0:[^ ]*]], int32_t [[V1:[^ ]*]], size_t [[Index:[^ ]*]] ) {
1928// CPP-DEFAULT-NEXT: mystruct [[V2:[^ ]*]];
2029// CPP-DEFAULT-NEXT: [[V2]] = [[V0]];
2130// CPP-DEFAULT-NEXT: [[V2]].a = [[V1]];
2231// CPP-DEFAULT-NEXT: int32_t [[V3:[^ ]*]] = [[V2]].b;
2332// CPP-DEFAULT-NEXT: int32_t [[V4:[^ ]*]];
2433// CPP-DEFAULT-NEXT: [[V4]] = [[V3]];
34+ // CPP-DEFAULT-NEXT: int32_t [[V5:[^ ]*]] = [[V2]].c[[[Index]]];
35+ // CPP-DEFAULT-NEXT: [[V4]] = [[V5]];
36+ // CPP-DEFAULT-NEXT: [[V2]].d[[[Index]]] = [[V1]];
2537
2638
27- func.func @member_of_pointer (%arg0: !emitc.ptr <!emitc.opaque <" mystruct" >>, %arg1: i32 ) {
39+ func.func @member_of_pointer (%arg0: !emitc.ptr <!emitc.opaque <" mystruct" >>, %arg1: i32 , %arg2: index ) {
2840 %var0 = " emitc.variable" () <{value = #emitc.opaque <" " >}> : () -> !emitc.lvalue <!emitc.ptr <!emitc.opaque <" mystruct" >>>
2941 emitc.assign %arg0 : !emitc.ptr <!emitc.opaque <" mystruct" >> to %var0 : !emitc.lvalue <!emitc.ptr <!emitc.opaque <" mystruct" >>>
3042
@@ -36,14 +48,25 @@ func.func @member_of_pointer(%arg0: !emitc.ptr<!emitc.opaque<"mystruct">>, %arg1
3648 %3 = " emitc.variable" () <{value = #emitc.opaque <" " >}> : () -> !emitc.lvalue <i32 >
3749 emitc.assign %2 : i32 to %3 : !emitc.lvalue <i32 >
3850
51+ %4 = " emitc.member_of_ptr" (%var0 ) {member = " c" } : (!emitc.lvalue <!emitc.ptr <!emitc.opaque <" mystruct" >>>) -> !emitc.array <2 xi32 >
52+ %5 = emitc.subscript %4 [%arg2 ] : (!emitc.array <2 xi32 >, index ) -> !emitc.lvalue <i32 >
53+ %6 = emitc.load %5 : <i32 >
54+ emitc.assign %6 : i32 to %3 : !emitc.lvalue <i32 >
55+
56+ %7 = " emitc.member_of_ptr" (%var0 ) {member = " d" } : (!emitc.lvalue <!emitc.ptr <!emitc.opaque <" mystruct" >>>) -> !emitc.array <2 xi32 >
57+ %8 = emitc.subscript %7 [%arg2 ] : (!emitc.array <2 xi32 >, index ) -> !emitc.lvalue <i32 >
58+ emitc.assign %arg1 : i32 to %8 : !emitc.lvalue <i32 >
59+
3960 return
4061}
4162
42- // CPP-DEFAULT: void member_of_pointer(mystruct* [[V0:[^ ]*]], int32_t [[V1:[^ ]*]]) {
63+ // CPP-DEFAULT: void member_of_pointer(mystruct* [[V0:[^ ]*]], int32_t [[V1:[^ ]*]], size_t [[Index:[^ ]*]] ) {
4364// CPP-DEFAULT-NEXT: mystruct* [[V2:[^ ]*]];
4465// CPP-DEFAULT-NEXT: [[V2]] = [[V0]];
4566// CPP-DEFAULT-NEXT: [[V2]]->a = [[V1]];
4667// CPP-DEFAULT-NEXT: int32_t [[V3:[^ ]*]] = [[V2]]->b;
4768// CPP-DEFAULT-NEXT: int32_t [[V4:[^ ]*]];
4869// CPP-DEFAULT-NEXT: [[V4]] = [[V3]];
49-
70+ // CPP-DEFAULT-NEXT: int32_t [[V5:[^ ]*]] = [[V2]]->c[[[Index]]];
71+ // CPP-DEFAULT-NEXT: [[V4]] = [[V5]];
72+ // CPP-DEFAULT-NEXT: [[V2]]->d[[[Index]]] = [[V1]];
0 commit comments