backport the fixes of PR target/64011 and /61749 to 4.9 gcc
weixiangyu
weixiangyu@huawei.com
Wed Jun 10 03:26:00 GMT 2015
Updated patches were attached. Rebased on the latest 4.9 branch.
Tested on aarch64-linux (big-endian and little-endian) with qemu.
OK for 4.9?
The first patch:
Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog (revision 223867)
+++ gcc/ChangeLog (working copy)
@@ -1,3 +1,11 @@
+2015-06-09 Xiangyu Wei <weixiangyu@huawei.com>
+
+ Backport from mainline r219717:
+ 2015-01-15 Jiong Wang <jiong.wang@arm.com>
+ PR rtl-optimization/64011
+ * expmed.c (store_bit_field_using_insv): Warn and truncate bitsize when
+ there is partial overflow.
+
Index: gcc/expmed.c
===================================================================
--- gcc/expmed.c (revision 223867)
+++ gcc/expmed.c (working copy)
@@ -539,7 +539,21 @@ store_bit_field_using_insv (const extraction_insn
xop0 = tem;
copy_back = true;
}
-
+
+ /* There are similar overflow check at the start of store_bit_field_1,
+ but that only check the situation where the field lies completely
+ outside the register, while there do have situation where the field
+ lies partialy in the register, we need to adjust bitsize for this
+ partial overflow situation. Without this fix, pr48335-2.c on big-endian
+ will broken on those arch support bit insert instruction, like arm, aarch64
+ etc. */
+ if (bitsize + bitnum > unit && bitnum < unit)
+ {
+ warning (OPT_Wextra, "write of "HOST_WIDE_INT_PRINT_UNSIGNED"bit data "
+ "outside the bound of destination object, data truncated into "
+ HOST_WIDE_INT_PRINT_UNSIGNED"bit", bitsize, unit - bitnum);
+ bitsize = unit - bitnum;
+ }
/* If BITS_BIG_ENDIAN is zero on a BYTES_BIG_ENDIAN machine, we count
"backwards" from the size of the unit we are inserting into.
Otherwise, we count bits from the most significant on a
And the second one:
Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog (revision 223867)
+++ gcc/ChangeLog (working copy)
@@ -1,3 +1,28 @@
+2015-06-09 Xiangyu Wei <weixiangyu@huawei.com>
+
+ Backport from mainline r215046:
+ 2014-09-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+ PR target/61749
+ * config/aarch64/aarch64-builtins.c (aarch64_types_quadop_qualifiers):
+ Use qualifier_immediate for last operand. Rename to...
+ (aarch64_types_ternop_lane_qualifiers): ... This.
+ (TYPES_QUADOP): Rename to...
+ (TYPES_TERNOP_LANE): ... This.
+ (aarch64_simd_expand_args): Return const0_rtx when encountering user
+ error. Change return of 0 to return of NULL_RTX.
+ (aarch64_crc32_expand_builtin): Likewise.
+ (aarch64_expand_builtin): Return NULL_RTX instead of 0.
+ ICE when expanding unknown builtin.
+ * config/aarch64/aarch64-simd-builtins.def (sqdmlal_lane): Use
+ TERNOP_LANE qualifiers.
+ (sqdmlsl_lane): Likewise.
+ (sqdmlal_laneq): Likewise.
+ (sqdmlsl_laneq): Likewise.
+ (sqdmlal2_lane): Likewise.
+ (sqdmlsl2_lane): Likewise.
+ (sqdmlal2_laneq): Likewise.
+ (sqdmlsl2_laneq): Likewise.
+ * gcc.target/aarch64/vqdml_lane_intrinsics-bad_1.c: New test.
Index: gcc/config/aarch64/aarch64-builtins.c
===================================================================
--- gcc/config/aarch64/aarch64-builtins.c (revision 223867)
+++ gcc/config/aarch64/aarch64-builtins.c (working copy)
@@ -172,10 +172,10 @@ aarch64_types_ternopu_qualifiers[SIMD_MAX_BUILTIN_
#define TYPES_TERNOPU (aarch64_types_ternopu_qualifiers)
static enum aarch64_type_qualifiers
-aarch64_types_quadop_qualifiers[SIMD_MAX_BUILTIN_ARGS]
+aarch64_types_ternop_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
= { qualifier_none, qualifier_none, qualifier_none,
- qualifier_none, qualifier_none };
-#define TYPES_QUADOP (aarch64_types_quadop_qualifiers)
+ qualifier_none, qualifier_immediate };
+#define TYPES_TERNOP_LANE (aarch64_types_ternop_lane_qualifiers)
static enum aarch64_type_qualifiers
aarch64_types_getlane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
@@ -818,8 +818,11 @@ aarch64_simd_expand_args (rtx target, int icode, i
case SIMD_ARG_CONSTANT:
if (!(*insn_data[icode].operand[argc + have_retval].predicate)
(op[argc], mode[argc]))
- error_at (EXPR_LOCATION (exp), "incompatible type for argument %d, "
+ {
+ error_at (EXPR_LOCATION (exp), "incompatible type for argument %d, "
"expected %<const int%>", argc + 1);
+ return const0_rtx;
+ }
break;
case SIMD_ARG_STOP:
@@ -886,7 +889,7 @@ aarch64_simd_expand_args (rtx target, int icode, i
}
if (!pat)
- return 0;
+ return NULL_RTX;
> -----Original Message-----
> From: James Greenhalgh [mailto:james.greenhalgh@arm.com]
> Sent: Thursday, May 28, 2015 9:58 PM
> To: weixiangyu
> Cc: gcc-patches@gcc.gnu.org; Marcus Shawcroft; Richard Earnshaw; Yangfei
> (Felix)
> Subject: Re: backport the fixes of PR target/64011 and /61749 to 4.9 gcc
>
> On Wed, May 27, 2015 at 03:49:24AM +0100, weixiangyu wrote:
> > Hi,
>
> Hi,
>
> > The first patch backports the fix of PR
> > target/64011(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64011) to
> > the 4.9 branch from trunk r219717,
>
> I can't approve this patch to be backported, so please do not commit it without
> approval from the appropriate maintainer.
>
> > and the second patch backports the fix of PR
> > target/61749(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61749) to
> > the 4.9 branch from trunk r215046.
>
> This second patch is OK to backport to 4.9. It is a harmelss enough patch which
> fixes an ICE.
>
> Thanks,
> James
>
> > And the second one:
> >
> ================================================================
> ===
> > --- gcc/ChangeLog-HCC (revision 130589)
> > +++ gcc/ChangeLog-HCC (revision 130590)
> > @@ -1,3 +1,29 @@
> > +2015-05-26 y00166676 <felix.yang@huawei.com>
> > +
> > + Backport from trunk r215046.
> > + 2014-09-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
> > +
> > + PR target/61749
> > + * config/aarch64/aarch64-builtins.c
> (aarch64_types_quadop_qualifiers):
> > + Use qualifier_immediate for last operand. Rename to...
> > + (aarch64_types_ternop_lane_qualifiers): ... This.
> > + (TYPES_QUADOP): Rename to...
> > + (TYPES_TERNOP_LANE): ... This.
> > + (aarch64_simd_expand_args): Return const0_rtx when
> encountering user
> > + error. Change return of 0 to return of NULL_RTX.
> > + (aarch64_crc32_expand_builtin): Likewise.
> > + (aarch64_expand_builtin): Return NULL_RTX instead of 0.
> > + ICE when expanding unknown builtin.
> > + * config/aarch64/aarch64-simd-builtins.def (sqdmlal_lane): Use
> > + TERNOP_LANE qualifiers.
> > + (sqdmlsl_lane): Likewise.
> > + (sqdmlal_laneq): Likewise.
> > + (sqdmlsl_laneq): Likewise.
> > + (sqdmlal2_lane): Likewise.
> > + (sqdmlsl2_lane): Likewise.
> > + (sqdmlal2_laneq): Likewise.
> > + (sqdmlsl2_laneq): Likewise.
> > +
> > * gcc.target/aarch64/vqdml_lane_intrinsics-bad_1.c: New test.
> >
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr64011.patch
Type: application/octet-stream
Size: 1926 bytes
Desc: pr64011.patch
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150610/81cc456b/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr61749.patch
Type: application/octet-stream
Size: 4356 bytes
Desc: pr61749.patch
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150610/81cc456b/attachment-0001.obj>
More information about the Gcc-patches
mailing list