Skip to content

Commit

Permalink
refactor: using emit_cmp helper to refactor lowering of selection ins… (
Browse files Browse the repository at this point in the history
#7344)

* refactor: using emit_cmp helper to refactor lowering of selection instruction on x64

* chore: remove space before paran
  • Loading branch information
Solo-steven authored Oct 26, 2023
1 parent 0864eb0 commit b1b37f4
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions cranelift/codegen/src/isa/x64/lower.isle
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand Down

0 comments on commit b1b37f4

Please sign in to comment.