Hi,
For a private target that i am porting in GCC 4.5 I have the following
pattern in my md file for call value:
(define_insn "call_value_op"
[(set (match_operand 0 "register_operand" "=da")
(call (mem:QI (match_operand:QI 1 "call_operand" "Wd"))
(match_operand:QI 2 "" "")))]
""
"jsr\\t%1"
[(set_attr "slottable" "has_slot")]
)
All the constraints are one letter constraints for my target. Here 'W'
is for symbol_ref and all others are register constraints. So for a
particular combination when operand 0 is 'a' and operand 1 is 'W' i
got the following ICE :
error: unable to generate reloads for:
(call_insn 11 4 12 2 test.c:7 (set (reg:QI 12 as0)
(call (mem:QI (symbol_ref:QI ("malloc") [flags 0x41]
<function_decl 0x2b5733ff3600 __builtin_malloc>) [0 S1 A32])
(const_int 0 [0x0]))) 50 {call_value_op}
(expr_list:REG_DEAD (reg:QI 0 g0)
(expr_list:REG_EH_REGION (const_int 0 [0x0])
(nil)))
(expr_list:REG_DEP_TRUE (use (reg:QI 0 g0))
(nil)))
I get this ICE because the constraints are not matched properly. I ICE
goes away when i write the constraints as:
"=ad", "Wd"
or
"a,a,d,d," , "W,W,d,d"
So i have the following questions:
1. Why is that constraints are not matched here?
2. When can i combine the constrains?
Regards,
Shafi