projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add basic optimizations based on vrp info
[libfirm]
/
ir
/
ir
/
irmode.c
diff --git
a/ir/ir/irmode.c
b/ir/ir/irmode.c
index
bce0814
..
88f6c6e
100644
(file)
--- a/
ir/ir/irmode.c
+++ b/
ir/ir/irmode.c
@@
-255,6
+255,7
@@
static ir_mode *register_mode(const ir_mode *new_mode) {
ARR_APP1(ir_mode*, mode_list, mode);
mode->kind = k_ir_mode;
ARR_APP1(ir_mode*, mode_list, mode);
mode->kind = k_ir_mode;
+ mode->type = new_type_primitive(mode);
/* add the new mode to the irp list of modes */
add_irp_mode(mode);
/* add the new mode to the irp list of modes */
add_irp_mode(mode);
@@
-278,7
+279,8
@@
ir_mode *new_ir_mode(const char *name, ir_mode_sort sort, int bit_size, int sign
mode_tmpl.sort = sort;
mode_tmpl.size = bit_size;
mode_tmpl.sign = sign ? 1 : 0;
mode_tmpl.sort = sort;
mode_tmpl.size = bit_size;
mode_tmpl.sign = sign ? 1 : 0;
- mode_tmpl.modulo_shift = (mode_tmpl.sort == irms_int_number) ? modulo_shift : 0;
+ mode_tmpl.modulo_shift = (mode_tmpl.sort == irms_int_number ||
+ mode_tmpl.sort == irms_reference) ? modulo_shift : 0;
mode_tmpl.vector_elem = 1;
mode_tmpl.arithmetic = arithmetic;
mode_tmpl.link = NULL;
mode_tmpl.vector_elem = 1;
mode_tmpl.arithmetic = arithmetic;
mode_tmpl.link = NULL;
@@
-807,7
+809,7
@@
void init_mode(void) {
newmode.name = new_id_from_chars("P", 1);
newmode.sign = 0;
newmode.size = 32;
newmode.name = new_id_from_chars("P", 1);
newmode.sign = 0;
newmode.size = 32;
- newmode.modulo_shift =
0
;
+ newmode.modulo_shift =
32
;
newmode.eq_signed = mode_Is;
newmode.eq_unsigned = mode_Iu;
mode_P = register_mode(&newmode);
newmode.eq_signed = mode_Is;
newmode.eq_unsigned = mode_Iu;
mode_P = register_mode(&newmode);