33// CHECK: @foo = dso_local ifunc void (ptr, i32), ptr @resolve_foo
44llvm.mlir.ifunc external @foo : !llvm.func <void (ptr , i32 )>, !llvm.ptr @resolve_foo {dso_local }
55llvm.func @call_foo (%arg0: !llvm.ptr {llvm.noundef }, %arg1: i32 {llvm.noundef }) attributes {dso_local } {
6- %0 = llvm.mlir.constant (1 : i32 ) : i32
7- %1 = llvm.alloca %0 x !llvm.ptr {alignment = 8 : i64 } : (i32 ) -> !llvm.ptr
8- %2 = llvm.alloca %0 x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
9- llvm.store %arg0 , %1 {alignment = 8 : i64 } : !llvm.ptr , !llvm.ptr
10- llvm.store %arg1 , %2 {alignment = 4 : i64 } : i32 , !llvm.ptr
11- %3 = llvm.load %1 {alignment = 8 : i64 } : !llvm.ptr -> !llvm.ptr
12- %4 = llvm.load %2 {alignment = 4 : i64 } : !llvm.ptr -> i32
136// CHECK: call void @foo
14- llvm.call @foo (%3 , %4 ) : (!llvm.ptr {llvm.noundef }, i32 {llvm.noundef }) -> ()
7+ llvm.call @foo (%arg0 , %arg1 ) : (!llvm.ptr {llvm.noundef }, i32 {llvm.noundef }) -> ()
158 llvm.return
169}
17- llvm.func @call_indirect_foo (%arg0: !llvm.ptr {llvm.noundef }, %arg1: i32 {llvm.noundef }) attributes {dso_local } {
18- %0 = llvm.mlir.constant (1 : i32 ) : i32
10+ llvm.func @foo_fptr () -> !llvm.ptr attributes {dso_local } {
1911 %1 = llvm.mlir.addressof @foo : !llvm.ptr
20- %2 = llvm.alloca %0 x !llvm.ptr {alignment = 8 : i64 } : (i32 ) -> !llvm.ptr
21- %3 = llvm.alloca %0 x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
22- %4 = llvm.alloca %0 x !llvm.ptr {alignment = 8 : i64 } : (i32 ) -> !llvm.ptr
23- llvm.store %arg0 , %2 {alignment = 8 : i64 } : !llvm.ptr , !llvm.ptr
24- llvm.store %arg1 , %3 {alignment = 4 : i64 } : i32 , !llvm.ptr
25- // CHECK: store ptr @foo, ptr [[STORED:%[0-9]+]]
26- llvm.store %1 , %4 {alignment = 8 : i64 } : !llvm.ptr , !llvm.ptr
27- // CHECK: [[LOADED:%[0-9]+]] = load ptr, ptr [[STORED]]
28- %5 = llvm.load %4 {alignment = 8 : i64 } : !llvm.ptr -> !llvm.ptr
29- %6 = llvm.load %2 {alignment = 8 : i64 } : !llvm.ptr -> !llvm.ptr
30- %7 = llvm.load %3 {alignment = 4 : i64 } : !llvm.ptr -> i32
31- // CHECK: call void [[LOADED]]
32- llvm.call %5 (%6 , %7 ) : !llvm.ptr , (!llvm.ptr {llvm.noundef }, i32 {llvm.noundef }) -> ()
33- llvm.return
12+ // CHECK: ret ptr @foo
13+ llvm.return %1 : !llvm.ptr
3414}
3515llvm.func internal @resolve_foo () -> !llvm.ptr attributes {dso_local } {
3616 %0 = llvm.mlir.addressof @foo_1 : !llvm.ptr
@@ -62,7 +42,6 @@ llvm.func @resolver() -> !llvm.ptr {
6242// -----
6343
6444// CHECK: @ifunc = linkonce_odr hidden ifunc
65-
6645llvm.mlir.ifunc linkonce_odr hidden @ifunc : !llvm.func <f32 (i64 )>, !llvm.ptr @resolver {dso_local }
6746llvm.func @resolver () -> !llvm.ptr {
6847 %0 = llvm.mlir.constant (333 : i64 ) : i64
@@ -73,7 +52,6 @@ llvm.func @resolver() -> !llvm.ptr {
7352// -----
7453
7554// CHECK: @ifunc = private ifunc
76-
7755llvm.mlir.ifunc private @ifunc : !llvm.func <f32 (i64 )>, !llvm.ptr @resolver {dso_local }
7856llvm.func @resolver () -> !llvm.ptr {
7957 %0 = llvm.mlir.constant (333 : i64 ) : i64
@@ -84,7 +62,6 @@ llvm.func @resolver() -> !llvm.ptr {
8462// -----
8563
8664// CHECK: @ifunc = weak ifunc
87-
8865llvm.mlir.ifunc weak @ifunc : !llvm.func <f32 (i64 )>, !llvm.ptr @resolver
8966llvm.func @resolver () -> !llvm.ptr {
9067 %0 = llvm.mlir.constant (333 : i64 ) : i64
0 commit comments