- if(nodes_interfere(chordal_env, phi, arg)) {
- /* Insert a duplicate in arguments block,
- * make it the new phi arg,
- * set its register,
- * insert it into schedule,
- * pin it
- */
- ir_node *dupl = be_new_Copy(cls, chordal_env->irg, arg_block, arg);
- assert(get_irn_mode(phi) == get_irn_mode(dupl));
+ if(values_interfere(phi, arg)) {
+ /*
+ Insert a duplicate in arguments block,
+ make it the new phi arg,
+ set its register,
+ insert it into schedule,
+ pin it
+ */
+ ir_node *dupl = be_new_Copy(cls, chordal_env->irg, arg_block, arg);
+
+ /* this is commented out because it will fail in case of unknown float */
+#if 0
+ ir_mode *m_phi = get_irn_mode(phi), *m_dupl = get_irn_mode(dupl);
+
+ /*
+ Conv signed <-> unsigned is killed on ia32
+ check for: (both int OR both float) AND equal mode sizes
+ */
+ assert(((mode_is_int(m_phi) && mode_is_int(m_dupl)) ||
+ (mode_is_float(m_phi) && mode_is_float(m_dupl))) &&
+ (get_mode_size_bits(m_phi) == get_mode_size_bits(m_dupl)));
+#endif /* if 0 */
+