On 07/03/2018 12:58 PM, Segher Boessenkool wrote:
> On Tue, Jul 03, 2018 at 12:15:48PM +0200, Martin Liška wrote:
>>> toplev.c already has (in init_alignments):
>>>
>>>   if (align_jumps_max_skip > align_jumps)
>>>     align_jumps_max_skip = align_jumps - 1;
>>
>> I'm rewriting this logic in the patch set. Issue is that 
>> checking for value of align_jumps_max_skip is done
>> in rs6000_option_override_internal, which is place before
>> align_jumps_max_skip is parsed.
>>
>> That said, 'align_jumps_max_skip <= 0' is always true.
> 
> It's not clear to me what you want me to do.
> 
> You should write your patch so that the end result behaves the same as
> before, on all targets.  If that requires changing (or at least checking)
> all targets, then you have a lot of work to do.
> 
> If you think the rs6000 backend is doing something wrong, please say
> what exactly?  I don't see it.

Uf, it's quite complicated I would say.
So first I believe for all -falign-{labels,loops,jumps} we don't handle properly
value of the argument. More precisely for a value of N (not power of 2),
we don't respect max_skip and we generate alignment to M, where M is first 
bigger
power of 2 number. Example:

$ gcc /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/params/blocksort-part.c 
-O2 -falign-labels=1025 -c -S  -o /dev/stdout | grep align | sort | uniq -c
      1         .align 32
    132         .p2align 11
      7         .p2align 4,,15

2^11 == 2048, but I would expect '.p2align 11,,1024' to be generated. That's 
what you get for function alignment:

$ gcc /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/params/blocksort-part.c 
-O2 -falign-functions=1025 -c -S  -o /dev/stdout | grep align | sort | uniq -c
      1         .align 32
      7         .p2align 11,,1024
     55         .p2align 3
     48         .p2align 4,,10

Do I understand that correctly that it's broken?

On powerpc, because align_jumps_max_skip is set to 15, then we see 
inconsistency like:

./xgcc -B. 
/home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/params/blocksort-part.c -O2 
-falign-jumps=14 -c -S  -o /dev/stdout | grep align | sort | uniq -c
...
     27         .p2align 4,,13
...

which is correct.

but:

./xgcc -B. 
/home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/params/blocksort-part.c -O2 
-falign-jumps=1025 -c -S  -o /dev/stdout | grep align | sort | uniq -c
...
     27         .p2align 11,,15
...

Here 11,,15 is completely broken value.

Martin


> 
> Still confused,
> 
> 
> Segher
> 

Reply via email to