11// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s
22
3- // CHECK: int32_t lvalue_variables(
43emitc.func @lvalue_variables (%v1: i32 , %v2: i32 ) -> i32 {
54 %val = emitc.mul %v1 , %v2 : (i32 , i32 ) -> i32
6- %variable = " emitc.variable" () {value = #emitc.opaque <" " >} : () -> !emitc.lvalue <i32 > // alloc effect
7- emitc.assign %val : i32 to %variable : !emitc.lvalue <i32 > // write effect
5+ %variable = " emitc.variable" () {value = #emitc.opaque <" " >} : () -> !emitc.lvalue <i32 >
6+ emitc.assign %val : i32 to %variable : !emitc.lvalue <i32 >
87 %addr = emitc.apply " &" (%variable ) : (!emitc.lvalue <i32 >) -> !emitc.ptr <i32 >
98 emitc.call @zero (%addr ) : (!emitc.ptr <i32 >) -> ()
10- %updated_val = emitc.lvalue_load %variable : !emitc.lvalue <i32 > // read effect, (noop in emitter?)
9+ %updated_val = emitc.lvalue_load %variable : !emitc.lvalue <i32 >
1110 %neg_one = " emitc.constant" () {value = -1 : i32 } : () -> i32
12- emitc.assign %neg_one : i32 to %variable : !emitc.lvalue <i32 > // invalidates %updated_val
11+ emitc.assign %neg_one : i32 to %variable : !emitc.lvalue <i32 >
1312 emitc.return %updated_val : i32
14- // dealloc effect through automatic allocation scope
1513}
14+ // CHECK-LABEL: int32_t lvalue_variables(
15+ // CHECK-SAME: int32_t [[V1:[^ ]*]], int32_t [[V2:[^ ]*]])
16+ // CHECK-NEXT: int32_t [[VAL:[^ ]*]] = [[V1]] * [[V2]];
17+ // CHECK-NEXT: int32_t [[VAR:[^ ]*]];
18+ // CHECK-NEXT: [[VAR]] = [[VAL]];
19+ // CHECK-NEXT: int32_t* [[VAR_PTR:[^ ]*]] = &[[VAR]];
20+ // CHECK-NEXT: zero([[VAR_PTR]]);
21+ // CHECK-NEXT: int32_t [[VAR_LOAD:[^ ]*]] = [[VAR]];
22+ // CHECK-NEXT: int32_t [[NEG_ONE:[^ ]*]] = -1;
23+ // CHECK-NEXT: [[VAR]] = [[NEG_ONE]];
24+ // CHECK-NEXT: return [[VAR_LOAD]];
25+
1626
1727emitc.func @zero (%arg0: !emitc.ptr <i32 >) {
1828 %0 = " emitc.constant" () {value = 0 : i32 } : () -> i32
1929 %1 = emitc.apply " *" (%arg0 ) : (!emitc.ptr <i32 >) -> !emitc.lvalue <i32 >
2030 emitc.assign %0 : i32 to %1 : !emitc.lvalue <i32 >
2131 emitc.return
22- }
32+ }
33+ // CHECK-LABEL: void zero(
34+ // CHECK-SAME: int32_t* [[V1:[^ ]*]])
35+ // CHECK-NEXT: int32_t [[V2:[^ ]*]] = 0;
36+ // CHECK-NEXT: *[[V1]] = [[V2]];
37+ // CHEC-NEXT: return;
0 commit comments