BugFix:
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 25 Feb 2008 16:14:20 +0000 (16:14 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Mon, 25 Feb 2008 16:14:20 +0000 (16:14 +0000)
 - ensure that elem_size has the right mode when doing pointer div
Opt:
 - use new DivRL()

[r18904]

ast2firm.c

index c8cf896..c8b4e72 100644 (file)
@@ -2097,10 +2097,11 @@ static ir_node *create_sub(const binary_expression_t *expression)
 
                ir_node *const elem_size = get_type_size(ptr_type->points_to);
                ir_mode *const mode      = get_ir_mode(type);
+               ir_node *const conv_size = new_d_Conv(dbgi, elem_size, mode);
                ir_node *const sub       = new_d_Sub(dbgi, left, right, mode);
                ir_node *const no_mem    = new_NoMem();
-               ir_node *const div       = new_d_Div(dbgi, no_mem, sub, elem_size, mode,
-                                                    op_pin_state_floats);
+               ir_node *const div       = new_d_DivRL(dbgi, no_mem, sub, conv_size, mode,
+                                                      op_pin_state_floats);
                return new_d_Proj(dbgi, div, mode, pn_Div_res);
        }