Stop implementing _with_overflow intrinsics in codegen backends.
This commit is contained in:
parent
7e795bdf03
commit
9f6c1df872
3 changed files with 0 additions and 50 deletions
|
@ -493,20 +493,6 @@ fn codegen_regular_intrinsic_call<'tcx>(
|
||||||
let res = crate::num::codegen_int_binop(fx, bin_op, x, y);
|
let res = crate::num::codegen_int_binop(fx, bin_op, x, y);
|
||||||
ret.write_cvalue(fx, res);
|
ret.write_cvalue(fx, res);
|
||||||
}
|
}
|
||||||
sym::add_with_overflow | sym::sub_with_overflow | sym::mul_with_overflow => {
|
|
||||||
intrinsic_args!(fx, args => (x, y); intrinsic);
|
|
||||||
|
|
||||||
assert_eq!(x.layout().ty, y.layout().ty);
|
|
||||||
let bin_op = match intrinsic {
|
|
||||||
sym::add_with_overflow => BinOp::Add,
|
|
||||||
sym::sub_with_overflow => BinOp::Sub,
|
|
||||||
sym::mul_with_overflow => BinOp::Mul,
|
|
||||||
_ => unreachable!(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let res = crate::num::codegen_checked_int_binop(fx, bin_op, x, y);
|
|
||||||
ret.write_cvalue(fx, res);
|
|
||||||
}
|
|
||||||
sym::saturating_add | sym::saturating_sub => {
|
sym::saturating_add | sym::saturating_sub => {
|
||||||
intrinsic_args!(fx, args => (lhs, rhs); intrinsic);
|
intrinsic_args!(fx, args => (lhs, rhs); intrinsic);
|
||||||
|
|
||||||
|
|
|
@ -218,9 +218,6 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||||
args[1].val.unaligned_volatile_store(bx, dst);
|
args[1].val.unaligned_volatile_store(bx, dst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sym::add_with_overflow
|
|
||||||
| sym::sub_with_overflow
|
|
||||||
| sym::mul_with_overflow
|
|
||||||
| sym::unchecked_div
|
| sym::unchecked_div
|
||||||
| sym::unchecked_rem
|
| sym::unchecked_rem
|
||||||
| sym::unchecked_shl
|
| sym::unchecked_shl
|
||||||
|
@ -232,28 +229,6 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||||
let ty = arg_tys[0];
|
let ty = arg_tys[0];
|
||||||
match int_type_width_signed(ty, bx.tcx()) {
|
match int_type_width_signed(ty, bx.tcx()) {
|
||||||
Some((_width, signed)) => match name {
|
Some((_width, signed)) => match name {
|
||||||
sym::add_with_overflow
|
|
||||||
| sym::sub_with_overflow
|
|
||||||
| sym::mul_with_overflow => {
|
|
||||||
let op = match name {
|
|
||||||
sym::add_with_overflow => OverflowOp::Add,
|
|
||||||
sym::sub_with_overflow => OverflowOp::Sub,
|
|
||||||
sym::mul_with_overflow => OverflowOp::Mul,
|
|
||||||
_ => bug!(),
|
|
||||||
};
|
|
||||||
let (val, overflow) =
|
|
||||||
bx.checked_binop(op, ty, args[0].immediate(), args[1].immediate());
|
|
||||||
// Convert `i1` to a `bool`, and write it to the out parameter
|
|
||||||
let val = bx.from_immediate(val);
|
|
||||||
let overflow = bx.from_immediate(overflow);
|
|
||||||
|
|
||||||
let dest = result.project_field(bx, 0);
|
|
||||||
bx.store(val, dest.llval, dest.align);
|
|
||||||
let dest = result.project_field(bx, 1);
|
|
||||||
bx.store(overflow, dest.llval, dest.align);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
sym::exact_div => {
|
sym::exact_div => {
|
||||||
if signed {
|
if signed {
|
||||||
bx.exactsdiv(args[0].immediate(), args[1].immediate())
|
bx.exactsdiv(args[0].immediate(), args[1].immediate())
|
||||||
|
|
|
@ -210,17 +210,6 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
let out_val = numeric_intrinsic(intrinsic_name, bits, kind);
|
let out_val = numeric_intrinsic(intrinsic_name, bits, kind);
|
||||||
self.write_scalar(out_val, dest)?;
|
self.write_scalar(out_val, dest)?;
|
||||||
}
|
}
|
||||||
sym::add_with_overflow | sym::sub_with_overflow | sym::mul_with_overflow => {
|
|
||||||
let lhs = self.read_immediate(&args[0])?;
|
|
||||||
let rhs = self.read_immediate(&args[1])?;
|
|
||||||
let bin_op = match intrinsic_name {
|
|
||||||
sym::add_with_overflow => BinOp::Add,
|
|
||||||
sym::sub_with_overflow => BinOp::Sub,
|
|
||||||
sym::mul_with_overflow => BinOp::Mul,
|
|
||||||
_ => bug!(),
|
|
||||||
};
|
|
||||||
self.binop_with_overflow(bin_op, &lhs, &rhs, dest)?;
|
|
||||||
}
|
|
||||||
sym::saturating_add | sym::saturating_sub => {
|
sym::saturating_add | sym::saturating_sub => {
|
||||||
let l = self.read_immediate(&args[0])?;
|
let l = self.read_immediate(&args[0])?;
|
||||||
let r = self.read_immediate(&args[1])?;
|
let r = self.read_immediate(&args[1])?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue