1
1
// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s
2
2
3
- // CHECK: int32_t lvalue_variables(
4
3
emitc.func @lvalue_variables (%v1: i32 , %v2: i32 ) -> i32 {
5
4
%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 >
8
7
%addr = emitc.apply " &" (%variable ) : (!emitc.lvalue <i32 >) -> !emitc.ptr <i32 >
9
8
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 >
11
10
%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 >
13
12
emitc.return %updated_val : i32
14
- // dealloc effect through automatic allocation scope
15
13
}
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
+
16
26
17
27
emitc.func @zero (%arg0: !emitc.ptr <i32 >) {
18
28
%0 = " emitc.constant" () {value = 0 : i32 } : () -> i32
19
29
%1 = emitc.apply " *" (%arg0 ) : (!emitc.ptr <i32 >) -> !emitc.lvalue <i32 >
20
30
emitc.assign %0 : i32 to %1 : !emitc.lvalue <i32 >
21
31
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