| //@ compile-flags: -O -Zinline-mir=no -Cno-prepopulate-passes -Zmerge-functions=disabled |
| |
| #![crate_type = "lib"] |
| |
| // This test checks that we add inlinehint for #[inline], noinline for #[inline(never)], and |
| // alwaysinline for #[inline(always)] to call sites. |
| |
| #[unsafe(no_mangle)] |
| fn calls_something_noinline() { |
| // CHECK-LABEL @calls_something_noinline |
| // CHECK: call void @{{.*}}noinline_fn() #[[NOINLINE:[0-9]+]] |
| noinline_fn(); |
| } |
| |
| #[inline(never)] |
| fn noinline_fn() {} |
| |
| #[unsafe(no_mangle)] |
| fn calls_something_inline() { |
| // CHECK-LABEL @calls_something_inlinehint |
| // CHECK: call void @{{.*}}inlinehint_fn() #[[INLINEHINT:[0-9]+]] |
| inlinehint_fn(); |
| } |
| |
| #[inline] |
| fn inlinehint_fn() {} |
| |
| #[unsafe(no_mangle)] |
| fn calls_something_alwaysinline() { |
| // CHECK-LABEL @calls_something_alwaysinline |
| // CHECK: call void @{{.*}}alwaysinline_fn() #[[ALWAYSINLINE:[0-9]+]] |
| alwaysinline_fn(); |
| } |
| |
| #[inline(always)] |
| fn alwaysinline_fn() {} |
| |
| //CHECK: attributes #[[NOINLINE]] = {{{.*}} noinline {{.*}}} |
| //CHECK: attributes #[[INLINEHINT]] = {{{.*}} inlinehint {{.*}}} |
| //CHECK: attributes #[[ALWAYSINLINE]] = {{{.*}} alwaysinline {{.*}}} |