Don't generate unnecessary let $arg=$arg for intrinsics

This commit is contained in:
bjorn3 2022-01-30 18:00:36 +01:00
parent 246998f5ec
commit 5efd7782b3
2 changed files with 6 additions and 10 deletions

View file

@ -52,8 +52,8 @@ pub(crate) fn codegen_llvm_intrinsic_call<'tcx>(
ret.write_cvalue(fx, res);
};
"llvm.x86.sse2.cmp.ps" | "llvm.x86.sse2.cmp.pd", (c x, c y, o kind) {
let kind_const = crate::constant::mir_operand_get_const_val(fx, kind).expect("llvm.x86.sse2.cmp.* kind not const");
let flt_cc = match kind_const.try_to_bits(Size::from_bytes(1)).unwrap_or_else(|| panic!("kind not scalar: {:?}", kind_const)) {
let kind = crate::constant::mir_operand_get_const_val(fx, kind).expect("llvm.x86.sse2.cmp.* kind not const");
let flt_cc = match kind.try_to_bits(Size::from_bytes(1)).unwrap_or_else(|| panic!("kind not scalar: {:?}", kind)) {
0 => FloatCC::Equal,
1 => FloatCC::LessThan,
2 => FloatCC::LessThanOrEqual,

View file

@ -31,14 +31,12 @@ macro intrinsic_pat {
}
macro intrinsic_arg {
(o $fx:expr, $arg:ident) => {
$arg
},
(o $fx:expr, $arg:ident) => {},
(c $fx:expr, $arg:ident) => {
codegen_operand($fx, $arg)
let $arg = codegen_operand($fx, $arg);
},
(v $fx:expr, $arg:ident) => {
codegen_operand($fx, $arg).load_scalar($fx)
let $arg = codegen_operand($fx, $arg).load_scalar($fx);
}
}
@ -52,9 +50,7 @@ macro intrinsic_match {
$(
$(intrinsic_pat!($($name).*))|* $(if $cond)? => {
if let [$($arg),*] = $args {
let ($($arg,)*) = (
$(intrinsic_arg!($a $fx, $arg),)*
);
$(intrinsic_arg!($a $fx, $arg);)*
$content
} else {
bug!("wrong number of args for intrinsic {:?}", $intrinsic);