On 04/07/16 20:44, Vladimir Makarov wrote:
On 06/30/2016 01:22 PM, Jiong Wang wrote:
Here is the patch,
From my understanding, "offmemok" is used to represent a memory operand
who's address we want to reload, and searching of it's reference location
seems confirmed my understanding as it's always used together with MEM_P check.
So this patch does the following modifications:
* Only set offmemok to true if MEM_P is also true, as otherwise offmemok
is not used.
* Remove redundant MEM_P check which was used together with offmemok.
* Avoid the addition of spilling cost if offmemok be true as an address
calculation reload is not spilling.
bootstrap & gcc/g++ regression OK on x86_64/aarch64/arm.
OK for trunk?
Yes. The patch looks OK to me. Thank you for working on the
solution, Jiong. As I wrote the code is very sensitive and any its
change might affect some targets. Usually patches for this part of
LRA can take a few iterations.
Thanks for the review Vlad.
As Bernd has concerns on merging MEM_P into offmemok. I committed the
following patch as r238010 which keeps the functional change but without
merging checks.
2016-07-05 Jiong Wang<jiong.w...@arm.com>
gcc/
* lra-constraints.c (process_alt_operands): Don't add spilling cost
for "offmemok".
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index bf08dce..e9d3e43 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -2488,7 +2488,9 @@ process_alt_operands (int only_alternative)
Code below increases the reject for both pseudo and non-pseudo
spill. */
- if (no_regs_p && !(REG_P (op) && hard_regno[nop] < 0))
+ if (no_regs_p
+ && !(MEM_P (op) && offmemok)
+ && !(REG_P (op) && hard_regno[nop] < 0))
{
if (lra_dump_file != NULL)
fprintf