1
- // RUN: mlir-opt %s -inline | FileCheck %s
1
+ // RUN: mlir-opt %s -inline -split-input-file | FileCheck %s
2
2
3
- // CHECK-LABEL: func.func @test_inline() -> i32 {
4
- // CHECK-NEXT: %[[RES:.*]] = llvm.mlir.constant(42 : i32) : i32
3
+ func.func @inner_func_inlinable (%ptr : !llvm.ptr ) -> i32 {
4
+ %0 = llvm.mlir.constant (42 : i32 ) : i32
5
+ llvm.store %0 , %ptr { alignment = 8 } : i32 , !llvm.ptr
6
+ %1 = llvm.load %ptr { alignment = 8 } : !llvm.ptr -> i32
7
+ return %1 : i32
8
+ }
9
+
10
+ // CHECK-LABEL: func.func @test_inline(
11
+ // CHECK-SAME: %[[PTR:[a-zA-Z0-9_]+]]
12
+ // CHECK-NEXT: %[[CST:.*]] = llvm.mlir.constant(42 : i32) : i32
13
+ // CHECK-NEXT: llvm.store %[[CST]], %[[PTR]]
14
+ // CHECK-NEXT: %[[RES:.+]] = llvm.load %[[PTR]]
5
15
// CHECK-NEXT: return %[[RES]] : i32
6
- func.func @test_inline () -> i32 {
7
- %0 = call @inner_func_inlinable () : () -> i32
16
+ func.func @test_inline (%ptr : !llvm.ptr ) -> i32 {
17
+ %0 = call @inner_func_inlinable (%ptr ) : (!llvm.ptr ) -> i32
8
18
return %0 : i32
9
19
}
10
20
11
- func.func @inner_func_inlinable () -> i32 {
12
- %0 = llvm.mlir.constant (42 : i32 ) : i32
13
- return %0 : i32
21
+ // -----
22
+
23
+ func.func @inner_func_not_inlinable () -> !llvm.ptr <f64 > {
24
+ %0 = llvm.mlir.constant (0 : i32 ) : i32
25
+ %1 = llvm.alloca %0 x f64 : (i32 ) -> !llvm.ptr <f64 >
26
+ return %1 : !llvm.ptr <f64 >
14
27
}
15
28
16
29
// CHECK-LABEL: func.func @test_not_inline() -> !llvm.ptr<f64> {
@@ -21,8 +34,25 @@ func.func @test_not_inline() -> !llvm.ptr<f64> {
21
34
return %0 : !llvm.ptr <f64 >
22
35
}
23
36
24
- func.func @inner_func_not_inlinable () -> !llvm.ptr <f64 > {
25
- %0 = llvm.mlir.constant (0 : i32 ) : i32
26
- %1 = llvm.alloca %0 x f64 : (i32 ) -> !llvm.ptr <f64 >
27
- return %1 : !llvm.ptr <f64 >
37
+ // -----
38
+
39
+ llvm.metadata @metadata {
40
+ llvm.access_group @group
41
+ llvm.return
42
+ }
43
+
44
+ func.func private @with_mem_attr (%ptr : !llvm.ptr ) -> () {
45
+ %0 = llvm.mlir.constant (42 : i32 ) : i32
46
+ // Do not inline load/store operations that carry attributes requiring
47
+ // handling while inlining, until this is supported by the inliner.
48
+ llvm.store %0 , %ptr { access_groups = [@metadata ::@group ] }: i32 , !llvm.ptr
49
+ return
50
+ }
51
+
52
+ // CHECK-LABEL: func.func @test_not_inline
53
+ // CHECK-NEXT: call @with_mem_attr
54
+ // CHECK-NEXT: return
55
+ func.func @test_not_inline (%ptr : !llvm.ptr ) -> () {
56
+ call @with_mem_attr (%ptr ) : (!llvm.ptr ) -> ()
57
+ return
28
58
}
0 commit comments