Skip to content

Commit 18d7e5f

Browse files
Rollup merge of #157873 - xry111:mips-no-div-by-zero-trap, r=folkertdev
mips: set llvm_args -mno-check-zero-division for all mips targets In rust interger divide by zero is defined to panic, thus the inserted conditional trap should never trigger as the program should have panicked if the divisor is zero. So disable the insertion of the redundant conditional trap.
2 parents 5cdff6b + 3410d7f commit 18d7e5f

20 files changed

Lines changed: 167 additions & 20 deletions

compiler/rustc_target/src/spec/targets/mips64_openwrt_linux_musl.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use rustc_abi::Endian;
44

5-
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
5+
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
66

77
pub(crate) fn target() -> Target {
88
let mut base = base::linux_musl::opts();
@@ -28,6 +28,7 @@ pub(crate) fn target() -> Target {
2828
endian: Endian::Big,
2929
mcount: "_mcount".into(),
3030
llvm_abiname: LlvmAbi::N64,
31+
llvm_args: cvs!["-mno-check-zero-division"],
3132
..base
3233
},
3334
}

compiler/rustc_target/src/spec/targets/mips64_unknown_linux_gnuabi64.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_abi::Endian;
22

3-
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
3+
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
44

55
pub(crate) fn target() -> Target {
66
Target {
@@ -23,6 +23,7 @@ pub(crate) fn target() -> Target {
2323
max_atomic_width: Some(64),
2424
mcount: "_mcount".into(),
2525
llvm_abiname: LlvmAbi::N64,
26+
llvm_args: cvs!["-mno-check-zero-division"],
2627

2728
..base::linux_gnu::opts()
2829
},

compiler/rustc_target/src/spec/targets/mips64_unknown_linux_muslabi64.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_abi::Endian;
22

3-
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
3+
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
44

55
pub(crate) fn target() -> Target {
66
let mut base = base::linux_musl::opts();
@@ -24,6 +24,7 @@ pub(crate) fn target() -> Target {
2424
endian: Endian::Big,
2525
mcount: "_mcount".into(),
2626
llvm_abiname: LlvmAbi::N64,
27+
llvm_args: cvs!["-mno-check-zero-division"],
2728
..base
2829
},
2930
}

compiler/rustc_target/src/spec/targets/mips64el_unknown_linux_gnuabi64.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
1+
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
22

33
pub(crate) fn target() -> Target {
44
Target {
@@ -20,6 +20,7 @@ pub(crate) fn target() -> Target {
2020
max_atomic_width: Some(64),
2121
mcount: "_mcount".into(),
2222
llvm_abiname: LlvmAbi::N64,
23+
llvm_args: cvs!["-mno-check-zero-division"],
2324

2425
..base::linux_gnu::opts()
2526
},

compiler/rustc_target/src/spec/targets/mips64el_unknown_linux_muslabi64.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
1+
use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
22

33
pub(crate) fn target() -> Target {
44
let mut base = base::linux_musl::opts();
@@ -21,6 +21,7 @@ pub(crate) fn target() -> Target {
2121
cfg_abi: CfgAbi::Abi64,
2222
mcount: "_mcount".into(),
2323
llvm_abiname: LlvmAbi::N64,
24+
llvm_args: cvs!["-mno-check-zero-division"],
2425
..base
2526
},
2627
}

compiler/rustc_target/src/spec/targets/mips_mti_none_elf.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use rustc_abi::Endian;
22

33
use crate::spec::{
44
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target, TargetMetadata,
5-
TargetOptions,
5+
TargetOptions, cvs,
66
};
77

88
pub(crate) fn target() -> Target {
@@ -26,6 +26,7 @@ pub(crate) fn target() -> Target {
2626
cpu: "mips32r2".into(),
2727

2828
llvm_abiname: LlvmAbi::O32,
29+
llvm_args: cvs!["-mno-check-zero-division"],
2930
max_atomic_width: Some(32),
3031

3132
features: "+mips32r2,+soft-float,+noabicalls".into(),

compiler/rustc_target/src/spec/targets/mips_unknown_linux_gnu.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_abi::Endian;
22

3-
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
3+
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
44

55
pub(crate) fn target() -> Target {
66
Target {
@@ -19,6 +19,7 @@ pub(crate) fn target() -> Target {
1919
cpu: "mips32r2".into(),
2020
features: "+mips32r2,+fpxx,+nooddspreg".into(),
2121
llvm_abiname: LlvmAbi::O32,
22+
llvm_args: cvs!["-mno-check-zero-division"],
2223
max_atomic_width: Some(32),
2324
mcount: "_mcount".into(),
2425

compiler/rustc_target/src/spec/targets/mips_unknown_linux_musl.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_abi::Endian;
22

3-
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
3+
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
44

55
pub(crate) fn target() -> Target {
66
let mut base = base::linux_musl::opts();
@@ -21,6 +21,7 @@ pub(crate) fn target() -> Target {
2121
options: TargetOptions {
2222
endian: Endian::Big,
2323
llvm_abiname: LlvmAbi::O32,
24+
llvm_args: cvs!["-mno-check-zero-division"],
2425
mcount: "_mcount".into(),
2526
..base
2627
},

compiler/rustc_target/src/spec/targets/mips_unknown_linux_uclibc.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc_abi::Endian;
22

3-
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
3+
use crate::spec::{Arch, LlvmAbi, Target, TargetMetadata, TargetOptions, base, cvs};
44

55
pub(crate) fn target() -> Target {
66
Target {
@@ -19,6 +19,7 @@ pub(crate) fn target() -> Target {
1919
cpu: "mips32r2".into(),
2020
features: "+mips32r2,+soft-float".into(),
2121
llvm_abiname: LlvmAbi::O32,
22+
llvm_args: cvs!["-mno-check-zero-division"],
2223
max_atomic_width: Some(32),
2324
mcount: "_mcount".into(),
2425

compiler/rustc_target/src/spec/targets/mipsel_mti_none_elf.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use rustc_abi::Endian;
22

33
use crate::spec::{
44
Arch, Cc, LinkerFlavor, Lld, LlvmAbi, PanicStrategy, RelocModel, Target, TargetMetadata,
5-
TargetOptions,
5+
TargetOptions, cvs,
66
};
77

88
pub(crate) fn target() -> Target {
@@ -26,6 +26,7 @@ pub(crate) fn target() -> Target {
2626
cpu: "mips32r2".into(),
2727

2828
llvm_abiname: LlvmAbi::O32,
29+
llvm_args: cvs!["-mno-check-zero-division"],
2930
max_atomic_width: Some(32),
3031

3132
features: "+mips32r2,+soft-float,+noabicalls".into(),

0 commit comments

Comments
 (0)