From 3f33fcbd30d6cf5151ed8185a566c6495e456bbd Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 27 Mar 2020 16:04:34 +0100 Subject: [PATCH] Avoid using select in bool_to_zero_or_max_uint It legalizes to a branch --- src/intrinsics/mod.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/intrinsics/mod.rs b/src/intrinsics/mod.rs index c6db8504a80e..6f6511ec14dd 100644 --- a/src/intrinsics/mod.rs +++ b/src/intrinsics/mod.rs @@ -225,12 +225,8 @@ fn bool_to_zero_or_max_uint<'tcx>( ty => ty, }; - let zero = fx.bcx.ins().iconst(int_ty, 0); - let max = fx - .bcx - .ins() - .iconst(int_ty, (u64::MAX >> (64 - int_ty.bits())) as i64); - let mut res = fx.bcx.ins().select(val, max, zero); + let val = fx.bcx.ins().bint(int_ty, val); + let mut res = fx.bcx.ins().ineg(val); if ty.is_float() { res = fx.bcx.ins().bitcast(ty, res);