This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/44403] New: vectorization does not maintain 'restrict' qualifier
- From: "roy dot 1rosen at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Jun 2010 15:48:28 -0000
- Subject: [Bug tree-optimization/44403] New: vectorization does not maintain 'restrict' qualifier
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
For the following function:
void xxx(short* __restrict__ a, short* __restrict__ b)
{
int i;
for (i = 0; i < 8; i++)
{
a[i] = b[i];
}
}
the following is generated in the .optimized file:
xxx (short int * restrict a, short int * restrict b)
{
vector(2) short int * vect_p.27;
vector(2) short int vect_var_.26;
vector(2) short int * vect_p.22;
int andmask.21;
int orptrs1.20;
int addr2int1.19;
vector(2) short int * vect_p.18;
int addr2int0.15;
vector(2) short int * vect_p.14;
short int D.1998;
short int * restrict D.1997;
short int * restrict D.1996;
<bb 2>:
vect_p.14_18 = (vector(2) short int *) b_9(D);
addr2int0.15_23 = (int) vect_p.14_18;
vect_p.18_24 = (vector(2) short int *) a_5(D);
addr2int1.19_25 = (int) vect_p.18_24;
orptrs1.20_26 = addr2int0.15_23 | addr2int1.19_25;
andmask.21_27 = orptrs1.20_26 & 3;
if (andmask.21_27 == 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
vect_var_.26_6 = *vect_p.14_18;
*vect_p.18_24 = vect_var_.26_6;
vect_p.22_11 = vect_p.14_18 + 4;
vect_p.27_12 = vect_p.18_24 + 4;
vect_var_.26_56 = *vect_p.22_11;
*vect_p.27_12 = vect_var_.26_56;
vect_p.22_58 = vect_p.22_11 + 4;
vect_p.27_59 = vect_p.27_12 + 4;
vect_var_.26_65 = *vect_p.22_58;
*vect_p.27_59 = vect_var_.26_65;
vect_p.22_67 = vect_p.22_58 + 4;
vect_p.27_68 = vect_p.27_59 + 4;
vect_var_.26_44 = *vect_p.22_67;
*vect_p.27_68 = vect_var_.26_44;
goto <bb 5>;
<bb 4>:
D.1998_77 = *b_9(D);
*a_5(D) = D.1998_77;
D.1996_86 = a_5(D) + 2;
D.1997_87 = b_9(D) + 2;
D.1998_88 = *D.1997_87;
*D.1996_86 = D.1998_88;
D.1996_97 = a_5(D) + 4;
D.1997_98 = b_9(D) + 4;
D.1998_99 = *D.1997_98;
*D.1996_97 = D.1998_99;
D.1996_108 = a_5(D) + 6;
D.1997_109 = b_9(D) + 6;
D.1998_110 = *D.1997_109;
*D.1996_108 = D.1998_110;
D.1996_119 = a_5(D) + 8;
D.1997_120 = b_9(D) + 8;
D.1998_121 = *D.1997_120;
*D.1996_119 = D.1998_121;
D.1996_130 = a_5(D) + 10;
D.1997_131 = b_9(D) + 10;
D.1998_132 = *D.1997_131;
*D.1996_130 = D.1998_132;
D.1996_141 = a_5(D) + 12;
D.1997_142 = b_9(D) + 12;
D.1998_143 = *D.1997_142;
*D.1996_141 = D.1998_143;
D.1996_34 = a_5(D) + 14;
D.1997_35 = b_9(D) + 14;
D.1998_36 = *D.1997_35;
*D.1996_34 = D.1998_36;
<bb 5>:
return;
}
You may notice that the vect variables don't have the restrict qualifier.
Using built-in specs.
COLLECT_GCC=./xgcc
Target: i386-elf-linux
Configured with: ../gcc-4.6-20100529/configure --target=i386-elf-linux
--enable-languages=c
Thread model: posix
gcc version 4.6.0 20100529 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-save-temps' '-v' '-O3' '-fno-ivopts' '-mtune=i386'
'-march=i386'
cc1 -E -quiet -v -iprefix
/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/i386-elf-linux/4.6.0/
./a.c -mtune=i386 -march=i386 -fno-ivopts -O3 -fpch-preprocess -o a.i
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/i386-elf-linux/4.6.0/include"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/i386-elf-linux/4.6.0/include-fixed"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/i386-elf-linux/4.6.0/../../../../i386-elf-linux/sys-include"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/i386-elf-linux/4.6.0/../../../../i386-elf-linux/include"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/../../lib/gcc/i386-elf-linux/4.6.0/include"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/../../lib/gcc/i386-elf-linux/4.6.0/include-fixed"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/../../lib/gcc/i386-elf-linux/4.6.0/../../../../i386-elf-linux/sys-include"
ignoring nonexistent directory
"/home/swproj/sw/users/eyalhar/i386-46/gcc/../lib/gcc/../../lib/gcc/i386-elf-linux/4.6.0/../../../../i386-elf-linux/include"
#include "..." search starts here:
#include <...> search starts here:
End of search list.
COLLECT_GCC_OPTIONS='-save-temps' '-v' '-O3' '-fno-ivopts' '-mtune=i386'
'-march=i386'
cc1 -fpreprocessed a.i -quiet -dumpbase a.c -mtune=i386 -march=i386 -auxbase a
-O3 -version -fno-ivopts -o a.s
GNU C (GCC) version 4.6.0 20100529 (experimental) (i386-elf-linux)
compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-44), GMP
version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU C (GCC) version 4.6.0 20100529 (experimental) (i386-elf-linux)
compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-44), GMP
version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: b29c4bb89017c75caf92d2ab060612f6
COLLECT_GCC_OPTIONS='-save-temps' '-v' '-O3' '-fno-ivopts' '-mtune=i386'
'-march=i386'
as -V -Qy --32 -o a.o a.s
GNU assembler version 2.17.50.0.6-9.el5 (x86_64-redhat-linux) using BFD version
2.17.50.0.6-9.el5 20061020
COMPILER_PATH=
LIBRARY_PATH=
COLLECT_GCC_OPTIONS='-save-temps' '-v' '-O3' '-fno-ivopts' '-mtune=i386'
'-march=i386'
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 crt1.o crti.o crtbegin.o a.o
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh crtend.o crtn.o
ld: crt1.o: No such file: No such file or directory
--
Summary: vectorization does not maintain 'restrict' qualifier
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: roy dot 1rosen at gmail dot com
GCC build triplet: elf
GCC host triplet: linux
GCC target triplet: i386
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44403