Skip to content

Commit 02f7806

Browse files
committed
Auto merge of #124606 - scottmcm:less-expect, r=cjgillot
Stop `llvm.expect`ing assert terminators We're putting `llvm.expect` calls before the <https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.TerminatorKind.html#variant.Assert> terminators. But we don't need them. One of the arms is always to a panic function that's marked `#[cold]`, which is `cold` <https://llvm.org/docs/LangRef.html#function-attributes> in LLVM, which > When computing edge weights, basic blocks post-dominated by a cold function call are also considered to be cold; and, thus, given low weight. So even without us emitting the extra intrinsic call, LLVM knows what to expect for the `br`. Thus we can save the (small) effort of emitting it and then LLVM optimizing it out. r? compiler
2 parents e82c861 + c04b955 commit 02f7806

File tree

1 file changed

+2
-2
lines changed
  • compiler/rustc_codegen_ssa/src/mir

1 file changed

+2
-2
lines changed

compiler/rustc_codegen_ssa/src/mir/block.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -649,8 +649,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
649649
return helper.funclet_br(self, bx, target, mergeable_succ);
650650
}
651651

652-
// Pass the condition through llvm.expect for branch hinting.
653-
let cond = bx.expect(cond, expected);
652+
// Because we're branching to a panic block (either a `#[cold]` one
653+
// or an inlined abort), there's no need to `expect` it.
654654

655655
// Create the failure block and the conditional branch to it.
656656
let lltarget = helper.llbb_with_cleanup(self, target);

0 commit comments

Comments
 (0)