aarch64: Deduplicate bmask lowering rule (#5154)
This commit is contained in:
@@ -3531,19 +3531,11 @@
|
|||||||
(combined Reg (orr $I64 lo hi)))
|
(combined Reg (orr $I64 lo hi)))
|
||||||
(lower_bmask ty $I64 (value_reg combined))))
|
(lower_bmask ty $I64 (value_reg combined))))
|
||||||
|
|
||||||
;; For converting from a smaller type into i128, duplicate the result of
|
;; For converting from any type into i128, duplicate the result of
|
||||||
;; converting to i64.
|
;; converting to i64.
|
||||||
(rule 2
|
(rule 2
|
||||||
(lower_bmask $I128 (fits_in_64 ty) val)
|
(lower_bmask $I128 in_ty val)
|
||||||
(let ((res ValueRegs (lower_bmask $I64 ty val))
|
(let ((res ValueRegs (lower_bmask $I64 in_ty val))
|
||||||
(res Reg (value_regs_get res 0)))
|
|
||||||
(value_regs res res)))
|
|
||||||
|
|
||||||
;; For conversions to a 128-bit mask, we duplicate the result of converting to
|
|
||||||
;; an I64.
|
|
||||||
(rule 3
|
|
||||||
(lower_bmask $I128 $I128 val)
|
|
||||||
(let ((res ValueRegs (lower_bmask $I64 $I128 val))
|
|
||||||
(res Reg (value_regs_get res 0)))
|
(res Reg (value_regs_get res 0)))
|
||||||
(value_regs res res)))
|
(value_regs res res)))
|
||||||
|
|
||||||
@@ -3553,7 +3545,7 @@
|
|||||||
;; and tmp, val, #ty_mask
|
;; and tmp, val, #ty_mask
|
||||||
;; cmp tmp, #0
|
;; cmp tmp, #0
|
||||||
;; csetm res, ne
|
;; csetm res, ne
|
||||||
(rule 4
|
(rule 3
|
||||||
(lower_bmask out_ty (fits_in_16 in_ty) val)
|
(lower_bmask out_ty (fits_in_16 in_ty) val)
|
||||||
(let ((mask_bits ImmLogic (imm_logic_from_u64 $I32 (ty_mask in_ty)))
|
(let ((mask_bits ImmLogic (imm_logic_from_u64 $I32 (ty_mask in_ty)))
|
||||||
(masked Reg (and_imm $I32 (value_regs_get val 0) mask_bits)))
|
(masked Reg (and_imm $I32 (value_regs_get val 0) mask_bits)))
|
||||||
|
|||||||
Reference in New Issue
Block a user