Add basic optimizations based on vrp info
[libfirm] / ir / ir / irmode.c
index bce0814..88f6c6e 100644 (file)
@@ -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;
+       mode->type = new_type_primitive(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.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;
@@ -807,7 +809,7 @@ void init_mode(void) {
        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);