Hello all, I am glad that the mistake has been rectified. But it would be of great help requirement of the '+' constraint for strict_low_part is mentioned somewhere in the gcc internals. Even though the mailing list helped me to solve the problem , i could have saved some time had it been documented.
Regards, Shafi On Sun, Apr 13, 2008 at 6:23 AM, Hans-Peter Nilsson <[EMAIL PROTECTED]> wrote: > > Date: Fri, 11 Apr 2008 15:32:02 +0200 > > From: Bernd Schmidt <[EMAIL PROTECTED]> > > > Mohamed Shafi wrote: > > > In cris i saw this patten > > > > > > (define_insn "*andhi_lowpart" > > > [(set (strict_low_part > > > (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r")) > > > (and:HI (match_operand:HI 1 "register_operand" "%0,0, 0,0,0,r") > > > (match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))] > > > > > > Here = is used. > > > > This is incorrect since when the last alternative matches, nothing tells > > the compiler that operand 0 is also an input. > > Oops, thanks for noticing. For consistency, I made all > strict_low_part constraints use "+", including those where all > alternatives had %0. Regtested cross to cris-elf and > crisv32-elf. > > PS. I'm not a native speaker, but FWIW I agree with Joe Buck > regarding usage of the word "doubt", but I see it's quite common > with some non-native speakers, indicating the fault is at the > teaching level. > > gcc: > * config/cris/cris.md ("*andhi_lowpart_non_v32", "*andhi_lowpart_v32") > ("*andqi_lowpart_non_v32", "*andqi_lowpart_v32"): Use "+" for the > operand 0 constraint, not "=". > > Index: config/cris/cris.md > =================================================================== > --- config/cris/cris.md (revision 134224) > +++ config/cris/cris.md (working copy) > @@ -2958,7 +2958,7 @@ (define_insn "*expanded_andhi_v32" > > (define_insn "*andhi_lowpart_non_v32" > [(set (strict_low_part > - (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r")) > + (match_operand:HI 0 "register_operand" "+r,r, r,r,r,r")) > (and:HI (match_operand:HI 1 "register_operand" "%0,0, 0,0,0,r") > (match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))] > "!TARGET_V32" > @@ -2974,7 +2974,7 @@ (define_insn "*andhi_lowpart_non_v32" > > (define_insn "*andhi_lowpart_v32" > [(set (strict_low_part > - (match_operand:HI 0 "register_operand" "=r,r,r,r,r")) > + (match_operand:HI 0 "register_operand" "+r,r,r,r,r")) > (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0") > (match_operand:HI 2 "general_operand" "r,Q>,L,O,g")))] > "TARGET_V32" > @@ -3025,7 +3025,7 @@ (define_insn "*andqi3_v32" > > (define_insn "*andqi_lowpart_non_v32" > [(set (strict_low_part > - (match_operand:QI 0 "register_operand" "=r,r, r,r,r")) > + (match_operand:QI 0 "register_operand" "+r,r, r,r,r")) > (and:QI (match_operand:QI 1 "register_operand" "%0,0, 0,0,r") > (match_operand:QI 2 "general_operand" "r,Q>,O,g,!To")))] > "!TARGET_V32" > @@ -3040,7 +3040,7 @@ (define_insn "*andqi_lowpart_non_v32" > > (define_insn "*andqi_lowpart_v32" > [(set (strict_low_part > - (match_operand:QI 0 "register_operand" "=r,r,r,r")) > + (match_operand:QI 0 "register_operand" "+r,r,r,r")) > (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0") > (match_operand:QI 2 "general_operand" "r,Q>,O,g")))] > "TARGET_V32" > > brgds, H-P >