Difficulty matching machine description to target - any way to specify a minimum register width ?

Paul S pauls@dataworx.com.au
Thu Jan 12 09:59:00 GMT 2012


Thanks Richard,

The penny dropped when I read your comment about the % operator. item 
(2) send me back to the gcc internals document (again !) and I had the 
problem sorted in about half an hour.

Thanks again,
Paul.

On 06/01/12 08:23, Richard Henderson wrote:
> On 01/05/2012 10:33 PM, Paul S wrote:
>    
>> (define_insn "addqi3i"
>> [(set (match_operand:HI 0 "register_operand" "=r")
>> (plus:HI (match_operand:HI 1 "register_operand" "%0")
>> (sign_extend:HI (match_operand:QI 2 "memory_operand" "m"))))]
>>      
> Two things are wrong with this pattern:
>
>   (1) % is incorrect because the operands are not the same mode.
>       That's probably the root cause of all your failures.
>
>   (2) Embedded operands are canonically first in commutative operands.
>
> So this should be
>
>    [(set (match_operand:HI 0 "register_operand" "=r")
> 	(plus:HI (sign_extend:HI (match_operand:QI 1 "memory_operand" "m"))
> 		 (match_operand:HI 2 "register_operand" "0")))]
>
>
> r~
>
>
>    



More information about the Gcc mailing list