This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] The use of ARM NEON vshll_n_u8 intrinsic results in compile error on valid code (Bugzilla ID 41196)
- From: Daniel Gutson <dgutson at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 09 Oct 2009 16:02:28 -0300
- Subject: [PATCH] The use of ARM NEON vshll_n_u8 intrinsic results in compile error on valid code (Bugzilla ID 41196)
Hi,
the attached patch attempts to fix bug 41196 (the attachment here is
the same as the attachment in bugzilla).
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41196)
Please refer to comment #3 for the description of the fix and comment #4
for the change log.
Please let me know if OK to commit.
Thanks,
Daniel.
--
Daniel Gutson
CodeSourcery
www.codesourcery.com
Index: src/gcc-mainline/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c
===================================================================
--- src/gcc-mainline/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c (revision 0)
+++ src/gcc-mainline/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c (revision 0)
@@ -0,0 +1,27 @@
+/* Check that NEON vector shifts support immediate values == size. /*
+
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -mfpu=neon -mfloat-abi=softfp" } */
+
+#include <arm_neon.h>
+
+uint16x8_t test_vshll_n_u8 (uint8x8_t a)
+{
+ return vshll_n_u8(a, 8);
+}
+
+uint32x4_t test_vshll_n_u16 (uint16x4_t a)
+{
+ return vshll_n_u16(a, 16);
+}
+
+uint64x2_t test_vshll_n_u32 (uint32x2_t a)
+{
+ return vshll_n_u32(a, 32);
+}
+
+/* { dg-final { scan-assembler "vshll\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+/* { dg-final { scan-assembler "vshll\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+/* { dg-final { scan-assembler "vshll\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+/* { dg-final { cleanup-saved-temps } } */
Index: src/gcc-mainline/gcc/config/arm/neon.md
===================================================================
--- src/gcc-mainline/gcc/config/arm/neon.md (revision 152180)
+++ src/gcc-mainline/gcc/config/arm/neon.md (working copy)
@@ -3655,7 +3655,8 @@ (define_insn "neon_vshll_n<mode>"
UNSPEC_VSHLL_N))]
"TARGET_NEON"
{
- neon_const_bounds (operands[2], 0, neon_element_bits (<MODE>mode));
+ /* The boundaries are: 0 < imm <= size. */
+ neon_const_bounds (operands[2], 0, neon_element_bits (<MODE>mode) + 1);
return "vshll.%T3%#<V_sz_elem>\t%q0, %P1, %2";
}
[(set_attr "neon_type" "neon_shift_1")]