Enable mutable noalias by default for LLVM 12

We don't have any known noalias bugs for LLVM 12 ... yet.
This commit is contained in:
Nikita Popov 2021-03-18 22:50:58 +01:00
parent c3f9403f59
commit 39ed64399e
3 changed files with 14 additions and 16 deletions

View file

@ -1,6 +1,7 @@
use crate::builder::Builder;
use crate::context::CodegenCx;
use crate::llvm::{self, AttributePlace};
use crate::llvm_util;
use crate::type_::Type;
use crate::type_of::LayoutLlvmExt;
use crate::value::Value;
@ -51,18 +52,15 @@ pub trait ArgAttributesExt {
}
fn should_use_mutable_noalias(cx: &CodegenCx<'_, '_>) -> bool {
// Previously we would only emit noalias annotations for LLVM >= 6 or in
// panic=abort mode. That was deemed right, as prior versions had many bugs
// in conjunction with unwinding, but later versions didnt seem to have
// said issues. See issue #31681.
//
// Alas, later on we encountered a case where noalias would generate wrong
// code altogether even with recent versions of LLVM in *safe* code with no
// unwinding involved. See #54462.
//
// For now, do not enable mutable_noalias by default at all, while the
// issue is being figured out.
cx.tcx.sess.opts.debugging_opts.mutable_noalias.unwrap_or(false)
// LLVM prior to version 12 has known miscompiles in the presence of
// noalias attributes (see #54878). Only enable mutable noalias by
// default for versions we believe to be safe.
cx.tcx
.sess
.opts
.debugging_opts
.mutable_noalias
.unwrap_or_else(|| llvm_util::get_version() >= (12, 0, 0))
}
impl ArgAttributesExt for ArgAttributes {