Re: LRA Stuck in a loop until aborting

2014-04-17 Thread Michael Matz
Hi, On Thu, 17 Apr 2014, Richard Sandiford wrote: > > "The constraints on a ‘movm’ must permit moving any hard register to > > any other hard register provided..." > > > > by providing a define_expand that assigns from a general_operand to a > > nonimmediate_operand and ... > > > > *ldsi instru

Re: LRA Stuck in a loop until aborting

2014-04-17 Thread Richard Sandiford
pshor...@dataworx.com.au writes: > On 17.04.2014 13:00, Jeff Law wrote: >> On 04/16/14 16:19, Richard Henderson wrote: >>> >>> The register allocators only select an alternative for a move. They >>> do not >>> choose between N different patterns, separately describing loads, >>> stores, and >>>

Re: LRA Stuck in a loop until aborting

2014-04-16 Thread pshortis
On 17.04.2014 13:00, Jeff Law wrote: On 04/16/14 16:19, Richard Henderson wrote: The register allocators only select an alternative for a move. They do not choose between N different patterns, separately describing loads, stores, and register-to-register movement. I'm fairly sure the docum

Re: LRA Stuck in a loop until aborting

2014-04-16 Thread Jeff Law
On 04/16/14 16:19, Richard Henderson wrote: The register allocators only select an alternative for a move. They do not choose between N different patterns, separately describing loads, stores, and register-to-register movement. I'm fairly sure the documentation is quite clear on this, and GCC

Re: LRA Stuck in a loop until aborting

2014-04-16 Thread Richard Henderson
On 04/16/2014 03:05 PM, Paul Shortis wrote: > Solved... kind of. > > *ldsi is one of the patterns movsi is expanded to and as the name suggests it > only handles register loads. I know that at some stages memory references will > pass the register_operand predicate so I changed the predicate for o

Re: LRA Stuck in a loop until aborting

2014-04-16 Thread Paul Shortis
Solved... kind of. *ldsi is one of the patterns movsi is expanded to and as the name suggests it only handles register loads. I know that at some stages memory references will pass the register_operand predicate so I changed the predicate for operand 0 and added an alternative to *ldsi that c

LRA Stuck in a loop until aborting

2014-04-15 Thread pshortis
I've got a small test case there the ira pass produces this ... (insn 35 38 36 5 (set (reg/v:SI 29 [orig:17 _b ] [17]) (reg/v:SI 17 [ _b ])) 48 {*ldsi} (expr_list:REG_DEAD (reg/v:SI 17 [ _b ]) (nil))) and the LRA processes it as follows ... Spilling non-eliminable h