diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0279-Properly-handle-256bit-load-cast.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0279-Properly-handle-256bit-load-cast.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0279-Properly-handle-256bit-load-cast.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0279-Properly-handle-256bit-load-cast.patch new file mode 100644 index 0000000000..0239d72948 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0279-Properly-handle-256bit-load-cast.patch | |||
@@ -0,0 +1,95 @@ | |||
1 | From 97183693743a66a02a18a6e9170b2e4bdf9461ac Mon Sep 17 00:00:00 2001 | ||
2 | From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | ||
3 | Date: Wed, 18 May 2011 22:56:35 +0000 | ||
4 | Subject: [PATCH] Properly handle 256bit load cast. | ||
5 | |||
6 | gcc/ | ||
7 | |||
8 | 2011-05-18 H.J. Lu <hongjiu.lu@intel.com> | ||
9 | |||
10 | Backport from mainline | ||
11 | 2011-05-18 H.J. Lu <hongjiu.lu@intel.com> | ||
12 | |||
13 | PR target/49002 | ||
14 | * config/i386/sse.md (avx_<avxmodesuffixp><avxmodesuffix>_<avxmodesuffixp>): | ||
15 | Properly handle load cast. | ||
16 | |||
17 | gcc/testsuite/ | ||
18 | |||
19 | 2011-05-18 H.J. Lu <hongjiu.lu@intel.com> | ||
20 | |||
21 | Backport from mainline | ||
22 | 2011-05-18 H.J. Lu <hongjiu.lu@intel.com> | ||
23 | |||
24 | PR target/49002 | ||
25 | * gcc.target/i386/pr49002-1.c: New test. | ||
26 | * gcc.target/i386/pr49002-2.c: Likewise. | ||
27 | |||
28 | |||
29 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@173881 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
30 | |||
31 | index db252c8..c9866f0 100644 | ||
32 | --- a/gcc/config/i386/sse.md | ||
33 | +++ b/gcc/config/i386/sse.md | ||
34 | @@ -12017,12 +12017,13 @@ | ||
35 | "&& reload_completed" | ||
36 | [(const_int 0)] | ||
37 | { | ||
38 | + rtx op0 = operands[0]; | ||
39 | rtx op1 = operands[1]; | ||
40 | - if (REG_P (op1)) | ||
41 | + if (REG_P (op0)) | ||
42 | + op0 = gen_rtx_REG (<avxhalfvecmode>mode, REGNO (op0)); | ||
43 | + else | ||
44 | op1 = gen_rtx_REG (<MODE>mode, REGNO (op1)); | ||
45 | - else | ||
46 | - op1 = gen_lowpart (<MODE>mode, op1); | ||
47 | - emit_move_insn (operands[0], op1); | ||
48 | + emit_move_insn (op0, op1); | ||
49 | DONE; | ||
50 | }) | ||
51 | |||
52 | new file mode 100644 | ||
53 | index 0000000..7553e82 | ||
54 | --- /dev/null | ||
55 | +++ b/gcc/testsuite/gcc.target/i386/pr49002-1.c | ||
56 | @@ -0,0 +1,16 @@ | ||
57 | +/* PR target/49002 */ | ||
58 | +/* { dg-do compile } */ | ||
59 | +/* { dg-options "-O -mavx" } */ | ||
60 | + | ||
61 | +#include <immintrin.h> | ||
62 | + | ||
63 | +void foo(const __m128d *from, __m256d *to, int s) | ||
64 | +{ | ||
65 | + __m256d var = _mm256_castpd128_pd256(from[0]); | ||
66 | + var = _mm256_insertf128_pd(var, from[s], 1); | ||
67 | + to[0] = var; | ||
68 | +} | ||
69 | + | ||
70 | +/* Ensure we load into xmm, not ymm. */ | ||
71 | +/* { dg-final { scan-assembler-not "vmovapd\[\t \]*\[^,\]*,\[\t \]*%ymm" } } */ | ||
72 | +/* { dg-final { scan-assembler "vmovapd\[\t \]*\[^,\]*,\[\t \]*%xmm" } } */ | ||
73 | diff --git a/gcc/testsuite/gcc.target/i386/pr49002-2.c b/gcc/testsuite/gcc.target/i386/pr49002-2.c | ||
74 | new file mode 100644 | ||
75 | index 0000000..b0e1009 | ||
76 | --- /dev/null | ||
77 | +++ b/gcc/testsuite/gcc.target/i386/pr49002-2.c | ||
78 | @@ -0,0 +1,14 @@ | ||
79 | +/* PR target/49002 */ | ||
80 | +/* { dg-do compile } */ | ||
81 | +/* { dg-options "-O -mavx" } */ | ||
82 | + | ||
83 | +#include <immintrin.h> | ||
84 | + | ||
85 | +void foo(const __m128d from, __m256d *to) | ||
86 | +{ | ||
87 | + *to = _mm256_castpd128_pd256(from); | ||
88 | +} | ||
89 | + | ||
90 | +/* Ensure we store ymm, not xmm. */ | ||
91 | +/* { dg-final { scan-assembler-not "vmovapd\[\t \]*%xmm\[0-9\]\+,\[^,\]*" } } */ | ||
92 | +/* { dg-final { scan-assembler "vmovapd\[\t \]*%ymm\[0-9\]\+,\[^,\]*" } } */ | ||
93 | -- | ||
94 | 1.7.0.4 | ||
95 | |||