if (is_ia32_irn(irn)) {
irn_req = (pos >= 0) ? get_ia32_in_req(irn, pos) : get_ia32_out_req(irn, node_pos);
+ if (irn_req == NULL) {
+ /* no requirements */
+ return NULL;
+ }
DB((mod, LEVEL_1, "returning reqs for %+F at pos %d\n", irn, pos));
}
if (is_ia32_irn(irn)) {
- /* retrieve "real" x87 register */
- if (ia32_has_x87_register(irn))
- reg = get_ia32_attr(irn)->x87[pos + 2];
- else {
- const arch_register_t **slots;
- slots = get_ia32_slots(irn);
- reg = slots[pos];
- }
+ const arch_register_t **slots;
+ slots = get_ia32_slots(irn);
+ reg = slots[pos];
}
else {
reg = ia32_get_firm_reg(irn, cur_reg_set);
static arch_irn_flags_t ia32_get_flags(const void *self, const ir_node *irn) {
arch_irn_flags_t flags;
- ir_node *pred = is_Proj(irn) ? get_Proj_pred(irn) : NULL;
+ ir_node *pred = is_Proj(irn) && mode_is_datab(get_irn_mode(irn)) ? get_Proj_pred(irn) : NULL;
if (is_Unknown(irn))
flags = arch_irn_flags_ignore;