From: Michael Beck Date: Thu, 18 Nov 2004 17:10:59 +0000 (+0000) Subject: Allow to restrict the construction of Mulh nodes by the bit size. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=65794112675868da44f645b9f4b93fc7e0fd6744;p=libfirm Allow to restrict the construction of Mulh nodes by the bit size. Needed to avoid Mulh dor L(s|u) modes [r4431] --- diff --git a/ir/ir/irarch.c b/ir/ir/irarch.c index ab66f3615..066010519 100644 --- a/ir/ir/irarch.c +++ b/ir/ir/irarch.c @@ -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) { diff --git a/ir/ir/irarch.h b/ir/ir/irarch.h index 4aee97b82..564b00319 100644 --- a/ir/ir/irarch.h +++ b/ir/ir/irarch.h @@ -17,16 +17,18 @@ * 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; /**