Skip to content

Commit 8bedfe7

Browse files
committed
testing if the intrinsics works when inlined
1 parent 7bbeffc commit 8bedfe7

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// compile-flags: -O
2+
#![crate_type = "lib"]
3+
#![feature(core_intrinsics)]
4+
5+
#[inline(never)]
6+
#[no_mangle]
7+
pub fn path_a() {
8+
println!("fast_path");
9+
}
10+
11+
#[inline(never)]
12+
#[no_mangle]
13+
pub fn path_b() {
14+
println!("slow_path");
15+
}
16+
17+
#[inline(always)]
18+
fn likely(b: bool) -> bool {
19+
std::intrinsics::likely(b)
20+
}
21+
22+
#[no_mangle]
23+
pub fn f(x: bool) {
24+
if likely(x) {
25+
path_a();
26+
} else {
27+
path_b();
28+
}
29+
}
30+
31+
// CHECK-LABEL: @f(
32+
// CHECK: br i1 %x, label %bb1, label %bb2, !prof ![[NUM:[0-9]+]]
33+
// CHECK: bb2:
34+
// CHECK: path_b
35+
// CHECK: bb1:
36+
// CHECK: path_a
37+
// CHECK: ![[NUM]] = !{!"branch_weights", i32 2000, i32 1}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// compile-flags: -O
2+
#![crate_type = "lib"]
3+
#![feature(core_intrinsics)]
4+
5+
#[inline(never)]
6+
#[no_mangle]
7+
pub fn path_a() {
8+
println!("fast_path");
9+
}
10+
11+
#[inline(never)]
12+
#[no_mangle]
13+
pub fn path_b() {
14+
println!("slow_path");
15+
}
16+
17+
#[inline(always)]
18+
fn unlikely(b: bool) -> bool {
19+
std::intrinsics::unlikely(b)
20+
}
21+
22+
#[no_mangle]
23+
pub fn f(x: bool) {
24+
if unlikely(x) {
25+
path_a();
26+
} else {
27+
path_b();
28+
}
29+
}
30+
31+
// CHECK-LABEL: @f(
32+
// CHECK: br i1 %x, label %bb1, label %bb2, !prof ![[NUM:[0-9]+]]
33+
// CHECK: bb2:
34+
// CHECK: path_b
35+
// CHECK: bb1:
36+
// CHECK: path_a
37+
// CHECK: ![[NUM]] = !{!"branch_weights", i32 1, i32 2000}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// compile-flags: -O
2+
#![crate_type = "lib"]
3+
#![feature(core_intrinsics)]
4+
5+
#[inline(never)]
6+
#[no_mangle]
7+
pub fn path_a() {
8+
println!("fast_path");
9+
}
10+
11+
#[inline(never)]
12+
#[no_mangle]
13+
pub fn path_b() {
14+
println!("slow_path");
15+
}
16+
17+
#[inline(always)]
18+
fn unpredictable(b: bool) -> bool {
19+
std::intrinsics::unpredictable(b)
20+
}
21+
22+
#[no_mangle]
23+
pub fn f(x: bool) {
24+
if unpredictable(x) {
25+
path_a();
26+
} else {
27+
path_b();
28+
}
29+
}
30+
31+
// CHECK-LABEL: @f(
32+
// CHECK: br i1 %x, label %bb1, label %bb2, !unpredictable
33+
// CHECK: bb2:
34+
// CHECK: path_b
35+
// CHECK: bb1:
36+
// CHECK: path_a

0 commit comments

Comments
 (0)