From b1b37f4aba38330a762e5eed521124ea9aee9f4a Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 26 Oct 2023 23:56:57 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20using=20emit=5Fcmp=20helper=20to=20?= =?UTF-8?q?refactor=20lowering=20of=20selection=20ins=E2=80=A6=20(#7344)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: using emit_cmp helper to refactor lowering of selection instruction on x64 * chore: remove space before paran --- cranelift/codegen/src/isa/x64/lower.isle | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cranelift/codegen/src/isa/x64/lower.isle b/cranelift/codegen/src/isa/x64/lower.isle index af11e659de..e0d17fe627 100644 --- a/cranelift/codegen/src/isa/x64/lower.isle +++ b/cranelift/codegen/src/isa/x64/lower.isle @@ -2082,8 +2082,7 @@ ;; than one instruction for certain types (e.g., XMM-held, I128). (rule (lower (has_type ty (select (maybe_uextend (icmp cc a @ (value_type (fits_in_64 a_ty)) b)) x y))) - (let ((size OperandSize (raw_operand_size_of_type a_ty))) - (with_flags (x64_cmp size b a) (cmove_from_values ty cc x y)))) + (lower_select_icmp ty (emit_cmp cc a b) x y)) ;; Finally, we lower `select` from a condition value `c`. These rules are meant ;; to be the final, default lowerings if no other patterns matched above. @@ -2099,6 +2098,10 @@ (let ((cond_result IcmpCondResult (cmp_zero_i128 (CC.Z) c))) (select_icmp cond_result x y))) +(decl lower_select_icmp (Type IcmpCondResult Value Value) InstOutput) +(rule (lower_select_icmp ty (IcmpCondResult.Condition flags cc) x y) + (with_flags flags (cmove_from_values ty cc x y))) + ;; Specializations for floating-point compares to generate a `mins*` or a ;; `maxs*` instruction. These are equivalent to the "pseudo-m{in,ax}" ;; specializations for vectors.