diff options
| author | Koen Kooi <koen@dominion.thruhere.net> | 2010-11-02 22:03:58 +0100 |
|---|---|---|
| committer | Koen Kooi <koen@dominion.thruhere.net> | 2010-11-02 22:12:02 +0100 |
| commit | be10a6b1321f250b1034c7d9d0a8ef18b296eef1 (patch) | |
| tree | 9249025cbfbfbee4cc430d62b27f75301dd4dfde /recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99364.patch | |
| parent | 93b28937ac67ba46d65f55637e42552e224aa7e2 (diff) | |
| download | meta-openembedded-be10a6b1321f250b1034c7d9d0a8ef18b296eef1.tar.gz | |
angstrom-layers: meta-openembedded: replace poky gcc 4.5 sources with OE ones
This needs further investigation, but for now we can get the tested sources into the poky gcc harness
Signed-off-by: Koen Kooi <k-kooi@ti.com>
Diffstat (limited to 'recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99364.patch')
| -rw-r--r-- | recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99364.patch | 511 |
1 files changed, 511 insertions, 0 deletions
diff --git a/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99364.patch b/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99364.patch new file mode 100644 index 0000000000..8ae781ecab --- /dev/null +++ b/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99364.patch | |||
| @@ -0,0 +1,511 @@ | |||
| 1 | 2010-08-05 Julian Brown <julian@codesourcery.com> | ||
| 2 | |||
| 3 | Backport from mainline (candidate patch): | ||
| 4 | |||
| 5 | gcc/ | ||
| 6 | * expr.c (expand_assignment): Add assertion to prevent emitting null | ||
| 7 | rtx for movmisalign pattern. | ||
| 8 | (expand_expr_real_1): Likewise. | ||
| 9 | * config/arm/arm.c (arm_builtin_support_vector_misalignment): New. | ||
| 10 | (TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT): New. Use above. | ||
| 11 | (arm_vector_alignment_reachable): New. | ||
| 12 | (TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE): New. Use above. | ||
| 13 | (neon_vector_mem_operand): Disallow PRE_DEC for misaligned loads. | ||
| 14 | (arm_print_operand): Include alignment qualifier in %A. | ||
| 15 | * config/arm/neon.md (UNSPEC_MISALIGNED_ACCESS): New constant. | ||
| 16 | (movmisalign<mode>): New expander. | ||
| 17 | (movmisalign<mode>_neon_store, movmisalign<mode>_neon_load): New | ||
| 18 | insn patterns. | ||
| 19 | |||
| 20 | gcc/testsuite/ | ||
| 21 | * gcc.dg/vect/vect-42.c: Use vect_element_align instead of | ||
| 22 | vect_hw_misalign. | ||
| 23 | * gcc.dg/vect/vect-60.c: Likewise. | ||
| 24 | * gcc.dg/vect/vect-56.c: Likewise. | ||
| 25 | * gcc.dg/vect/vect-93.c: Likewise. | ||
| 26 | * gcc.dg/vect/no-scevccp-outer-8.c: Likewise. | ||
| 27 | * gcc.dg/vect/vect-95.c: Likewise. | ||
| 28 | * gcc.dg/vect/vect-96.c: Likewise. | ||
| 29 | * gcc.dg/vect/vect-outer-5.c: Use quad-word vectors when available. | ||
| 30 | * gcc.dg/vect/slp-25.c: Likewise. | ||
| 31 | * gcc.dg/vect/slp-3.c: Likewise. | ||
| 32 | * gcc.dg/vect/vect-multitypes-1.c: Likewise. | ||
| 33 | * gcc.dg/vect/no-vfa-pr29145.c: Likewise. | ||
| 34 | * gcc.dg/vect/vect-multitypes-4.c: Likewise. Use vect_element_align. | ||
| 35 | * gcc.dg/vect/vect-109.c: Likewise. | ||
| 36 | * gcc.dg/vect/vect-peel-1.c: Likewise. | ||
| 37 | * gcc.dg/vect/vect-peel-2.c: Likewise. | ||
| 38 | * lib/target-supports.exp | ||
| 39 | (check_effective_target_arm_vect_no_misalign): New. | ||
| 40 | (check_effective_target_vect_no_align): Use above. | ||
| 41 | (check_effective_target_vect_element_align): New. | ||
| 42 | (add_options_for_quad_vectors): New. | ||
| 43 | |||
| 44 | 2010-08-05 Jie Zhang <jie@codesourcery.com> | ||
| 45 | |||
| 46 | Issue #7257 | ||
| 47 | |||
| 48 | === modified file 'gcc/config/arm/arm.c' | ||
| 49 | --- old/gcc/config/arm/arm.c 2010-08-16 09:41:58 +0000 | ||
| 50 | +++ new/gcc/config/arm/arm.c 2010-08-20 16:21:01 +0000 | ||
| 51 | @@ -228,6 +228,11 @@ | ||
| 52 | static void arm_trampoline_init (rtx, tree, rtx); | ||
| 53 | static rtx arm_trampoline_adjust_address (rtx); | ||
| 54 | static rtx arm_pic_static_addr (rtx orig, rtx reg); | ||
| 55 | +static bool arm_vector_alignment_reachable (const_tree type, bool is_packed); | ||
| 56 | +static bool arm_builtin_support_vector_misalignment (enum machine_mode mode, | ||
| 57 | + const_tree type, | ||
| 58 | + int misalignment, | ||
| 59 | + bool is_packed); | ||
| 60 | |||
| 61 | |||
| 62 | /* Table of machine attributes. */ | ||
| 63 | @@ -514,6 +519,14 @@ | ||
| 64 | #undef TARGET_CAN_ELIMINATE | ||
| 65 | #define TARGET_CAN_ELIMINATE arm_can_eliminate | ||
| 66 | |||
| 67 | +#undef TARGET_VECTOR_ALIGNMENT_REACHABLE | ||
| 68 | +#define TARGET_VECTOR_ALIGNMENT_REACHABLE \ | ||
| 69 | + arm_vector_alignment_reachable | ||
| 70 | + | ||
| 71 | +#undef TARGET_SUPPORT_VECTOR_MISALIGNMENT | ||
| 72 | +#define TARGET_SUPPORT_VECTOR_MISALIGNMENT \ | ||
| 73 | + arm_builtin_support_vector_misalignment | ||
| 74 | + | ||
| 75 | struct gcc_target targetm = TARGET_INITIALIZER; | ||
| 76 | |||
| 77 | /* Obstack for minipool constant handling. */ | ||
| 78 | @@ -9084,7 +9097,8 @@ | ||
| 79 | return arm_address_register_rtx_p (ind, 0); | ||
| 80 | |||
| 81 | /* Allow post-increment with Neon registers. */ | ||
| 82 | - if (type != 1 && (GET_CODE (ind) == POST_INC || GET_CODE (ind) == PRE_DEC)) | ||
| 83 | + if ((type != 1 && GET_CODE (ind) == POST_INC) | ||
| 84 | + || (type == 0 && GET_CODE (ind) == PRE_DEC)) | ||
| 85 | return arm_address_register_rtx_p (XEXP (ind, 0), 0); | ||
| 86 | |||
| 87 | /* FIXME: vld1 allows register post-modify. */ | ||
| 88 | @@ -16365,6 +16379,8 @@ | ||
| 89 | { | ||
| 90 | rtx addr; | ||
| 91 | bool postinc = FALSE; | ||
| 92 | + unsigned align, modesize, align_bits; | ||
| 93 | + | ||
| 94 | gcc_assert (GET_CODE (x) == MEM); | ||
| 95 | addr = XEXP (x, 0); | ||
| 96 | if (GET_CODE (addr) == POST_INC) | ||
| 97 | @@ -16372,7 +16388,29 @@ | ||
| 98 | postinc = 1; | ||
| 99 | addr = XEXP (addr, 0); | ||
| 100 | } | ||
| 101 | - asm_fprintf (stream, "[%r]", REGNO (addr)); | ||
| 102 | + asm_fprintf (stream, "[%r", REGNO (addr)); | ||
| 103 | + | ||
| 104 | + /* We know the alignment of this access, so we can emit a hint in the | ||
| 105 | + instruction (for some alignments) as an aid to the memory subsystem | ||
| 106 | + of the target. */ | ||
| 107 | + align = MEM_ALIGN (x) >> 3; | ||
| 108 | + modesize = GET_MODE_SIZE (GET_MODE (x)); | ||
| 109 | + | ||
| 110 | + /* Only certain alignment specifiers are supported by the hardware. */ | ||
| 111 | + if (modesize == 16 && (align % 32) == 0) | ||
| 112 | + align_bits = 256; | ||
| 113 | + else if ((modesize == 8 || modesize == 16) && (align % 16) == 0) | ||
| 114 | + align_bits = 128; | ||
| 115 | + else if ((align % 8) == 0) | ||
| 116 | + align_bits = 64; | ||
| 117 | + else | ||
| 118 | + align_bits = 0; | ||
| 119 | + | ||
| 120 | + if (align_bits != 0) | ||
| 121 | + asm_fprintf (stream, ", :%d", align_bits); | ||
| 122 | + | ||
| 123 | + asm_fprintf (stream, "]"); | ||
| 124 | + | ||
| 125 | if (postinc) | ||
| 126 | fputs("!", stream); | ||
| 127 | } | ||
| 128 | @@ -22450,4 +22488,43 @@ | ||
| 129 | return !TARGET_THUMB1; | ||
| 130 | } | ||
| 131 | |||
| 132 | +static bool | ||
| 133 | +arm_vector_alignment_reachable (const_tree type, bool is_packed) | ||
| 134 | +{ | ||
| 135 | + /* Vectors which aren't in packed structures will not be less aligned than | ||
| 136 | + the natural alignment of their element type, so this is safe. */ | ||
| 137 | + if (TARGET_NEON && !BYTES_BIG_ENDIAN) | ||
| 138 | + return !is_packed; | ||
| 139 | + | ||
| 140 | + return default_builtin_vector_alignment_reachable (type, is_packed); | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +static bool | ||
| 144 | +arm_builtin_support_vector_misalignment (enum machine_mode mode, | ||
| 145 | + const_tree type, int misalignment, | ||
| 146 | + bool is_packed) | ||
| 147 | +{ | ||
| 148 | + if (TARGET_NEON && !BYTES_BIG_ENDIAN) | ||
| 149 | + { | ||
| 150 | + HOST_WIDE_INT align = TYPE_ALIGN_UNIT (type); | ||
| 151 | + | ||
| 152 | + if (is_packed) | ||
| 153 | + return align == 1; | ||
| 154 | + | ||
| 155 | + /* If the misalignment is unknown, we should be able to handle the access | ||
| 156 | + so long as it is not to a member of a packed data structure. */ | ||
| 157 | + if (misalignment == -1) | ||
| 158 | + return true; | ||
| 159 | + | ||
| 160 | + /* Return true if the misalignment is a multiple of the natural alignment | ||
| 161 | + of the vector's element type. This is probably always going to be | ||
| 162 | + true in practice, since we've already established that this isn't a | ||
| 163 | + packed access. */ | ||
| 164 | + return ((misalignment % align) == 0); | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + return default_builtin_support_vector_misalignment (mode, type, misalignment, | ||
| 168 | + is_packed); | ||
| 169 | +} | ||
| 170 | + | ||
| 171 | #include "gt-arm.h" | ||
| 172 | |||
| 173 | === modified file 'gcc/config/arm/neon.md' | ||
| 174 | --- old/gcc/config/arm/neon.md 2010-08-13 11:40:17 +0000 | ||
| 175 | +++ new/gcc/config/arm/neon.md 2010-08-20 16:21:01 +0000 | ||
| 176 | @@ -140,7 +140,8 @@ | ||
| 177 | (UNSPEC_VUZP1 201) | ||
| 178 | (UNSPEC_VUZP2 202) | ||
| 179 | (UNSPEC_VZIP1 203) | ||
| 180 | - (UNSPEC_VZIP2 204)]) | ||
| 181 | + (UNSPEC_VZIP2 204) | ||
| 182 | + (UNSPEC_MISALIGNED_ACCESS 205)]) | ||
| 183 | |||
| 184 | ;; Double-width vector modes. | ||
| 185 | (define_mode_iterator VD [V8QI V4HI V2SI V2SF]) | ||
| 186 | @@ -660,6 +661,52 @@ | ||
| 187 | neon_disambiguate_copy (operands, dest, src, 4); | ||
| 188 | }) | ||
| 189 | |||
| 190 | +(define_expand "movmisalign<mode>" | ||
| 191 | + [(set (match_operand:VDQX 0 "nonimmediate_operand" "") | ||
| 192 | + (unspec:VDQX [(match_operand:VDQX 1 "general_operand" "")] | ||
| 193 | + UNSPEC_MISALIGNED_ACCESS))] | ||
| 194 | + "TARGET_NEON && !BYTES_BIG_ENDIAN" | ||
| 195 | +{ | ||
| 196 | + /* This pattern is not permitted to fail during expansion: if both arguments | ||
| 197 | + are non-registers (e.g. memory := constant, which can be created by the | ||
| 198 | + auto-vectorizer), force operand 1 into a register. */ | ||
| 199 | + if (!s_register_operand (operands[0], <MODE>mode) | ||
| 200 | + && !s_register_operand (operands[1], <MODE>mode)) | ||
| 201 | + operands[1] = force_reg (<MODE>mode, operands[1]); | ||
| 202 | +}) | ||
| 203 | + | ||
| 204 | +(define_insn "*movmisalign<mode>_neon_store" | ||
| 205 | + [(set (match_operand:VDX 0 "memory_operand" "=Um") | ||
| 206 | + (unspec:VDX [(match_operand:VDX 1 "s_register_operand" " w")] | ||
| 207 | + UNSPEC_MISALIGNED_ACCESS))] | ||
| 208 | + "TARGET_NEON && !BYTES_BIG_ENDIAN" | ||
| 209 | + "vst1.<V_sz_elem>\t{%P1}, %A0" | ||
| 210 | + [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]) | ||
| 211 | + | ||
| 212 | +(define_insn "*movmisalign<mode>_neon_load" | ||
| 213 | + [(set (match_operand:VDX 0 "s_register_operand" "=w") | ||
| 214 | + (unspec:VDX [(match_operand:VDX 1 "memory_operand" " Um")] | ||
| 215 | + UNSPEC_MISALIGNED_ACCESS))] | ||
| 216 | + "TARGET_NEON && !BYTES_BIG_ENDIAN" | ||
| 217 | + "vld1.<V_sz_elem>\t{%P0}, %A1" | ||
| 218 | + [(set_attr "neon_type" "neon_vld1_1_2_regs")]) | ||
| 219 | + | ||
| 220 | +(define_insn "*movmisalign<mode>_neon_store" | ||
| 221 | + [(set (match_operand:VQX 0 "memory_operand" "=Um") | ||
| 222 | + (unspec:VQX [(match_operand:VQX 1 "s_register_operand" " w")] | ||
| 223 | + UNSPEC_MISALIGNED_ACCESS))] | ||
| 224 | + "TARGET_NEON && !BYTES_BIG_ENDIAN" | ||
| 225 | + "vst1.<V_sz_elem>\t{%q1}, %A0" | ||
| 226 | + [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]) | ||
| 227 | + | ||
| 228 | +(define_insn "*movmisalign<mode>_neon_load" | ||
| 229 | + [(set (match_operand:VQX 0 "s_register_operand" "=w") | ||
| 230 | + (unspec:VQX [(match_operand:VQX 1 "memory_operand" " Um")] | ||
| 231 | + UNSPEC_MISALIGNED_ACCESS))] | ||
| 232 | + "TARGET_NEON && !BYTES_BIG_ENDIAN" | ||
| 233 | + "vld1.<V_sz_elem>\t{%q0}, %A1" | ||
| 234 | + [(set_attr "neon_type" "neon_vld1_1_2_regs")]) | ||
| 235 | + | ||
| 236 | (define_insn "vec_set<mode>_internal" | ||
| 237 | [(set (match_operand:VD 0 "s_register_operand" "=w") | ||
| 238 | (vec_merge:VD | ||
| 239 | |||
| 240 | === modified file 'gcc/expr.c' | ||
| 241 | --- old/gcc/expr.c 2010-08-12 13:51:16 +0000 | ||
| 242 | +++ new/gcc/expr.c 2010-08-20 16:21:01 +0000 | ||
| 243 | @@ -4362,7 +4362,10 @@ | ||
| 244 | && op_mode1 != VOIDmode) | ||
| 245 | reg = copy_to_mode_reg (op_mode1, reg); | ||
| 246 | |||
| 247 | - insn = GEN_FCN (icode) (mem, reg); | ||
| 248 | + insn = GEN_FCN (icode) (mem, reg); | ||
| 249 | + /* The movmisalign<mode> pattern cannot fail, else the assignment would | ||
| 250 | + silently be omitted. */ | ||
| 251 | + gcc_assert (insn != NULL_RTX); | ||
| 252 | emit_insn (insn); | ||
| 253 | return; | ||
| 254 | } | ||
| 255 | @@ -8742,6 +8745,7 @@ | ||
| 256 | |||
| 257 | /* Nor can the insn generator. */ | ||
| 258 | insn = GEN_FCN (icode) (reg, temp); | ||
| 259 | + gcc_assert (insn != NULL_RTX); | ||
| 260 | emit_insn (insn); | ||
| 261 | |||
| 262 | return reg; | ||
| 263 | |||
| 264 | === modified file 'gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c' | ||
| 265 | --- old/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c 2009-06-05 14:28:50 +0000 | ||
| 266 | +++ new/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c 2010-08-20 16:21:01 +0000 | ||
| 267 | @@ -46,5 +46,5 @@ | ||
| 268 | return 0; | ||
| 269 | } | ||
| 270 | |||
| 271 | -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { ! { vect_hw_misalign } } } } } */ | ||
| 272 | +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { ! { vect_element_align } } } } } */ | ||
| 273 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 274 | |||
| 275 | === modified file 'gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c' | ||
| 276 | --- old/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c 2008-08-18 19:36:03 +0000 | ||
| 277 | +++ new/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c 2010-08-20 16:21:01 +0000 | ||
| 278 | @@ -1,4 +1,5 @@ | ||
| 279 | /* { dg-require-effective-target vect_int } */ | ||
| 280 | +/* { dg-add-options quad_vectors } */ | ||
| 281 | |||
| 282 | #include <stdarg.h> | ||
| 283 | #include "tree-vect.h" | ||
| 284 | |||
| 285 | === modified file 'gcc/testsuite/gcc.dg/vect/slp-25.c' | ||
| 286 | --- old/gcc/testsuite/gcc.dg/vect/slp-25.c 2009-10-27 11:46:07 +0000 | ||
| 287 | +++ new/gcc/testsuite/gcc.dg/vect/slp-25.c 2010-08-20 16:21:01 +0000 | ||
| 288 | @@ -1,4 +1,5 @@ | ||
| 289 | /* { dg-require-effective-target vect_int } */ | ||
| 290 | +/* { dg-add-options quad_vectors } */ | ||
| 291 | |||
| 292 | #include <stdarg.h> | ||
| 293 | #include "tree-vect.h" | ||
| 294 | |||
| 295 | === modified file 'gcc/testsuite/gcc.dg/vect/slp-3.c' | ||
| 296 | --- old/gcc/testsuite/gcc.dg/vect/slp-3.c 2009-05-12 13:05:28 +0000 | ||
| 297 | +++ new/gcc/testsuite/gcc.dg/vect/slp-3.c 2010-08-20 16:21:01 +0000 | ||
| 298 | @@ -1,4 +1,5 @@ | ||
| 299 | /* { dg-require-effective-target vect_int } */ | ||
| 300 | +/* { dg-add-options quad_vectors } */ | ||
| 301 | |||
| 302 | #include <stdarg.h> | ||
| 303 | #include <stdio.h> | ||
| 304 | |||
| 305 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-109.c' | ||
| 306 | --- old/gcc/testsuite/gcc.dg/vect/vect-109.c 2010-07-10 20:38:32 +0000 | ||
| 307 | +++ new/gcc/testsuite/gcc.dg/vect/vect-109.c 2010-08-20 16:21:01 +0000 | ||
| 308 | @@ -1,4 +1,5 @@ | ||
| 309 | /* { dg-require-effective-target vect_int } */ | ||
| 310 | +/* { dg-add-options quad_vectors } */ | ||
| 311 | |||
| 312 | #include <stdarg.h> | ||
| 313 | #include "tree-vect.h" | ||
| 314 | @@ -72,8 +73,8 @@ | ||
| 315 | return 0; | ||
| 316 | } | ||
| 317 | |||
| 318 | -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_hw_misalign } } } */ | ||
| 319 | -/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" { xfail vect_hw_misalign } } } */ | ||
| 320 | -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 10 "vect" { target vect_hw_misalign } } } */ | ||
| 321 | +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_element_align } } } */ | ||
| 322 | +/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" { xfail vect_element_align } } } */ | ||
| 323 | +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 10 "vect" { target vect_element_align } } } */ | ||
| 324 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 325 | |||
| 326 | |||
| 327 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-42.c' | ||
| 328 | --- old/gcc/testsuite/gcc.dg/vect/vect-42.c 2009-11-04 10:22:22 +0000 | ||
| 329 | +++ new/gcc/testsuite/gcc.dg/vect/vect-42.c 2010-08-20 16:21:01 +0000 | ||
| 330 | @@ -64,7 +64,7 @@ | ||
| 331 | |||
| 332 | /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */ | ||
| 333 | /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } } */ | ||
| 334 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { { ! vector_alignment_reachable } && { ! vect_hw_misalign } } } } } */ | ||
| 335 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { { ! vector_alignment_reachable } && { ! vect_element_align } } } } } */ | ||
| 336 | /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } } */ | ||
| 337 | /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } } */ | ||
| 338 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 339 | |||
| 340 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-95.c' | ||
| 341 | --- old/gcc/testsuite/gcc.dg/vect/vect-95.c 2009-10-27 11:46:07 +0000 | ||
| 342 | +++ new/gcc/testsuite/gcc.dg/vect/vect-95.c 2010-08-20 16:21:01 +0000 | ||
| 343 | @@ -56,14 +56,14 @@ | ||
| 344 | } | ||
| 345 | |||
| 346 | /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ | ||
| 347 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail {vect_hw_misalign} } } } */ | ||
| 348 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail {vect_element_align} } } } */ | ||
| 349 | |||
| 350 | /* For targets that support unaligned loads we version for the two unaligned | ||
| 351 | stores and generate misaligned accesses for the loads. For targets that | ||
| 352 | don't support unaligned loads we version for all four accesses. */ | ||
| 353 | |||
| 354 | -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign} } } } */ | ||
| 355 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 356 | +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align} } } } */ | ||
| 357 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 358 | /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target vect_no_align } } } */ | ||
| 359 | /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target vect_no_align } } } */ | ||
| 360 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 361 | |||
| 362 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-96.c' | ||
| 363 | --- old/gcc/testsuite/gcc.dg/vect/vect-96.c 2009-10-27 11:46:07 +0000 | ||
| 364 | +++ new/gcc/testsuite/gcc.dg/vect/vect-96.c 2010-08-20 16:21:01 +0000 | ||
| 365 | @@ -45,5 +45,5 @@ | ||
| 366 | /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ | ||
| 367 | /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_no_align} && vector_alignment_reachable } } } } */ | ||
| 368 | /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || {! vector_alignment_reachable} } } } } */ | ||
| 369 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } } */ | ||
| 370 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || { {! vector_alignment_reachable} && {! vect_element_align} } } } } } */ | ||
| 371 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 372 | |||
| 373 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c' | ||
| 374 | --- old/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c 2009-10-27 11:46:07 +0000 | ||
| 375 | +++ new/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c 2010-08-20 16:21:01 +0000 | ||
| 376 | @@ -1,4 +1,5 @@ | ||
| 377 | /* { dg-require-effective-target vect_int } */ | ||
| 378 | +/* { dg-add-options quad_vectors } */ | ||
| 379 | |||
| 380 | #include <stdarg.h> | ||
| 381 | #include "tree-vect.h" | ||
| 382 | @@ -78,11 +79,11 @@ | ||
| 383 | return 0; | ||
| 384 | } | ||
| 385 | |||
| 386 | -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail {! vect_hw_misalign} } } } */ | ||
| 387 | -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 388 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vect_hw_misalign} } } } */ | ||
| 389 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 390 | +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail {! vect_element_align} } } } */ | ||
| 391 | +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 392 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vect_element_align} } } } */ | ||
| 393 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 394 | /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail *-*-* } } } */ | ||
| 395 | -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 396 | +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 397 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 398 | |||
| 399 | |||
| 400 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c' | ||
| 401 | --- old/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c 2009-10-27 11:46:07 +0000 | ||
| 402 | +++ new/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c 2010-08-20 16:21:01 +0000 | ||
| 403 | @@ -1,4 +1,5 @@ | ||
| 404 | /* { dg-require-effective-target vect_int } */ | ||
| 405 | +/* { dg-add-options quad_vectors } */ | ||
| 406 | |||
| 407 | #include <stdarg.h> | ||
| 408 | #include "tree-vect.h" | ||
| 409 | @@ -85,11 +86,11 @@ | ||
| 410 | return 0; | ||
| 411 | } | ||
| 412 | |||
| 413 | -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail {! vect_hw_misalign} } } } */ | ||
| 414 | -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 415 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vect_hw_misalign} } } } */ | ||
| 416 | -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 417 | +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail {! vect_element_align} } } } */ | ||
| 418 | +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 419 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vect_element_align} } } } */ | ||
| 420 | +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 421 | /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail *-*-* } } } */ | ||
| 422 | -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */ | ||
| 423 | +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || vect_element_align } } } } */ | ||
| 424 | /* { dg-final { cleanup-tree-dump "vect" } } */ | ||
| 425 | |||
| 426 | |||
| 427 | === modified file 'gcc/testsuite/gcc.dg/vect/vect-outer-5.c' | ||
| 428 | --- old/gcc/testsuite/gcc.dg/vect/vect-outer-5.c 2009-05-08 12:39:01 +0000 | ||
| 429 | +++ new/gcc/testsuite/gcc.dg/vect/vect-outer-5.c 2010-08-20 16:21:01 +0000 | ||
| 430 | @@ -1,4 +1,5 @@ | ||
| 431 | /* { dg-require-effective-target vect_float } */ | ||
| 432 | +/* { dg-add-options quad_vectors } */ | ||
| 433 | |||
| 434 | #include <stdio.h> | ||
| 435 | #include <stdarg.h> | ||
| 436 | |||
| 437 | === modified file 'gcc/testsuite/lib/target-supports.exp' | ||
| 438 | --- old/gcc/testsuite/lib/target-supports.exp 2010-08-10 13:31:21 +0000 | ||
| 439 | +++ new/gcc/testsuite/lib/target-supports.exp 2010-08-20 16:21:01 +0000 | ||
| 440 | @@ -1642,6 +1642,18 @@ | ||
| 441 | }] | ||
| 442 | } | ||
| 443 | |||
| 444 | +# Return 1 if this is an ARM target that only supports aligned vector accesses | ||
| 445 | +proc check_effective_target_arm_vect_no_misalign { } { | ||
| 446 | + return [check_no_compiler_messages arm_vect_no_misalign assembly { | ||
| 447 | + #if !defined(__arm__) \ | ||
| 448 | + || (defined(__ARMEL__) \ | ||
| 449 | + && (!defined(__thumb__) || defined(__thumb2__))) | ||
| 450 | + #error FOO | ||
| 451 | + #endif | ||
| 452 | + }] | ||
| 453 | +} | ||
| 454 | + | ||
| 455 | + | ||
| 456 | # Return 1 if this is an ARM target supporting -mfpu=vfp | ||
| 457 | # -mfloat-abi=softfp. Some multilibs may be incompatible with these | ||
| 458 | # options. | ||
| 459 | @@ -2547,7 +2559,7 @@ | ||
| 460 | if { [istarget mipsisa64*-*-*] | ||
| 461 | || [istarget sparc*-*-*] | ||
| 462 | || [istarget ia64-*-*] | ||
| 463 | - || [check_effective_target_arm32] } { | ||
| 464 | + || [check_effective_target_arm_vect_no_misalign] } { | ||
| 465 | set et_vect_no_align_saved 1 | ||
| 466 | } | ||
| 467 | } | ||
| 468 | @@ -2682,6 +2694,25 @@ | ||
| 469 | return $et_vector_alignment_reachable_for_64bit_saved | ||
| 470 | } | ||
| 471 | |||
| 472 | +# Return 1 if the target only requires element alignment for vector accesses | ||
| 473 | + | ||
| 474 | +proc check_effective_target_vect_element_align { } { | ||
| 475 | + global et_vect_element_align | ||
| 476 | + | ||
| 477 | + if [info exists et_vect_element_align] { | ||
| 478 | + verbose "check_effective_target_vect_element_align: using cached result" 2 | ||
| 479 | + } else { | ||
| 480 | + set et_vect_element_align 0 | ||
| 481 | + if { [istarget arm*-*-*] | ||
| 482 | + || [check_effective_target_vect_hw_misalign] } { | ||
| 483 | + set et_vect_element_align 1 | ||
| 484 | + } | ||
| 485 | + } | ||
| 486 | + | ||
| 487 | + verbose "check_effective_target_vect_element_align: returning $et_vect_element_align" 2 | ||
| 488 | + return $et_vect_element_align | ||
| 489 | +} | ||
| 490 | + | ||
| 491 | # Return 1 if the target supports vector conditional operations, 0 otherwise. | ||
| 492 | |||
| 493 | proc check_effective_target_vect_condition { } { | ||
| 494 | @@ -3239,6 +3270,16 @@ | ||
| 495 | return $flags | ||
| 496 | } | ||
| 497 | |||
| 498 | +# Add to FLAGS the flags needed to enable 128-bit vectors. | ||
| 499 | + | ||
| 500 | +proc add_options_for_quad_vectors { flags } { | ||
| 501 | + if [is-effective-target arm_neon_ok] { | ||
| 502 | + return "$flags -mvectorize-with-neon-quad" | ||
| 503 | + } | ||
| 504 | + | ||
| 505 | + return $flags | ||
| 506 | +} | ||
| 507 | + | ||
| 508 | # Return 1 if the target provides a full C99 runtime. | ||
| 509 | |||
| 510 | proc check_effective_target_c99_runtime { } { | ||
| 511 | |||
