Remove unreachable x64 lowerings for iadd_imm (#4726)
All of the `*_imm` instructions are rewritten during legalization to an explicit `iconst` plus the general form of the operator, so backends never see them. Therefore these ISLE rules in the x64 backend can never match anything.
This commit is contained in:
@@ -189,37 +189,6 @@
|
|||||||
|
|
||||||
;; (No `iadd_ifcout` for `i128`.)
|
;; (No `iadd_ifcout` for `i128`.)
|
||||||
|
|
||||||
;;;; Rules for `iadd_imm` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
;; `i64` and smaller.
|
|
||||||
|
|
||||||
;; When the immediate fits in a `RegMemImm.Imm`, use that.
|
|
||||||
(rule (lower (has_type (fits_in_64 ty) (iadd_imm y (simm32_from_imm64 x))))
|
|
||||||
(x64_add ty y x))
|
|
||||||
|
|
||||||
;; Otherwise, put the immediate into a register.
|
|
||||||
(rule (lower (has_type (fits_in_64 ty) (iadd_imm y (u64_from_imm64 x))))
|
|
||||||
(x64_add ty y (imm ty x)))
|
|
||||||
|
|
||||||
;; `i128`
|
|
||||||
|
|
||||||
;; When the immediate fits in a `RegMemImm.Imm`, use that.
|
|
||||||
(rule (lower (has_type $I128 (iadd_imm y (simm32_from_imm64 x))))
|
|
||||||
(let ((y_regs ValueRegs y)
|
|
||||||
(y_lo Gpr (value_regs_get_gpr y_regs 0))
|
|
||||||
(y_hi Gpr (value_regs_get_gpr y_regs 1)))
|
|
||||||
(with_flags (x64_add_with_flags_paired $I64 y_lo x)
|
|
||||||
(x64_adc_paired $I64 y_hi (RegMemImm.Imm 0)))))
|
|
||||||
|
|
||||||
;; Otherwise, put the immediate into a register.
|
|
||||||
(rule (lower (has_type $I128 (iadd_imm y (u64_from_imm64 x))))
|
|
||||||
(let ((y_regs ValueRegs y)
|
|
||||||
(y_lo Gpr (value_regs_get_gpr y_regs 0))
|
|
||||||
(y_hi Gpr (value_regs_get_gpr y_regs 1))
|
|
||||||
(x_lo Gpr (imm $I64 x)))
|
|
||||||
(with_flags (x64_add_with_flags_paired $I64 y_lo x_lo)
|
|
||||||
(x64_adc_paired $I64 y_hi (RegMemImm.Imm 0)))))
|
|
||||||
|
|
||||||
;;;; Rules for `isub` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;; Rules for `isub` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; `i64` and smaller.
|
;; `i64` and smaller.
|
||||||
|
|||||||
Reference in New Issue
Block a user