Allow to restrict the construction of Mulh nodes by the bit size.
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 18 Nov 2004 17:10:59 +0000 (17:10 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 18 Nov 2004 17:10:59 +0000 (17:10 +0000)
Needed to avoid Mulh dor L(s|u) modes

[r4431]

ir/ir/irarch.c
ir/ir/irarch.h

index ab66f36..0660105 100644 (file)
@@ -883,11 +883,13 @@ void arch_dep_replace_divmod_by_const(ir_node **div, ir_node **mod, ir_node *irn
 
 
 static const arch_dep_params_t default_params = {
-  1, /* also use subs */
-  0, /* allow Mulhs */
-  0, /* allow Mulus */
-  4, /* maximum shifts */
-  31 /* maximum shift amount */
+  1,  /* also use subs */
+  4,  /* maximum shifts */
+  31, /* maximum shift amount */
+
+  0,  /* allow Mulhs */
+  0,  /* allow Mulus */
+  32  /* Mulh allowed up to 32 bit */
 };
 
 const arch_dep_params_t *arch_dep_default_factory(void) {
index 4aee97b..564b003 100644 (file)
  * optimizations.
  */
 typedef struct {
-  int also_use_subs : 1; /**< Use also Subs when resolving muls to shifts */
-  int allow_mulhs   : 1; /**< Use the Mulhs operation for division by constant */
-  int allow_mulhu   : 1; /**< Use the Mulhu operation for division by constant */
+  /* Mul optimization */
+  int also_use_subs : 1;                /**< Use also Subs when resolving muls to shifts */
+  int maximum_shifts;                   /**< The maximum number of shifts that shall be inserted for a mul. */
+  unsigned highest_shift_amount;        /**< The highest shift amount you want to
+                                            tolerate. Muls which would require a higher
+                                            shift constant are left. */
 
-  int maximum_shifts;    /**< The maximum number of shifts that shall be
-                           inserted for a mul. */
-
-  int highest_shift_amount; /**< The highest shift amount you want to
-                              tolerate. Muls which would require a higher
-                              shift constant are left. */
+  /* Div/Mod optimization */
+  int allow_mulhs   : 1;        /**< Use the Mulhs operation for division by constant */
+  int allow_mulhu   : 1;        /**< Use the Mulhu operation for division by constant */
+  unsigned max_bits_for_mulh;   /**< Maximum number of bits the Mulh operation can take.
+                                     Modes with higher amount of bits will use Mulh */
 } arch_dep_params_t;
 
 /**