Hi, I have a question regarding Plus reload situation I ran into in my port (which was taken from branch 4.6):
I got the following insn: Set d1 (plus r1 -96). d1 and r1 are 2 registers from different classes. The reload (which take place at: reload1.c , gen_reload(out = d1, in = (plus r1 -96)) try 3 options: 1. switch the plus operands: set d1 (plus -96 r1) 2. split into 2 insns - reload the const to d1 and then add r1: set d1 -96 set d1 (plus d1 r1) 3. split into 2 insns - copy r1 to d1 and then add the const: set d1 r1 set d1 (plus d1 -96) GCC tries generating the 1st option - and fails since no valid pattern is found. Then it tries generating the 2nd option and fails once again, since no valid pattern is found. Then it tries generating the 3rd option without constraint validity check(emit_insn_if_valid_for_reload) like the first 2 attempts, and creates a new insn which will later fail since it's not satisfying it's constraints. My question is: why is GCC certain that one of those 3 attempts must work? In my case, all 3 resulted insns are not supported by the architecture. Thanks, Gidi.