1// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s -check-prefix=CPP-DEFAULT 2 3func.func @member(%arg0: !emitc.opaque<"mystruct">, %arg1: i32) { 4 %var0 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.lvalue<!emitc.opaque<"mystruct">> 5 emitc.assign %arg0 : !emitc.opaque<"mystruct"> to %var0 : !emitc.lvalue<!emitc.opaque<"mystruct">> 6 7 %0 = "emitc.member" (%var0) {member = "a"} : (!emitc.lvalue<!emitc.opaque<"mystruct">>) -> !emitc.lvalue<i32> 8 emitc.assign %arg1 : i32 to %0 : !emitc.lvalue<i32> 9 10 %1 = "emitc.member" (%var0) {member = "b"} : (!emitc.lvalue<!emitc.opaque<"mystruct">>) -> !emitc.lvalue<i32> 11 %2 = emitc.load %1 : !emitc.lvalue<i32> 12 %3 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.lvalue<i32> 13 emitc.assign %2 : i32 to %3 : !emitc.lvalue<i32> 14 15 return 16} 17 18// CPP-DEFAULT: void member(mystruct [[V0:[^ ]*]], int32_t [[V1:[^ ]*]]) { 19// CPP-DEFAULT-NEXT: mystruct [[V2:[^ ]*]]; 20// CPP-DEFAULT-NEXT: [[V2]] = [[V0]]; 21// CPP-DEFAULT-NEXT: [[V2]].a = [[V1]]; 22// CPP-DEFAULT-NEXT: int32_t [[V3:[^ ]*]] = [[V2]].b; 23// CPP-DEFAULT-NEXT: int32_t [[V4:[^ ]*]]; 24// CPP-DEFAULT-NEXT: [[V4]] = [[V3]]; 25 26 27func.func @member_of_pointer(%arg0: !emitc.ptr<!emitc.opaque<"mystruct">>, %arg1: i32) { 28 %var0 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.lvalue<!emitc.ptr<!emitc.opaque<"mystruct">>> 29 emitc.assign %arg0 : !emitc.ptr<!emitc.opaque<"mystruct">> to %var0 : !emitc.lvalue<!emitc.ptr<!emitc.opaque<"mystruct">>> 30 31 %0 = "emitc.member_of_ptr" (%var0) {member = "a"} : (!emitc.lvalue<!emitc.ptr<!emitc.opaque<"mystruct">>>) -> !emitc.lvalue<i32> 32 emitc.assign %arg1 : i32 to %0 : !emitc.lvalue<i32> 33 34 %1 = "emitc.member_of_ptr" (%var0) {member = "b"} : (!emitc.lvalue<!emitc.ptr<!emitc.opaque<"mystruct">>>) -> !emitc.lvalue<i32> 35 %2 = emitc.load %1 : !emitc.lvalue<i32> 36 %3 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.lvalue<i32> 37 emitc.assign %2 : i32 to %3 : !emitc.lvalue<i32> 38 39 return 40} 41 42// CPP-DEFAULT: void member_of_pointer(mystruct* [[V0:[^ ]*]], int32_t [[V1:[^ ]*]]) { 43// CPP-DEFAULT-NEXT: mystruct* [[V2:[^ ]*]]; 44// CPP-DEFAULT-NEXT: [[V2]] = [[V0]]; 45// CPP-DEFAULT-NEXT: [[V2]]->a = [[V1]]; 46// CPP-DEFAULT-NEXT: int32_t [[V3:[^ ]*]] = [[V2]]->b; 47// CPP-DEFAULT-NEXT: int32_t [[V4:[^ ]*]]; 48// CPP-DEFAULT-NEXT: [[V4]] = [[V3]]; 49 50