------- Comment #2 from ramana at gcc dot gnu dot org  2009-05-15 08:26 -------
(In reply to comment #1)
> This is caused by a typo in arm.md.
> 
> (define_insn "cstoresi_nltu_thumb1"
>   [(set (match_operand:SI 0 "s_register_operand" "=l,l")
>         (neg:SI (gtu:SI (match_operand:SI 1 "s_register_operand" "l,*h")
>                         (match_operand:SI 2 "thumb1_cmp_operand" 
> "lI*h,*r"))))]
>   "TARGET_THUMB1"
>   "cmp\\t%1, %2\;sbc\\t%0, %0, %0"
>   [(set_attr "length" "4")]
> )
> 
> The instruction cstoresi_nltu_thumb1 is used to compute the expression -(x < 
> y)
> where x and y are unsigned SI-type values.  The operand of the NEG RTX should
> be a LTU RTX instead of a GTU RTX.  The incorrected RTX code caused a later 
> CSE
> pass to substitute this pattern:
> 
> (set x
>     (neg (gtu a b)))   <=== cstoresi_nltu_thumb1
> (set y (neg x))        
> 
> with
> 
> (set y (gtu a b))
> 
> I tried fixing the RTX code and the test case passed.
> 

This looks correct. Please submit a patch to gcc-patc...@.


-- 

ramana at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2009-05-15 08:26:09
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40153

Reply via email to