This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Mon, Oct 15, 2012 at 6:39 PM, Ulrich Weigand <uweigand@de.ibm.com> wrote: >> > I was wondering if the i386 port maintainers could have a look at this >> > pattern. Shouldn't we really have two patterns, one to *load* an unaligned >> > value and one to *store* and unaligned value, and not permit that memory >> > access to get reloaded? >> >> Please find attached a fairly mechanical patch that splits >> move_unaligned pattern into load_unaligned and store_unaligned >> patterns. We've had some problems with this pattern, and finally we >> found the reason to make unaligned moves more robust. >> >> I will wait for the confirmation that attached patch avoids the >> failure you are seeing with your reload patch. > > Yes, this patch does in fact fix the failure I was seeing with the > reload patch. (A full regression test shows a couple of extra fails: > FAIL: gcc.target/i386/avx256-unaligned-load-1.c scan-assembler sse_movups/1 > FAIL: gcc.target/i386/avx256-unaligned-load-3.c scan-assembler sse2_movupd/1 > FAIL: gcc.target/i386/avx256-unaligned-load-4.c scan-assembler avx_movups256/1 > FAIL: gcc.target/i386/avx256-unaligned-store-4.c scan-assembler avx_movups256/2 > But I guess these tests simply need to be updated for the new pattern names.) 2012-10-15 Uros Bizjak <ubizjak@gmail.com> * config/i386/sse.md (UNSPEC_MOVU): Remove. (UNSPEC_LOADU): New. (UNSPEC_STOREU): Ditto. (<sse>_movu<ssemodesuffix><avxsizesuffix>): Split to ... (<sse>_loadu<ssemodesuffix><avxsizesuffix>): ... this and ... (<sse>_storeu<ssemodesuffix><avxsizesuffix>) ... this. (<sse2>_movdqu<avxsizesuffix>): Split to ... (<sse2>_loaddqu<avxsizesuffix>): ... this and ... (<sse2>_storedqu<avxsizesuffix>): ... this. (*sse4_2_pcmpestr_unaligned): Update. (*sse4_2_pcmpistr_unaligned): Ditto. * config/i386/i386.c (ix86_avx256_split_vector_move_misalign): Use gen_avx_load{dqu,ups,upd}256 to load from unaligned memory and gen_avx_store{dqu,ups,upd}256 to store to unaligned memory. (ix86_expand_vector_move_misalign): Use gen_sse_loadups or gen_sse2_load{dqu,upd} to load from unaligned memory and gen_sse_loadups or gen_sse2_store{dqu,upd}256 to store to unaligned memory. (struct builtin_description bdesc_spec) <IX86_BUILTIN_LOADUPS>: Use CODE_FOR_sse_loadups. <IX86_BUILTIN_LOADUPD>: Use CODE_FOR_sse2_loadupd. <IX86_BUILTIN_LOADDQU>: Use CODE_FOR_sse2_loaddqu. <IX86_BUILTIN_STOREUPS>: Use CODE_FOR_sse_storeups. <IX86_BUILTIN_STOREUPD>: Use CODE_FOR_sse2_storeupd. <IX86_BUILTIN_STOREDQU>: Use CODE_FOR_sse2_storedqu. <IX86_BUILTIN_LOADUPS256>: Use CODE_FOR_avx_loadups256. <IX86_BUILTIN_LOADUPD256>: Use CODE_FOR_avx_loadupd256. <IX86_BUILTIN_LOADDQU256>: Use CODE_FOR_avx_loaddqu256. <IX86_BUILTIN_STOREUPS256>: Use CODE_FOR_avx_storeups256. <IX86_BUILTIN_STOREUPD256>: Use CODE_FOR_avx_storeupd256. <IX86_BUILTIN_STOREDQU256>: Use CODE_FOR_avx_storedqu256. testsuite/ChangeLog: 2012-10-15 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/avx256-unaligned-load-1.c: Update asm scan patterns. * gcc.target/i386/avx256-unaligned-load-2.c: Ditto. * gcc.target/i386/avx256-unaligned-load-3.c: Ditto. * gcc.target/i386/avx256-unaligned-load-4.c: Ditto. * gcc.target/i386/avx256-unaligned-store-1.c: Ditto. * gcc.target/i386/avx256-unaligned-store-2.c: Ditto. * gcc.target/i386/avx256-unaligned-store-3.c: Ditto. * gcc.target/i386/avx256-unaligned-store-4.c: Ditto. Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}. Committed to mainline, similar patch will be committed to 4.7 branch. Uros.
Attachment:
p.diff.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |