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