@@ -719,7 +719,6 @@ static const char const_dbl_constraints[] = "GH";
719719
720720/* Summary data used to decide whether to output various functions and
721721 macro definitions. */
722- static unsigned int constraint_max_namelen;
723722static bool have_register_constraints;
724723static bool have_memory_constraints;
725724static bool have_special_memory_constraints;
@@ -942,7 +941,6 @@ add_constraint (const char *name, const char *regclass,
942941 *last_constraint_ptr = c;
943942 last_constraint_ptr = &c->next_textual ;
944943
945- constraint_max_namelen = MAX (constraint_max_namelen, strlen (name));
946944 have_register_constraints |= c->is_register ;
947945 have_const_int_constraints |= c->is_const_int ;
948946 have_extra_constraints |= c->is_extra ;
@@ -1563,133 +1561,124 @@ write_tm_preds_h (void)
15631561 " #endif\n "
15641562 " \n " );
15651563
1566- if (constraint_max_namelen > 0 )
1567- {
1568- write_enum_constraint_num ();
1569- puts (" extern enum constraint_num lookup_constraint_1 (const char *);\n "
1570- " extern const unsigned char lookup_constraint_array[];\n "
1564+ write_enum_constraint_num ();
1565+ puts (" extern enum constraint_num lookup_constraint_1 (const char *);\n "
1566+ " extern const unsigned char lookup_constraint_array[];\n "
1567+ " \n "
1568+ " /* Return the constraint at the beginning of P, or"
1569+ " CONSTRAINT__UNKNOWN if it\n "
1570+ " isn't recognized. */\n "
1571+ " \n "
1572+ " static inline enum constraint_num\n "
1573+ " lookup_constraint (const char *p)\n "
1574+ " {\n "
1575+ " unsigned int index = lookup_constraint_array"
1576+ " [(unsigned char) *p];\n "
1577+ " return (index == UCHAR_MAX\n "
1578+ " ? lookup_constraint_1 (p)\n "
1579+ " : (enum constraint_num) index);\n "
1580+ " }\n " );
1581+ if (satisfied_start == num_constraints)
1582+ puts (" /* Return true if X satisfies constraint C. */\n "
1583+ " \n "
1584+ " static inline bool\n "
1585+ " constraint_satisfied_p (rtx, enum constraint_num)\n "
1586+ " {\n "
1587+ " return false;\n "
1588+ " }\n " );
1589+ else
1590+ printf (" extern bool (*constraint_satisfied_p_array[]) (rtx);\n "
15711591 " \n "
1572- " /* Return the constraint at the beginning of P, or"
1573- " CONSTRAINT__UNKNOWN if it\n "
1574- " isn't recognized. */\n "
1592+ " /* Return true if X satisfies constraint C. */\n "
15751593 " \n "
1576- " static inline enum constraint_num\n "
1577- " lookup_constraint (const char *p)\n "
1578- " {\n "
1579- " unsigned int index = lookup_constraint_array"
1580- " [(unsigned char) *p];\n "
1581- " return (index == UCHAR_MAX\n "
1582- " ? lookup_constraint_1 (p)\n "
1583- " : (enum constraint_num) index);\n "
1584- " }\n " );
1585- if (satisfied_start == num_constraints)
1586- puts (" /* Return true if X satisfies constraint C. */\n "
1587- " \n "
1588- " static inline bool\n "
1589- " constraint_satisfied_p (rtx, enum constraint_num)\n "
1590- " {\n "
1591- " return false;\n "
1592- " }\n " );
1593- else
1594- printf (" extern bool (*constraint_satisfied_p_array[]) (rtx);\n "
1595- " \n "
1596- " /* Return true if X satisfies constraint C. */\n "
1597- " \n "
1598- " static inline bool\n "
1599- " constraint_satisfied_p (rtx x, enum constraint_num c)\n "
1600- " {\n "
1601- " int i = (int) c - (int) CONSTRAINT_%s;\n "
1602- " return i >= 0 && constraint_satisfied_p_array[i] (x);\n "
1603- " }\n "
1604- " \n " ,
1605- enum_order[satisfied_start]->name );
1606-
1607- write_range_function (" insn_extra_register_constraint" ,
1608- register_start, register_end);
1609- write_range_function (" insn_extra_memory_constraint" ,
1610- memory_start, memory_end);
1611- write_range_function (" insn_extra_special_memory_constraint" ,
1612- special_memory_start, special_memory_end);
1613- write_range_function (" insn_extra_relaxed_memory_constraint" ,
1614- relaxed_memory_start, relaxed_memory_end);
1615- write_range_function (" insn_extra_address_constraint" ,
1616- address_start, address_end);
1617- write_allows_reg_mem_function ();
1618-
1619- if (constraint_max_namelen > 1 )
1620- {
1621- write_insn_constraint_len ();
1622- puts (" #define CONSTRAINT_LEN(c_,s_) "
1623- " insn_constraint_len (c_,s_)\n " );
1624- }
1625- else
1626- puts (" #define CONSTRAINT_LEN(c_,s_) 1\n " );
1627- if (have_register_constraints)
1628- puts (" extern enum reg_class reg_class_for_constraint_1 "
1629- " (enum constraint_num);\n "
1630- " \n "
1631- " static inline enum reg_class\n "
1632- " reg_class_for_constraint (enum constraint_num c)\n "
1633- " {\n "
1634- " if (insn_extra_register_constraint (c))\n "
1635- " return reg_class_for_constraint_1 (c);\n "
1636- " return NO_REGS;\n "
1637- " }\n " );
1638- else
1639- puts (" static inline enum reg_class\n "
1640- " reg_class_for_constraint (enum constraint_num)\n "
1641- " {\n "
1642- " return NO_REGS;\n "
1643- " }\n " );
1644- if (have_const_int_constraints)
1645- puts (" extern bool insn_const_int_ok_for_constraint "
1646- " (HOST_WIDE_INT, enum constraint_num);\n "
1647- " #define CONST_OK_FOR_CONSTRAINT_P(v_,c_,s_) \\\n "
1648- " insn_const_int_ok_for_constraint (v_, "
1649- " lookup_constraint (s_))\n " );
1650- else
1651- puts (" static inline bool\n "
1652- " insn_const_int_ok_for_constraint (HOST_WIDE_INT,"
1653- " enum constraint_num)\n "
1654- " {\n "
1655- " return false;\n "
1656- " }\n " );
1657-
1658- puts (" enum constraint_type\n "
1594+ " static inline bool\n "
1595+ " constraint_satisfied_p (rtx x, enum constraint_num c)\n "
16591596 " {\n "
1660- " CT_REGISTER,\n "
1661- " CT_CONST_INT,\n "
1662- " CT_MEMORY,\n "
1663- " CT_SPECIAL_MEMORY,\n "
1664- " CT_RELAXED_MEMORY,\n "
1665- " CT_ADDRESS,\n "
1666- " CT_FIXED_FORM\n "
1667- " };\n "
1668- " \n "
1669- " static inline enum constraint_type\n "
1670- " get_constraint_type (enum constraint_num c)\n "
1671- " {" );
1672- auto_vec <std::pair <unsigned int , const char *>, 4 > values;
1673- if (const_int_start != const_int_end)
1674- values.safe_push (std::make_pair (const_int_start, " CT_CONST_INT" ));
1675- if (memory_start != memory_end)
1676- values.safe_push (std::make_pair (memory_start, " CT_MEMORY" ));
1677- if (special_memory_start != special_memory_end)
1678- values.safe_push (std::make_pair (special_memory_start,
1679- " CT_SPECIAL_MEMORY" ));
1680- if (relaxed_memory_start != relaxed_memory_end)
1681- values.safe_push (std::make_pair (relaxed_memory_start,
1682- " CT_RELAXED_MEMORY" ));
1683- if (address_start != address_end)
1684- values.safe_push (std::make_pair (address_start, " CT_ADDRESS" ));
1685- if (address_end != num_constraints)
1686- values.safe_push (std::make_pair (address_end, " CT_FIXED_FORM" ));
1687- print_type_tree (values, 0 , values.length (), " CT_REGISTER" , 2 );
1688- puts (" }" );
1689-
1690- write_get_register_filter ();
1691- write_get_register_filter_id ();
1692- }
1597+ " int i = (int) c - (int) CONSTRAINT_%s;\n "
1598+ " return i >= 0 && constraint_satisfied_p_array[i] (x);\n "
1599+ " }\n "
1600+ " \n " ,
1601+ enum_order[satisfied_start]->name );
1602+
1603+ write_range_function (" insn_extra_register_constraint" ,
1604+ register_start, register_end);
1605+ write_range_function (" insn_extra_memory_constraint" ,
1606+ memory_start, memory_end);
1607+ write_range_function (" insn_extra_special_memory_constraint" ,
1608+ special_memory_start, special_memory_end);
1609+ write_range_function (" insn_extra_relaxed_memory_constraint" ,
1610+ relaxed_memory_start, relaxed_memory_end);
1611+ write_range_function (" insn_extra_address_constraint" ,
1612+ address_start, address_end);
1613+ write_allows_reg_mem_function ();
1614+
1615+ write_insn_constraint_len ();
1616+ puts (" #define CONSTRAINT_LEN(c_,s_) insn_constraint_len (c_,s_)\n " );
1617+ if (have_register_constraints)
1618+ puts (" extern enum reg_class reg_class_for_constraint_1 "
1619+ " (enum constraint_num);\n "
1620+ " \n "
1621+ " static inline enum reg_class\n "
1622+ " reg_class_for_constraint (enum constraint_num c)\n "
1623+ " {\n "
1624+ " if (insn_extra_register_constraint (c))\n "
1625+ " return reg_class_for_constraint_1 (c);\n "
1626+ " return NO_REGS;\n "
1627+ " }\n " );
1628+ else
1629+ puts (" static inline enum reg_class\n "
1630+ " reg_class_for_constraint (enum constraint_num)\n "
1631+ " {\n "
1632+ " return NO_REGS;\n "
1633+ " }\n " );
1634+ if (have_const_int_constraints)
1635+ puts (" extern bool insn_const_int_ok_for_constraint "
1636+ " (HOST_WIDE_INT, enum constraint_num);\n "
1637+ " #define CONST_OK_FOR_CONSTRAINT_P(v_,c_,s_) \\\n "
1638+ " insn_const_int_ok_for_constraint (v_, "
1639+ " lookup_constraint (s_))\n " );
1640+ else
1641+ puts (" static inline bool\n "
1642+ " insn_const_int_ok_for_constraint (HOST_WIDE_INT,"
1643+ " enum constraint_num)\n "
1644+ " {\n "
1645+ " return false;\n "
1646+ " }\n " );
1647+
1648+ puts (" enum constraint_type\n "
1649+ " {\n "
1650+ " CT_REGISTER,\n "
1651+ " CT_CONST_INT,\n "
1652+ " CT_MEMORY,\n "
1653+ " CT_SPECIAL_MEMORY,\n "
1654+ " CT_RELAXED_MEMORY,\n "
1655+ " CT_ADDRESS,\n "
1656+ " CT_FIXED_FORM\n "
1657+ " };\n "
1658+ " \n "
1659+ " static inline enum constraint_type\n "
1660+ " get_constraint_type (enum constraint_num c)\n "
1661+ " {" );
1662+ auto_vec <std::pair <unsigned int , const char *>, 4 > values;
1663+ if (const_int_start != const_int_end)
1664+ values.safe_push (std::make_pair (const_int_start, " CT_CONST_INT" ));
1665+ if (memory_start != memory_end)
1666+ values.safe_push (std::make_pair (memory_start, " CT_MEMORY" ));
1667+ if (special_memory_start != special_memory_end)
1668+ values.safe_push (std::make_pair (special_memory_start,
1669+ " CT_SPECIAL_MEMORY" ));
1670+ if (relaxed_memory_start != relaxed_memory_end)
1671+ values.safe_push (std::make_pair (relaxed_memory_start,
1672+ " CT_RELAXED_MEMORY" ));
1673+ if (address_start != address_end)
1674+ values.safe_push (std::make_pair (address_start, " CT_ADDRESS" ));
1675+ if (address_end != num_constraints)
1676+ values.safe_push (std::make_pair (address_end, " CT_FIXED_FORM" ));
1677+ print_type_tree (values, 0 , values.length (), " CT_REGISTER" , 2 );
1678+ puts (" }" );
1679+
1680+ write_get_register_filter ();
1681+ write_get_register_filter_id ();
16931682
16941683 puts (" #endif /* tm-preds.h */" );
16951684}
@@ -1750,17 +1739,14 @@ write_insn_preds_c (void)
17501739 FOR_ALL_PREDICATES (p)
17511740 write_one_predicate_function (p);
17521741
1753- if (constraint_max_namelen > 0 )
1754- {
1755- write_lookup_constraint_1 ();
1756- write_lookup_constraint_array ();
1757- if (have_register_constraints)
1758- write_reg_class_for_constraint_1 ();
1759- write_constraint_satisfied_p_array ();
1760-
1761- if (have_const_int_constraints)
1762- write_insn_const_int_ok_for_constraint ();
1763- }
1742+ write_lookup_constraint_1 ();
1743+ write_lookup_constraint_array ();
1744+ if (have_register_constraints)
1745+ write_reg_class_for_constraint_1 ();
1746+ write_constraint_satisfied_p_array ();
1747+
1748+ if (have_const_int_constraints)
1749+ write_insn_const_int_ok_for_constraint ();
17641750
17651751 write_init_reg_class_start_regs ();
17661752}
0 commit comments