1
- // RUN: mlir-opt %s --pass-pipeline="builtin.module(llvm.func(mem2reg{region-simplify=false} ))" --split-input-file | FileCheck %s
1
+ // RUN: mlir-opt %s --pass-pipeline="builtin.module(llvm.func(mem2reg))" --split-input-file | FileCheck %s
2
2
3
3
// CHECK-LABEL: llvm.func @basic_memset
4
4
// CHECK-SAME: (%[[MEMSET_VALUE:.*]]: i8)
5
5
llvm.func @basic_memset (%memset_value: i8 ) -> i32 {
6
6
%0 = llvm.mlir.constant (1 : i32 ) : i32
7
7
%1 = llvm.alloca %0 x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
8
8
%memset_len = llvm.mlir.constant (4 : i32 ) : i32
9
- // CHECK-DAG: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
10
- // CHECK-DAG: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
11
9
" llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
12
10
// CHECK-NOT: "llvm.intr.memset"
13
11
// CHECK: %[[VALUE_8:.*]] = llvm.zext %[[MEMSET_VALUE]] : i8 to i32
12
+ // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
14
13
// CHECK: %[[SHIFTED_8:.*]] = llvm.shl %[[VALUE_8]], %[[C8]]
15
14
// CHECK: %[[VALUE_16:.*]] = llvm.or %[[VALUE_8]], %[[SHIFTED_8]]
15
+ // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
16
16
// CHECK: %[[SHIFTED_16:.*]] = llvm.shl %[[VALUE_16]], %[[C16]]
17
17
// CHECK: %[[VALUE_32:.*]] = llvm.or %[[VALUE_16]], %[[SHIFTED_16]]
18
18
// CHECK-NOT: "llvm.intr.memset"
@@ -31,7 +31,14 @@ llvm.func @basic_memset_constant() -> i32 {
31
31
%memset_len = llvm.mlir.constant (4 : i32 ) : i32
32
32
" llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
33
33
%2 = llvm.load %1 {alignment = 4 : i64 } : !llvm.ptr -> i32
34
- // CHECK: %[[RES:.*]] = llvm.mlir.constant(707406378 : i32) : i32
34
+ // CHECK: %[[C42:.*]] = llvm.mlir.constant(42 : i8) : i8
35
+ // CHECK: %[[VALUE_42:.*]] = llvm.zext %[[C42]] : i8 to i32
36
+ // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
37
+ // CHECK: %[[SHIFTED_42:.*]] = llvm.shl %[[VALUE_42]], %[[C8]] : i32
38
+ // CHECK: %[[OR0:.*]] = llvm.or %[[VALUE_42]], %[[SHIFTED_42]] : i32
39
+ // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
40
+ // CHECK: %[[SHIFTED:.*]] = llvm.shl %[[OR0]], %[[C16]] : i32
41
+ // CHECK: %[[RES:..*]] = llvm.or %[[OR0]], %[[SHIFTED]] : i32
35
42
// CHECK: llvm.return %[[RES]] : i32
36
43
llvm.return %2 : i32
37
44
}
@@ -44,16 +51,16 @@ llvm.func @exotic_target_memset(%memset_value: i8) -> i40 {
44
51
%0 = llvm.mlir.constant (1 : i32 ) : i32
45
52
%1 = llvm.alloca %0 x i40 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
46
53
%memset_len = llvm.mlir.constant (5 : i32 ) : i32
47
- // CHECK-DAG: %[[C8:.*]] = llvm.mlir.constant(8 : i40) : i40
48
- // CHECK-DAG: %[[C16:.*]] = llvm.mlir.constant(16 : i40) : i40
49
- // CHECK-DAG: %[[C32:.*]] = llvm.mlir.constant(32 : i40) : i40
50
54
" llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
51
55
// CHECK-NOT: "llvm.intr.memset"
52
56
// CHECK: %[[VALUE_8:.*]] = llvm.zext %[[MEMSET_VALUE]] : i8 to i40
57
+ // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i40) : i40
53
58
// CHECK: %[[SHIFTED_8:.*]] = llvm.shl %[[VALUE_8]], %[[C8]]
54
59
// CHECK: %[[VALUE_16:.*]] = llvm.or %[[VALUE_8]], %[[SHIFTED_8]]
60
+ // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i40) : i40
55
61
// CHECK: %[[SHIFTED_16:.*]] = llvm.shl %[[VALUE_16]], %[[C16]]
56
62
// CHECK: %[[VALUE_32:.*]] = llvm.or %[[VALUE_16]], %[[SHIFTED_16]]
63
+ // CHECK: %[[C32:.*]] = llvm.mlir.constant(32 : i40) : i40
57
64
// CHECK: %[[SHIFTED_COMPL:.*]] = llvm.shl %[[VALUE_32]], %[[C32]]
58
65
// CHECK: %[[VALUE_COMPL:.*]] = llvm.or %[[VALUE_32]], %[[SHIFTED_COMPL]]
59
66
// CHECK-NOT: "llvm.intr.memset"
@@ -64,21 +71,6 @@ llvm.func @exotic_target_memset(%memset_value: i8) -> i40 {
64
71
65
72
// -----
66
73
67
- // CHECK-LABEL: llvm.func @exotic_target_memset_constant
68
- llvm.func @exotic_target_memset_constant () -> i40 {
69
- %0 = llvm.mlir.constant (1 : i32 ) : i32
70
- %1 = llvm.alloca %0 x i40 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
71
- %memset_value = llvm.mlir.constant (42 : i8 ) : i8
72
- %memset_len = llvm.mlir.constant (5 : i32 ) : i32
73
- " llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
74
- %2 = llvm.load %1 {alignment = 4 : i64 } : !llvm.ptr -> i40
75
- // CHECK: %[[RES:.*]] = llvm.mlir.constant(181096032810 : i40) : i40
76
- // CHECK: llvm.return %[[RES]] : i40
77
- llvm.return %2 : i40
78
- }
79
-
80
- // -----
81
-
82
74
// CHECK-LABEL: llvm.func @no_volatile_memset
83
75
llvm.func @no_volatile_memset () -> i32 {
84
76
// CHECK-DAG: %[[ALLOCA_LEN:.*]] = llvm.mlir.constant(1 : i32) : i32
@@ -195,7 +187,7 @@ llvm.func @basic_memcpy_dest(%destination: !llvm.ptr) -> i32 {
195
187
// CHECK-LABEL: llvm.func @double_memcpy
196
188
llvm.func @double_memcpy () -> i32 {
197
189
%0 = llvm.mlir.constant (1 : i32 ) : i32
198
- // CHECK-NEXT : %[[DATA:.*]] = llvm.mlir.constant(42 : i32) : i32
190
+ // CHECK: %[[DATA:.*]] = llvm.mlir.constant(42 : i32) : i32
199
191
%data = llvm.mlir.constant (42 : i32 ) : i32
200
192
%is_volatile = llvm.mlir.constant (false ) : i1
201
193
%memcpy_len = llvm.mlir.constant (4 : i32 ) : i32
@@ -206,7 +198,7 @@ llvm.func @double_memcpy() -> i32 {
206
198
" llvm.intr.memcpy" (%2 , %1 , %memcpy_len ) <{isVolatile = false }> : (!llvm.ptr , !llvm.ptr , i32 ) -> ()
207
199
208
200
%res = llvm.load %2 : !llvm.ptr -> i32
209
- // CHECK-NEXT : llvm.return %[[DATA]] : i32
201
+ // CHECK: llvm.return %[[DATA]] : i32
210
202
llvm.return %res : i32
211
203
}
212
204
0 commit comments