diff options
| author | bors <bors@rust-lang.org> | 2024-05-05 01:06:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-05-05 01:06:22 +0000 |
| commit | 02f7806ecd641d67c8f046b073323c7e176ee6d2 (patch) | |
| tree | 69ae893721e115b094c514322858afe21ec98c30 /compiler/rustc_codegen_ssa/src | |
| parent | e82c861d7e5ecd766cb0dab0bf622445dec999dc (diff) | |
| parent | c04b95512dd5509129850d346c9847191d329687 (diff) | |
| download | rust-02f7806ecd641d67c8f046b073323c7e176ee6d2.tar.gz rust-02f7806ecd641d67c8f046b073323c7e176ee6d2.zip | |
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
Diffstat (limited to 'compiler/rustc_codegen_ssa/src')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/block.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/block.rs b/compiler/rustc_codegen_ssa/src/mir/block.rs index 26e429034dc..2f57695ac29 100644 --- a/compiler/rustc_codegen_ssa/src/mir/block.rs +++ b/compiler/rustc_codegen_ssa/src/mir/block.rs @@ -649,8 +649,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { return helper.funclet_br(self, bx, target, mergeable_succ); } - // Pass the condition through llvm.expect for branch hinting. - let cond = bx.expect(cond, expected); + // Because we're branching to a panic block (either a `#[cold]` one + // or an inlined abort), there's no need to `expect` it. // Create the failure block and the conditional branch to it. let lltarget = helper.llbb_with_cleanup(self, target); |
