[PATCH][ARM] Remove DImode expansions for 1-bit shifts
Wilco Dijkstra
Wilco.Dijkstra@arm.com
Tue Jan 17 23:41:00 GMT 2017
kugan wrote:
> Wilco Dijkstra wrote:
> > + /* Slightly disparage left shift by 1 at so we prefer adddi3. */
> > + if (code == ASHIFT && XEXP (x, 1) == CONST1_RTX (SImode))
> Your ChangeLog says decrease cost for ashldi3 by 1 but looks like it is
> done only for SImode. Am I missing something?
The diff doesn't show enough context, but this is inside an if that checks
for DImode shifts. Note the shift count is SImode.
> Also, what was the motivation for this patch. Is that to improve the
> maintainability of the arm back-end?
These particular patterns should never have existed. Optimized
expansions should be added to arm_emit_coreregs_64bit_shift.
You may have noticed a few patches have been proposed recently to
improve the generated code of DImode operations (PR77308).
The key realization was that GCC will generate absolutely terrible code
unless either all DImode operations are split before register allocation,
or we only use Neon instructions. There is no middle ground here, trying
to allocate DImode registers from only 5 available register pairs (if lucky)
just isn't going to work.
So the goal is to enable early splitting in all DImode patterns. Removing
no-split multi-instruction patterns helps - these are a bad idea anyway.
Wilco
More information about the Gcc-patches
mailing list