"Balaji V. Iyer" <[EMAIL PROTECTED]> writes: > Thank you very much Ian and Shreyas for your quick response. So I guess, > my question now would be, what would be an exmple that matches this > constraint below? > > ((insn 1497 1924 1756 2 (set (mem:BI (plus:SI (reg/f:SI 2 r2) > (const_int -137 [0xffffff77])) [72 S1 A8]) > (le:BI (reg:SI 12 r12) > (const_int 0 [0x0]))) 0 {*cmpsi_normal} > (insn_list:REG_DEP_TRUE 86 ( > nil)) > (nil))
I don't think that question makes sense, at least not without more context. A constraint is one of the letters which appears after the operand predicate in the .md file. For example, in (define_insn "*cmpsi_ccno_1" [(set (reg FLAGS_REG) (compare (match_operand:SI 0 "nonimmediate_operand" "r,?mr") (match_operand:SI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ test{l}\t{%0, %0|%0, %0} cmp{l}\t{%1, %0|%0, %1}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "SI")]) there are two alternative; the constraints on operand 0 are "r" for the first alternative and "?mr" for the second, and the constraints on operand 1 is "n" for both alternatives. The operand predicates are nonimmediate_operand for operand 0 and const0_operand for operand 1. When I said this: > > This kind of error generally means that the operand predicate accepts > > an operand which no constraint matches. If the predicate (e.g., > > register_operand) accepts an operand, then there must be a constraint > > that matches it. Otherwise you will get an error in > > constrain_operands, such as the above. I mean that, in the instruction above, any operand which matches nonimmediate_operand must be matched by at least one of the constraints 'm' or 'r', and any operand which matches const0_operand must match the constraint 'n'. Ian