The author says "In C99 the restrict keyword was added, which we could use
here to encode that src and dst are different from all other references.
This mechanism helps in some cases, but not in our example."

Doesn't the example below show otherwise? Note the presence of movdqu in both
memcopy_normal and memcopy_restrict and how GCC emits five LEA instructions
without restrict, but only two when restrict is present.

This does not support the author's assertion that "Aliasing information is
the only one, where I am certain about speed improvements, because it is
impossible to reach Fortran-speed in C."

#include "stddef.h"

void* memcopy_normal(void* dst, const void* src, size_t count) {
while (count--) *(char*)dst++ = *(char*)src++;
return dst;
}

void* memcopy_restrict(void* restrict dst, const void* restrict src, size_t count) {
while (count--) *(char* restrict)dst++ = *(char* restrict)src++;
return dst;
}

> gcc -S -masm=intel -std=c99 -m64 -march=corei7 -O3 restrict2.c

.file	"restrict2.c"
.intel_syntax noprefix
.text
.p2align 4,,15
.globl	memcopy_normal
.type	memcopy_normal, @function
memcopy_normal:
.LFB0:
.cfi_startproc
test	rdx, rdx
mov	rax, rdi
je	.L2
lea	r10, [rdx-1]
mov	r8, rdx
shr	r8, 4
mov	r9, r8
sal	r9, 4
test	r9, r9
je	.L7
lea	rcx, [rsi+16]
cmp	rdx, 15
lea	r11, [rax+16]
seta	dil
cmp	rax, rcx
seta	cl
cmp	rsi, r11
seta	r11b
or	ecx, r11d
test	dil, cl
je	.L7
xor	ecx, ecx
xor	edi, edi
.p2align 4,,10
.p2align 3
.L4:
movdqu	xmm0, XMMWORD PTR [rsi+rcx]
add	rdi, 1
movdqu	XMMWORD PTR [rax+rcx], xmm0
add	rcx, 16
cmp	r8, rdi
ja	.L4
lea	r8, [rax+r9]
add	rsi, r9
sub	r10, r9
cmp	rdx, r9
je	.L5
.L3:
lea	r9, [r10+1]
xor	ecx, ecx
.p2align 4,,10
.p2align 3
.L6:
movzx	edi, BYTE PTR [rsi+rcx]
mov	BYTE PTR [r8+rcx], dil
add	rcx, 1
cmp	r9, rcx
jne	.L6
.L5:
add	rax, rdx
.L2:
rep
ret
.L7:
mov	r8, rax
jmp	.L3
.cfi_endproc
.LFE0:
.size	memcopy_normal, .-memcopy_normal
.p2align 4,,15
.globl	memcopy_restrict
.type	memcopy_restrict, @function
memcopy_restrict:
.LFB1:
.cfi_startproc
push	r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
test	rdx, rdx
mov	rax, rdi
push	rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
push	rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
je	.L12
lea	r10, [rdx-1]
mov	r11, rsi
mov	r8, rsi
neg	r11
and	r11d, 15
cmp	r11, rdx
cmova	r11, rdx
test	r11, r11
je	.L13
xor	ecx, ecx
.p2align 4,,10
.p2align 3
.L14:
movzx	r9d, BYTE PTR [r8]
add	rcx, 1
add	r8, 1
sub	r10, 1
mov	BYTE PTR [rdi], r9b
add	rdi, 1
cmp	r11, rcx
ja	.L14
cmp	rdx, r11
je	.L15
.L13:
mov	r12, rdx
sub	r12, r11
mov	rbx, r12
shr	rbx, 4
mov	rbp, rbx
sal	rbp, 4
test	rbp, rbp
je	.L16
add	rsi, r11
xor	ecx, ecx
add	r11, rax
xor	r9d, r9d
.p2align 4,,10
.p2align 3
.L17:
movdqa	xmm0, XMMWORD PTR [rsi+rcx]
add	r9, 1
movdqu	XMMWORD PTR [r11+rcx], xmm0
add	rcx, 16
cmp	rbx, r9
ja	.L17
add	rdi, rbp
add	r8, rbp
sub	r10, rbp
cmp	r12, rbp
je	.L15
.L16:
lea	r9, [r10+1]
xor	ecx, ecx
.p2align 4,,10
.p2align 3
.L18:
movzx	esi, BYTE PTR [r8+rcx]
mov	BYTE PTR [rdi+rcx], sil
add	rcx, 1
cmp	r9, rcx
jne	.L18
.L15:
add	rax, rdx
.L12:
pop	rbx
.cfi_def_cfa_offset 24
pop	rbp
.cfi_def_cfa_offset 16
pop	r12
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE1:
.size	memcopy_restrict, .-memcopy_restrict
.ident	"GCC: (GNU) 4.6.3"
.section	.note.GNU-stack,"",@progbits