projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
051f448
)
try to avoid creation of float Psis
author
Matthias Braun
<matze@braunis.de>
Thu, 12 Jul 2007 21:28:37 +0000
(21:28 +0000)
committer
Matthias Braun
<matze@braunis.de>
Thu, 12 Jul 2007 21:28:37 +0000
(21:28 +0000)
[r15100]
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
b097166
..
b83bffe
100644
(file)
--- a/
ir/be/ia32/bearch_ia32.c
+++ b/
ir/be/ia32/bearch_ia32.c
@@
-1877,19
+1877,24
@@
static int ia32_is_psi_allowed(ir_node *sel, ir_node *phi_list, int i, int j)
(void)i;
(void)j;
(void)i;
(void)j;
-/* we don't want long long and floating point Psi */
-#define IS_BAD_PSI_MODE(mode) (mode_is_float(mode) || get_mode_size_bits(mode) > 32)
+ if(is_Proj(sel)) {
+ ir_node *pred = get_Proj_pred(sel);
+ if(is_Cmp(pred)) {
+ ir_node *left = get_Cmp_left(pred);
+ ir_mode *cmp_mode = get_irn_mode(left);
+ if(mode_is_float(cmp_mode))
+ return 0;
+ }
+ }
/* check the Phi nodes */
for (phi = phi_list; phi; phi = get_irn_link(phi)) {
ir_mode *mode = get_irn_mode(phi);
/* check the Phi nodes */
for (phi = phi_list; phi; phi = get_irn_link(phi)) {
ir_mode *mode = get_irn_mode(phi);
- if (
IS_BAD_PSI_MODE(mode)
)
+ if (
mode_is_float(mode) || get_mode_size_bits(mode) > 32
)
return 0;
}
return 0;
}
-#undef IS_BAD_PSI_MODE
-
return 1;
}
return 1;
}