Skip to content

Commit e5cdeb4

Browse files
s390x: replace type-based isa checks with if-let (#13171)
* s390x: replace type-based isa checks with if-let As a follow up to #13164, this changes the isa-extension checks in the s390x backend to match the style of the isa checks in the x64 backend. The prior style of ISA extension check dates back from prior to if-let as part of isle. * s390x: Replace true mie3_disabled with false mie3_enabled * s390x: Replace true mie4_disabled with false mie4_enabled * s390x: Replace true vxrs_ext2_disabled with false vxrs_ext2_enabled * s390x: Replace true vxrs_ext3_disabled with false vxrs_ext3_enabled * s390x: Rename mie3_enabled to has_mie3 This matches the backend flag, making it more clear where this comes from * s390x: Rename mie4_enabled to has_mie4 This matches the backend flag, making it more clear where this comes from * s390x: Rename vxrs_ext2_enabled to has_vxrs_ext2 This matches the backend flag, making it more clear where this comes from * s390x: Rename vxrs_ext3_enabled to has_vxrs_ext3 This matches the backend flag, making it more clear where this comes from
1 parent e3b373a commit e5cdeb4

3 files changed

Lines changed: 494 additions & 375 deletions

File tree

cranelift/codegen/src/isa/s390x/inst.isle

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,23 +1580,15 @@
15801580

15811581
;; Helpers for querying enabled ISA extensions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15821582

1583-
(decl mie3_enabled () Type)
1584-
(extern extractor mie3_enabled mie3_enabled)
1585-
(decl mie3_disabled () Type)
1586-
(extern extractor mie3_disabled mie3_disabled)
1587-
(decl mie4_enabled () Type)
1588-
(extern extractor mie4_enabled mie4_enabled)
1589-
(decl mie4_disabled () Type)
1590-
(extern extractor mie4_disabled mie4_disabled)
1591-
1592-
(decl vxrs_ext2_enabled () Type)
1593-
(extern extractor vxrs_ext2_enabled vxrs_ext2_enabled)
1594-
(decl vxrs_ext2_disabled () Type)
1595-
(extern extractor vxrs_ext2_disabled vxrs_ext2_disabled)
1596-
(decl vxrs_ext3_enabled () Type)
1597-
(extern extractor vxrs_ext3_enabled vxrs_ext3_enabled)
1598-
(decl vxrs_ext3_disabled () Type)
1599-
(extern extractor vxrs_ext3_disabled vxrs_ext3_disabled)
1583+
(decl pure has_mie3 () bool)
1584+
(extern constructor has_mie3 has_mie3)
1585+
(decl pure has_mie4 () bool)
1586+
(extern constructor has_mie4 has_mie4)
1587+
1588+
(decl pure has_vxrs_ext2 () bool)
1589+
(extern constructor has_vxrs_ext2 has_vxrs_ext2)
1590+
(decl pure has_vxrs_ext3 () bool)
1591+
(extern constructor has_vxrs_ext3 has_vxrs_ext3)
16001592

16011593
;; Helpers for SIMD lane number operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16021594

@@ -1945,27 +1937,37 @@
19451937
(memarg_reg_plus_reg_plus_off x y z flags))
19461938

19471939
(rule 1 (lower_address flags
1948-
(symbol_value _ (symbol_value_data name (RelocDistance.Near) sym_offset))
1949-
(i64_from_offset offset))
1940+
(symbol_value _ (symbol_value_data name (RelocDistance.Near) sym_offset))
1941+
(i64_from_offset offset))
19501942
(if-let final_offset (memarg_symbol_offset_sum offset sym_offset))
19511943
(memarg_symbol name final_offset flags))
19521944

1953-
(rule 2 (lower_address flags (has_type (mie4_enabled)
1945+
(rule 2 (lower_address flags
19541946
(iadd $I64 (ishl $I64 (uextend $I64 (iadd $I32 x (simm20_from_value z)))
1955-
(u8_from_value shift)) y)) (i64_from_offset offset))
1947+
(u8_from_value shift)) y)
1948+
(i64_from_offset offset))
1949+
(if-let true (has_mie4))
19561950
(memarg_reg_plus_off (load_logical_indexed_addr x y z shift) offset 0 flags))
19571951

1958-
(rule 3 (lower_address flags (has_type (mie4_enabled)
1952+
(rule 3 (lower_address flags
19591953
(iadd $I64 y (ishl $I64 (uextend $I64 (iadd $I32 x (simm20_from_value z)))
1960-
(u8_from_value shift)))) (i64_from_offset offset))
1954+
(u8_from_value shift)))
1955+
(i64_from_offset offset))
1956+
(if-let true (has_mie4))
19611957
(memarg_reg_plus_off (load_logical_indexed_addr y x z shift) offset 0 flags))
19621958

1963-
(rule 4 (lower_address flags (has_type (mie4_enabled)
1964-
(iadd $I64 (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z))) (u8_from_value shift)) y)) (i64_from_offset offset))
1959+
(rule 4 (lower_address flags
1960+
(iadd $I64 (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z)))
1961+
(u8_from_value shift)) y)
1962+
(i64_from_offset offset))
1963+
(if-let true (has_mie4))
19651964
(memarg_reg_plus_off (load_indexed_addr x y z shift) offset 0 flags))
19661965

1967-
(rule 5 (lower_address flags (has_type (mie4_enabled)
1968-
(iadd $I64 y (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z))) (u8_from_value shift)))) (i64_from_offset offset))
1966+
(rule 5 (lower_address flags
1967+
(iadd $I64 y (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z)))
1968+
(u8_from_value shift)))
1969+
(i64_from_offset offset))
1970+
(if-let true (has_mie4))
19691971
(memarg_reg_plus_off (load_indexed_addr y x z shift) offset 0 flags))
19701972

19711973
;; Lower an address plus a small bias into a `MemArg`.
@@ -4970,13 +4972,17 @@
49704972
;; Helpers for generating `fcvt_to_[us]int` instructions ;;;;;;;;;;;;;;;;;;;;;;;
49714973

49724974
(decl fcvt_flt_ty (Type Type) Type)
4973-
(rule 1 (fcvt_flt_ty (fits_in_32 ty) (and (vxrs_ext2_enabled) $F32)) $F32)
4975+
(rule 1 (fcvt_flt_ty (fits_in_32 ty) $F32)
4976+
(if-let true (has_vxrs_ext2))
4977+
$F32)
49744978
(rule (fcvt_flt_ty (fits_in_64 ty) $F32) $F64)
49754979
(rule (fcvt_flt_ty (fits_in_64 ty) $F64) $F64)
49764980
(rule (fcvt_flt_ty (fits_in_64 ty) $F128) $F128)
49774981

49784982
(decl fcvt_int_ty (Type Type) Type)
4979-
(rule 1 (fcvt_int_ty (fits_in_32 ty) (and (vxrs_ext2_enabled) $F32)) $I32)
4983+
(rule 1 (fcvt_int_ty (fits_in_32 ty) $F32)
4984+
(if-let true (has_vxrs_ext2))
4985+
$I32)
49804986
(rule (fcvt_int_ty (fits_in_64 ty) $F32) $I64)
49814987
(rule (fcvt_int_ty (fits_in_64 ty) $F64) $I64)
49824988
(rule 1 (fcvt_int_ty (fits_in_32 ty) $F128) $I32)

0 commit comments

Comments
 (0)