[Info-vax] Anyone still around ? :-)
hb
end.of at inter.net
Wed Oct 9 18:40:35 EDT 2019
On 10/9/19 11:55 PM, Louis Krupp wrote:
> On Tue, 8 Oct 2019 07:19:39 -0700 (PDT), osuvman50 at gmail.com wrote:
>
>> I was considering making a post about the failure of the C compiler's optimizer
>> to recognize and optimize the pattern:
>>
>> choice = permutation % (CARDS_IN_DECK-i);
>> permutation = permutation / (CARDS_IN_DECK-i);
>>
>> but didn't think I'd get any constructive responses. (refactoring to eliminate a
>> divide makes the whole program run 18% faster on both alpha and IA64).
>
> For what it's worth, GNU C++ on Linux doesn't optimize it either, but
> GNU Fortran does at optimization level 1. If you have a FORTRAN
> compiler, you'll probably have to tweak this code a bit (getting rid
> of the colons, for example) to try it:
>
> subroutine s(permutation, choice, i)
> implicit none
> integer :: permutation, choice, i
> integer, parameter :: CARDS_IN_DECK = 52
> choice = mod(permutation, (CARDS_IN_DECK-i))
> permutation = permutation / (CARDS_IN_DECK-i)
> end subroutine
>
> Louis
>
What kind of optimization do you expect?
#define CARDS_IN_DECK 52
extern int permutation, choice;
void foo (int i) {
choice = permutation % (CARDS_IN_DECK-i);
permutation = permutation / (CARDS_IN_DECK-i);
}
$
$ gcc -m64 -S -O3 foo.c
$ cat foo.s
.file "foo.c"
.text
.p2align 4,,15
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
movl permutation(%rip), %eax
movl $52, %ecx
subl %edi, %ecx
cltd
idivl %ecx
movl %edx, choice(%rip)
movl %eax, permutation(%rip)
ret
.cfi_endproc
.LFE0:
.size foo, .-foo
.ident "GCC: (Debian 8.3.0-6) 8.3.0"
.section .note.GNU-stack,"", at progbits
$ g++ -m64 -S -O3 foo.c
$ cat foo.s
.file "foo.c"
.text
.p2align 4,,15
.globl _Z3fooi
.type _Z3fooi, @function
_Z3fooi:
.LFB0:
.cfi_startproc
movl permutation(%rip), %eax
movl $52, %ecx
subl %edi, %ecx
cltd
idivl %ecx
movl %edx, choice(%rip)
movl %eax, permutation(%rip)
ret
.cfi_endproc
.LFE0:
.size _Z3fooi, .-_Z3fooi
.ident "GCC: (Debian 8.3.0-6) 8.3.0"
.section .note.GNU-stack,"", at progbits
$
More information about the Info-vax
mailing list