Skip to content

Commit 7052691

Browse files
committed
Removed implicit float promotion in FpBinOp and FpBinPred
1 parent 1be5514 commit 7052691

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/ir/term/eval.rs

+18-14
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,6 @@ pub fn eval_op(op: &Op, args: &[&Value], var_vals: &FxHashMap<String, Value>) ->
241241
}
242242
}),
243243
Op::FpBinOp(o) => {
244-
// Promote to f64 if either operand is f64
245-
let promote_to_f64 =
246-
matches!(args[0], Value::F64(_)) || matches!(args[1], Value::F64(_));
247244
fn comp<T: Float>(a: T, b: T, op: FpBinOp) -> T {
248245
match op {
249246
FpBinOp::Add => a + b,
@@ -255,16 +252,20 @@ pub fn eval_op(op: &Op, args: &[&Value], var_vals: &FxHashMap<String, Value>) ->
255252
FpBinOp::Min => a.min(b),
256253
}
257254
}
258-
if promote_to_f64 {
259-
Value::F64(comp(args[0].as_f64(), args[1].as_f64(), *o))
260-
} else {
261-
Value::F32(comp(args[0].as_f32(), args[1].as_f32(), *o))
255+
match (args[0], args[1]) {
256+
(Value::F32(_), Value::F32(_)) => {
257+
Value::F32(comp(args[0].as_f32(), args[1].as_f32(), *o))
258+
}
259+
(Value::F64(_), Value::F64(_)) => {
260+
Value::F64(comp(args[0].as_f64(), args[1].as_f64(), *o))
261+
}
262+
_ => panic!(
263+
"Expected two F32 or F64, got LHS {} and RHS {}",
264+
args[0], args[1]
265+
),
262266
}
263267
}
264268
Op::FpBinPred(o) => Value::Bool({
265-
// Promote to f64 if either operand is f64
266-
let promote_to_f64 =
267-
matches!(args[0], Value::F64(_)) || matches!(args[1], Value::F64(_));
268269
fn comp<T: Float>(a: T, b: T, op: FpBinPred) -> bool {
269270
match op {
270271
FpBinPred::Le => a <= b,
@@ -274,10 +275,13 @@ pub fn eval_op(op: &Op, args: &[&Value], var_vals: &FxHashMap<String, Value>) ->
274275
FpBinPred::Gt => a > b,
275276
}
276277
}
277-
if promote_to_f64 {
278-
comp(args[0].as_f64(), args[1].as_f64(), *o)
279-
} else {
280-
comp(args[0].as_f32(), args[1].as_f32(), *o)
278+
match (args[0], args[1]) {
279+
(Value::F32(_), Value::F32(_)) => comp(args[0].as_f32(), args[1].as_f32(), *o),
280+
(Value::F64(_), Value::F64(_)) => comp(args[0].as_f64(), args[1].as_f64(), *o),
281+
_ => panic!(
282+
"Expected two F32 or F64, got LHS {} and RHS {}",
283+
args[0], args[1]
284+
),
281285
}
282286
}),
283287
Op::FpUnPred(o) => Value::Bool({

0 commit comments

Comments
 (0)