projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ce8dca2
)
don't extend load_mode when folding reloads
author
Matthias Braun
<matze@braunis.de>
Thu, 4 Sep 2008 08:26:38 +0000
(08:26 +0000)
committer
Matthias Braun
<matze@braunis.de>
Thu, 4 Sep 2008 08:26:38 +0000
(08:26 +0000)
[r21683]
ir/be/ia32/bearch_ia32.c
patch
|
blob
|
history
diff --git
a/ir/be/ia32/bearch_ia32.c
b/ir/be/ia32/bearch_ia32.c
index
5923ae9
..
c071f54
100644
(file)
--- a/
ir/be/ia32/bearch_ia32.c
+++ b/
ir/be/ia32/bearch_ia32.c
@@
-839,6
+839,9
@@
static int ia32_possible_memory_operand(const ir_node *irn, unsigned int i) {
static void ia32_perform_memory_operand(ir_node *irn, ir_node *spill,
unsigned int i)
{
static void ia32_perform_memory_operand(ir_node *irn, ir_node *spill,
unsigned int i)
{
+ ir_mode *load_mode;
+ ir_mode *dest_op_mode;
+
ia32_code_gen_t *cg = ia32_current_cg;
assert(ia32_possible_memory_operand(irn, i) && "Cannot perform memory operand change");
ia32_code_gen_t *cg = ia32_current_cg;
assert(ia32_possible_memory_operand(irn, i) && "Cannot perform memory operand change");
@@
-848,7
+851,12
@@
static void ia32_perform_memory_operand(ir_node *irn, ir_node *spill,
}
set_ia32_op_type(irn, ia32_AddrModeS);
}
set_ia32_op_type(irn, ia32_AddrModeS);
- set_ia32_ls_mode(irn, get_irn_mode(get_irn_n(irn, i)));
+
+ load_mode = get_irn_mode(get_irn_n(irn, i));
+ dest_op_mode = get_ia32_ls_mode(irn);
+ if (get_mode_size_bits(load_mode) <= get_mode_size_bits(dest_op_mode)) {
+ set_ia32_ls_mode(irn, load_mode);
+ }
set_ia32_use_frame(irn);
set_ia32_need_stackent(irn);
set_ia32_use_frame(irn);
set_ia32_need_stackent(irn);