[OE-core] [pyro][PATCH] gcc: Backport upstream r261799
Khem Raj
raj.khem at gmail.com
Tue Aug 21 23:55:12 UTC 2018
Hi Armin
This change is fine.
Please stage this for pyro.
On Wed, Jul 18, 2018 at 4:18 AM Raphael Kubo da Costa
<raphael.kubo.da.costa at intel.com> wrote:
>
> The upstream commit merges several bug fixes into the GCC 6 branch; we are
> specifically interested in the fix for GCC bug 83623, which was causing
> Chromium 68+ to fail to build on ARM and aarch64 with
>
> In file included from ../../third_party/skia/third_party/skcms/src/Transform.c:176:0:
> ../../third_party/skia/third_party/skcms/src/Transform_inl.h: In function 'exec_ops':
> ../../third_party/skia/third_party/skcms/src/Transform_inl.h:459:32: internal compiler error: in convert_move, at expr.c:299
> v = (U16)( ((v<<8)|(v>>8)) & 0xffff );
> ~~~~~~~~~~~~~~~~~~^~~~~~~~~~
>
> Signed-off-by: Raphael Kubo da Costa <raphael.kubo.da.costa at intel.com>
> ---
> meta/recipes-devtools/gcc/gcc-6.4.inc | 1 +
> ...18-06-20-Richard-Biener-rguenther-suse.de.patch | 504 +++++++++++++++++++++
> 2 files changed, 505 insertions(+)
> create mode 100644 meta/recipes-devtools/gcc/gcc-6.4/0058-2018-06-20-Richard-Biener-rguenther-suse.de.patch
>
> diff --git a/meta/recipes-devtools/gcc/gcc-6.4.inc b/meta/recipes-devtools/gcc/gcc-6.4.inc
> index daa9e42af8..f3cada2e9f 100644
> --- a/meta/recipes-devtools/gcc/gcc-6.4.inc
> +++ b/meta/recipes-devtools/gcc/gcc-6.4.inc
> @@ -86,6 +86,7 @@ SRC_URI = "\
> BACKPORTS = "\
> file://CVE-2016-6131.patch \
> file://0057-ARM-PR-82445-suppress-32-bit-aligned-ldrd-strd-peeph.patch \
> + file://0058-2018-06-20-Richard-Biener-rguenther-suse.de.patch \
> file://0001-enable-FL_LPAE-flag-for-armv7ve-cores.patch \
> file://0001-i386-Move-struct-ix86_frame-to-machine_function.patch \
> file://0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch \
> diff --git a/meta/recipes-devtools/gcc/gcc-6.4/0058-2018-06-20-Richard-Biener-rguenther-suse.de.patch b/meta/recipes-devtools/gcc/gcc-6.4/0058-2018-06-20-Richard-Biener-rguenther-suse.de.patch
> new file mode 100644
> index 0000000000..55d420147b
> --- /dev/null
> +++ b/meta/recipes-devtools/gcc/gcc-6.4/0058-2018-06-20-Richard-Biener-rguenther-suse.de.patch
> @@ -0,0 +1,504 @@
> +Upstream-Status: Backport
> +
> +Upstream's GCC 6 backport includes several changes, but it's the fix
> +for bug 63623 that is required to build Chromium >= 68 with GCC 6 on
> +ARM-based architectures.
> +
> +Signed-off-by: Raphael Kubo da Costa <raphael.kubo.da.costa at intel.com>
> +---
> +From 4ff56937609df5e6373d83d197a85c062454bc05 Mon Sep 17 00:00:00 2001
> +From: rguenth <rguenth at 138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Wed, 20 Jun 2018 11:09:28 +0000
> +Subject: [PATCH] 2018-06-20 Richard Biener <rguenther at suse.de>
> +
> + Backport from mainline
> + 2018-01-01 Jakub Jelinek <jakub at redhat.com>
> +
> + PR middle-end/83623
> + * expmed.c (expand_shift_1): For 2-byte rotates by BITS_PER_UNIT,
> + check for bswap in mode rather than HImode and use that in expand_unop
> + too.
> +
> + * gcc.dg/pr83623.c: New test.
> +
> + 2017-09-26 Richard Biener <rguenther at suse.de>
> +
> + Backport from mainline
> + 2017-09-20 Richard Biener <rguenther at suse.de>
> +
> + PR tree-optimization/82264
> + * tree-ssa-sccvn.c (vn_phi_eq): Use safe_dyn_cast to check
> + for GIMPLE_CONDs.
> + (vn_phi_lookup): Likewise.
> + (vn_phi_insert): Likewise.
> + * is-a.h (safe_dyn_cast): New.
> +
> + * gcc.dg/torture/pr82264.c: New testcase.
> +
> + 2017-09-25 Richard Biener <rguenther at suse.de>
> +
> + PR tree-optimization/82285
> + * tree-vect-patterns.c (vect_recog_bool_pattern): Also handle
> + enumeral types.
> +
> + * gcc.dg/torture/pr82285.c: New testcase.
> +
> + 2017-11-24 Richard Biener <rguenther at suse.de>
> +
> + PR tree-optimization/82402
> + * tree-vect-loop-manip.c (create_lcssa_for_virtual_phi): Properly
> + set SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
> +
> + * gcc.dg/torture/pr82402.c: New testcase.
> +
> + 2017-10-24 Richard Biener <rguenther at suse.de>
> +
> + PR tree-optimization/82697
> + * tree-ssa-phiopt.c (cond_store_replacement): Use alias-set
> + zero for conditional load and unconditional store.
> +
> + * gcc.dg/torture/pr82697.c: New testcase.
> +
> + 2017-11-02 Richard Biener <rguenther at suse.de>
> +
> + PR middle-end/82765
> + * varasm.c (decode_addr_const): Make offset HOST_WIDE_INT.
> + Truncate ARRAY_REF index and element size.
> +
> + * gcc.dg/pr82765.c: New testcase.
> +
> + 2018-01-08 Richard Biener <rguenther at suse.de>
> +
> + PR middle-end/83713
> + * convert.c (do_narrow): Properly guard TYPE_OVERFLOW_WRAPS checks.
> +
> + * g++.dg/torture/pr83713.C: New testcase.
> +
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@261799 138bc75d-0d04-0410-961f-82ee72b054a4
> +---
> + gcc/ChangeLog | 51 ++++++++++++++++++++++++++++++++++
> + gcc/convert.c | 6 ++--
> + gcc/expmed.c | 5 ++--
> + gcc/is-a.h | 14 ++++++++++
> + gcc/testsuite/ChangeLog | 41 +++++++++++++++++++++++++++
> + gcc/testsuite/g++.dg/torture/pr83713.C | 12 ++++++++
> + gcc/testsuite/gcc.dg/pr82765.c | 5 ++++
> + gcc/testsuite/gcc.dg/pr83623.c | 12 ++++++++
> + gcc/testsuite/gcc.dg/torture/pr82264.c | 21 ++++++++++++++
> + gcc/testsuite/gcc.dg/torture/pr82285.c | 16 +++++++++++
> + gcc/testsuite/gcc.dg/torture/pr82402.c | 20 +++++++++++++
> + gcc/testsuite/gcc.dg/torture/pr82697.c | 23 +++++++++++++++
> + gcc/tree-ssa-alias.c | 31 +++++++++++++++------
> + gcc/tree-ssa-phiopt.c | 17 +++++++++++-
> + gcc/tree-ssa-sccvn.c | 17 +++++-------
> + gcc/tree-vect-loop-manip.c | 2 ++
> + gcc/tree-vect-patterns.c | 2 +-
> + gcc/varasm.c | 7 +++--
> + 18 files changed, 273 insertions(+), 29 deletions(-)
> + create mode 100644 gcc/testsuite/g++.dg/torture/pr83713.C
> + create mode 100644 gcc/testsuite/gcc.dg/pr82765.c
> + create mode 100644 gcc/testsuite/gcc.dg/pr83623.c
> + create mode 100644 gcc/testsuite/gcc.dg/torture/pr82264.c
> + create mode 100644 gcc/testsuite/gcc.dg/torture/pr82285.c
> + create mode 100644 gcc/testsuite/gcc.dg/torture/pr82402.c
> + create mode 100644 gcc/testsuite/gcc.dg/torture/pr82697.c
> +
> +diff --git a/gcc/convert.c b/gcc/convert.c
> +index 455304adb0c..f4b4712f023 100644
> +--- a/gcc/convert.c
> ++++ b/gcc/convert.c
> +@@ -459,8 +459,10 @@ do_narrow (location_t loc,
> + type in case the operation in outprec precision
> + could overflow. Otherwise, we would introduce
> + signed-overflow undefinedness. */
> +- || ((!TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0))
> +- || !TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg1)))
> ++ || ((!(INTEGRAL_TYPE_P (TREE_TYPE (arg0))
> ++ && TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0)))
> ++ || !(INTEGRAL_TYPE_P (TREE_TYPE (arg1))
> ++ && TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg1))))
> + && ((TYPE_PRECISION (TREE_TYPE (arg0)) * 2u
> + > outprec)
> + || (TYPE_PRECISION (TREE_TYPE (arg1)) * 2u
> +diff --git a/gcc/expmed.c b/gcc/expmed.c
> +index 80edb0d03fb..8e069455bc2 100644
> +--- a/gcc/expmed.c
> ++++ b/gcc/expmed.c
> +@@ -2361,9 +2361,8 @@ expand_shift_1 (enum tree_code code, machine_mode mode, rtx shifted,
> + && CONST_INT_P (op1)
> + && INTVAL (op1) == BITS_PER_UNIT
> + && GET_MODE_SIZE (scalar_mode) == 2
> +- && optab_handler (bswap_optab, HImode) != CODE_FOR_nothing)
> +- return expand_unop (HImode, bswap_optab, shifted, NULL_RTX,
> +- unsignedp);
> ++ && optab_handler (bswap_optab, mode) != CODE_FOR_nothing)
> ++ return expand_unop (mode, bswap_optab, shifted, NULL_RTX, unsignedp);
> +
> + if (op1 == const0_rtx)
> + return shifted;
> +diff --git a/gcc/is-a.h b/gcc/is-a.h
> +index 872aec1f5e7..05dd11dbe75 100644
> +--- a/gcc/is-a.h
> ++++ b/gcc/is-a.h
> +@@ -103,6 +103,11 @@ TYPE dyn_cast <TYPE> (pointer)
> + Note that we have converted two sets of assertions in the calls to varpool
> + into safe and efficient use of a variable.
> +
> ++TYPE safe_dyn_cast <TYPE> (pointer)
> ++
> ++ Like dyn_cast <TYPE> (pointer), except that it accepts null pointers
> ++ and returns null results for them.
> ++
> +
> + If you use these functions and get a 'inline function not defined' or a
> + 'missing symbol' error message for 'is_a_helper<....>::test', it means that
> +@@ -222,4 +227,13 @@ dyn_cast (U *p)
> + return static_cast <T> (0);
> + }
> +
> ++/* Similar to dyn_cast, except that the pointer may be null. */
> ++
> ++template <typename T, typename U>
> ++inline T
> ++safe_dyn_cast (U *p)
> ++{
> ++ return p ? dyn_cast <T> (p) : 0;
> ++}
> ++
> + #endif /* GCC_IS_A_H */
> +diff --git a/gcc/testsuite/g++.dg/torture/pr83713.C b/gcc/testsuite/g++.dg/torture/pr83713.C
> +new file mode 100644
> +index 00000000000..ca6af04406d
> +--- /dev/null
> ++++ b/gcc/testsuite/g++.dg/torture/pr83713.C
> +@@ -0,0 +1,12 @@
> ++// { dg-do compile }
> ++
> ++class a
> ++{
> ++ char b;
> ++ void c ();
> ++};
> ++void
> ++a::c ()
> ++{
> ++ &b + ((long long) &b & 0);
> ++}
> +diff --git a/gcc/testsuite/gcc.dg/pr82765.c b/gcc/testsuite/gcc.dg/pr82765.c
> +new file mode 100644
> +index 00000000000..dde0aeba7ef
> +--- /dev/null
> ++++ b/gcc/testsuite/gcc.dg/pr82765.c
> +@@ -0,0 +1,5 @@
> ++/* { dg-do compile } */
> ++/* { dg-options "-Os -w" } */
> ++
> ++int a[1][1];
> ++int main() { int *b[] = {a, a[1820408606019012862278468], a, a, a}; }
> +diff --git a/gcc/testsuite/gcc.dg/pr83623.c b/gcc/testsuite/gcc.dg/pr83623.c
> +new file mode 100644
> +index 00000000000..5d62c04f542
> +--- /dev/null
> ++++ b/gcc/testsuite/gcc.dg/pr83623.c
> +@@ -0,0 +1,12 @@
> ++/* PR middle-end/83623 */
> ++/* { dg-do compile } */
> ++/* { dg-options "-O2" } */
> ++/* { dg-additional-options "-mmovbe" { target i?86-*-* x86_64-*-* } } */
> ++
> ++unsigned short __attribute__ ((__vector_size__ (16))) x;
> ++
> ++void
> ++foo (void)
> ++{
> ++ x = x << 8 | x >> 8;
> ++}
> +diff --git a/gcc/testsuite/gcc.dg/torture/pr82264.c b/gcc/testsuite/gcc.dg/torture/pr82264.c
> +new file mode 100644
> +index 00000000000..2bc03674ccd
> +--- /dev/null
> ++++ b/gcc/testsuite/gcc.dg/torture/pr82264.c
> +@@ -0,0 +1,21 @@
> ++/* { dg-do compile } */
> ++
> ++char a;
> ++int c;
> ++unsigned b ();
> ++unsigned
> ++setjmp ()
> ++{
> ++}
> ++static void
> ++d ()
> ++{
> ++ if (b ())
> ++ c = 3;
> ++}
> ++void
> ++e ()
> ++{
> ++ d ();
> ++ a && ({ setjmp (); });
> ++}
> +diff --git a/gcc/testsuite/gcc.dg/torture/pr82285.c b/gcc/testsuite/gcc.dg/torture/pr82285.c
> +new file mode 100644
> +index 00000000000..6edc75070b2
> +--- /dev/null
> ++++ b/gcc/testsuite/gcc.dg/torture/pr82285.c
> +@@ -0,0 +1,16 @@
> ++/* { dg-do run } */
> ++
> ++enum tst { first = 0, second = 1 };
> ++
> ++int
> ++main ()
> ++{
> ++ enum tst data[16];
> ++
> ++ for (unsigned i = 0; i < 16; i++)
> ++ data[i] = (i < 5 ? second : first);
> ++
> ++ if (data[2] != second)
> ++ __builtin_abort ();
> ++ return 0;
> ++}
> +diff --git a/gcc/testsuite/gcc.dg/torture/pr82402.c b/gcc/testsuite/gcc.dg/torture/pr82402.c
> +new file mode 100644
> +index 00000000000..cf90d5c6faf
> +--- /dev/null
> ++++ b/gcc/testsuite/gcc.dg/torture/pr82402.c
> +@@ -0,0 +1,20 @@
> ++/* { dg-do compile } */
> ++
> ++typedef int jmp_buf[1];
> ++
> ++extern void exit(int) __attribute__((__noreturn__));
> ++extern int setjmpx(jmp_buf) __attribute__((__returns_twice__));
> ++
> ++jmp_buf jbAnagram;
> ++int a[6];
> ++int d;
> ++int b () { exit (1); }
> ++int c () { b (); }
> ++int e ()
> ++{
> ++ int f = 0;
> ++ for (; f < 6; f++)
> ++ a[f] = d;
> ++ c ();
> ++ setjmpx (jbAnagram);
> ++}
> +diff --git a/gcc/testsuite/gcc.dg/torture/pr82697.c b/gcc/testsuite/gcc.dg/torture/pr82697.c
> +new file mode 100644
> +index 00000000000..57da8a264b9
> +--- /dev/null
> ++++ b/gcc/testsuite/gcc.dg/torture/pr82697.c
> +@@ -0,0 +1,23 @@
> ++/* { dg-do run } */
> ++
> ++__attribute__((noinline,noclone))
> ++void test(int *pi, long *pl, int f)
> ++{
> ++ *pl = 0;
> ++
> ++ *pi = 1;
> ++
> ++ if (f)
> ++ *pl = 2;
> ++}
> ++
> ++int main()
> ++{
> ++ void *p = __builtin_malloc(sizeof (long));
> ++
> ++ test(p, p, 0);
> ++
> ++ if (*(int *)p != 1)
> ++ __builtin_abort ();
> ++ return 0;
> ++}
> +diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
> +index 08f10e5248b..3f0011f3d10 100644
> +--- a/gcc/tree-ssa-alias.c
> ++++ b/gcc/tree-ssa-alias.c
> +@@ -2235,6 +2235,7 @@ stmt_kills_ref_p (gimple *stmt, ao_ref *ref)
> + if (ref->ref)
> + {
> + tree base = ref->ref;
> ++ tree innermost_dropped_array_ref = NULL_TREE;
> + if (handled_component_p (base))
> + {
> + tree saved_lhs0 = NULL_TREE;
> +@@ -2254,6 +2255,11 @@ stmt_kills_ref_p (gimple *stmt, ao_ref *ref)
> + TREE_OPERAND (base, 0) = saved_base0;
> + if (res)
> + break;
> ++ /* Remember if we drop an array-ref that we need to
> ++ double-check not being at struct end. */
> ++ if (TREE_CODE (base) == ARRAY_REF
> ++ || TREE_CODE (base) == ARRAY_RANGE_REF)
> ++ innermost_dropped_array_ref = base;
> + /* Otherwise drop handled components of the access. */
> + base = saved_base0;
> + }
> +@@ -2262,15 +2268,22 @@ stmt_kills_ref_p (gimple *stmt, ao_ref *ref)
> + TREE_OPERAND (lhs, 0) = saved_lhs0;
> + }
> + /* Finally check if the lhs has the same address and size as the
> +- base candidate of the access. */
> +- if (lhs == base
> +- || (((TYPE_SIZE (TREE_TYPE (lhs))
> +- == TYPE_SIZE (TREE_TYPE (base)))
> +- || (TYPE_SIZE (TREE_TYPE (lhs))
> +- && TYPE_SIZE (TREE_TYPE (base))
> +- && operand_equal_p (TYPE_SIZE (TREE_TYPE (lhs)),
> +- TYPE_SIZE (TREE_TYPE (base)), 0)))
> +- && operand_equal_p (lhs, base, OEP_ADDRESS_OF)))
> ++ base candidate of the access. Watch out if we have dropped
> ++ an array-ref that was at struct end, this means ref->ref may
> ++ be outside of the TYPE_SIZE of its base. */
> ++ if ((! innermost_dropped_array_ref
> ++ || ! array_at_struct_end_p (innermost_dropped_array_ref))
> ++ && (lhs == base
> ++ || (((TYPE_SIZE (TREE_TYPE (lhs))
> ++ == TYPE_SIZE (TREE_TYPE (base)))
> ++ || (TYPE_SIZE (TREE_TYPE (lhs))
> ++ && TYPE_SIZE (TREE_TYPE (base))
> ++ && operand_equal_p (TYPE_SIZE (TREE_TYPE (lhs)),
> ++ TYPE_SIZE (TREE_TYPE (base)),
> ++ 0)))
> ++ && operand_equal_p (lhs, base,
> ++ OEP_ADDRESS_OF
> ++ | OEP_MATCH_SIDE_EFFECTS))))
> + return true;
> + }
> +
> +diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c
> +index f6880ba88f3..fb6e8be4343 100644
> +--- a/gcc/tree-ssa-phiopt.c
> ++++ b/gcc/tree-ssa-phiopt.c
> +@@ -1761,9 +1761,24 @@ cond_store_replacement (basic_block middle_bb, basic_block join_bb,
> + gsi_remove (&gsi, true);
> + release_defs (assign);
> +
> ++ /* Make both store and load use alias-set zero as we have to
> ++ deal with the case of the store being a conditional change
> ++ of the dynamic type. */
> ++ lhs = unshare_expr (lhs);
> ++ tree *basep = &lhs;
> ++ while (handled_component_p (*basep))
> ++ basep = &TREE_OPERAND (*basep, 0);
> ++ if (TREE_CODE (*basep) == MEM_REF
> ++ || TREE_CODE (*basep) == TARGET_MEM_REF)
> ++ TREE_OPERAND (*basep, 1)
> ++ = fold_convert (ptr_type_node, TREE_OPERAND (*basep, 1));
> ++ else
> ++ *basep = build2 (MEM_REF, TREE_TYPE (*basep),
> ++ build_fold_addr_expr (*basep),
> ++ build_zero_cst (ptr_type_node));
> ++
> + /* 2) Insert a load from the memory of the store to the temporary
> + on the edge which did not contain the store. */
> +- lhs = unshare_expr (lhs);
> + name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore");
> + new_stmt = gimple_build_assign (name, lhs);
> + gimple_set_location (new_stmt, locus);
> +diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
> +index 65077ede43c..15838975f37 100644
> +--- a/gcc/tree-ssa-sccvn.c
> ++++ b/gcc/tree-ssa-sccvn.c
> +@@ -2841,16 +2841,13 @@ vn_phi_eq (const_vn_phi_t const vp1, const_vn_phi_t const vp2)
> + return false;
> +
> + /* Verify the controlling stmt is the same. */
> +- gimple *last1 = last_stmt (idom1);
> +- gimple *last2 = last_stmt (idom2);
> +- if (gimple_code (last1) != GIMPLE_COND
> +- || gimple_code (last2) != GIMPLE_COND)
> ++ gcond *last1 = safe_dyn_cast <gcond *> (last_stmt (idom1));
> ++ gcond *last2 = safe_dyn_cast <gcond *> (last_stmt (idom2));
> ++ if (! last1 || ! last2)
> + return false;
> + bool inverted_p;
> +- if (! cond_stmts_equal_p (as_a <gcond *> (last1),
> +- vp1->cclhs, vp1->ccrhs,
> +- as_a <gcond *> (last2),
> +- vp2->cclhs, vp2->ccrhs,
> ++ if (! cond_stmts_equal_p (last1, vp1->cclhs, vp1->ccrhs,
> ++ last2, vp2->cclhs, vp2->ccrhs,
> + &inverted_p))
> + return false;
> +
> +@@ -2935,7 +2932,7 @@ vn_phi_lookup (gimple *phi)
> + vp1.ccrhs = NULL_TREE;
> + basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1.block);
> + if (EDGE_COUNT (idom1->succs) == 2)
> +- if (gcond *last1 = dyn_cast <gcond *> (last_stmt (idom1)))
> ++ if (gcond *last1 = safe_dyn_cast <gcond *> (last_stmt (idom1)))
> + {
> + vp1.cclhs = vn_valueize (gimple_cond_lhs (last1));
> + vp1.ccrhs = vn_valueize (gimple_cond_rhs (last1));
> +@@ -2981,7 +2978,7 @@ vn_phi_insert (gimple *phi, tree result)
> + vp1->ccrhs = NULL_TREE;
> + basic_block idom1 = get_immediate_dominator (CDI_DOMINATORS, vp1->block);
> + if (EDGE_COUNT (idom1->succs) == 2)
> +- if (gcond *last1 = dyn_cast <gcond *> (last_stmt (idom1)))
> ++ if (gcond *last1 = safe_dyn_cast <gcond *> (last_stmt (idom1)))
> + {
> + vp1->cclhs = vn_valueize (gimple_cond_lhs (last1));
> + vp1->ccrhs = vn_valueize (gimple_cond_rhs (last1));
> +diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
> +index 7ec6daec0e6..ecd41d86b29 100644
> +--- a/gcc/tree-vect-loop-manip.c
> ++++ b/gcc/tree-vect-loop-manip.c
> +@@ -1231,6 +1231,8 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loop *scalar_loop,
> + gimple *stmt;
> + use_operand_p use_p;
> +
> ++ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_vop)
> ++ = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vop);
> + add_phi_arg (new_phi, vop, exit_e, UNKNOWN_LOCATION);
> + gimple_phi_set_result (new_phi, new_vop);
> + FOR_EACH_IMM_USE_STMT (stmt, imm_iter, vop)
> +diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
> +index c2a6f0d3fd5..1d419495dff 100644
> +--- a/gcc/tree-vect-patterns.c
> ++++ b/gcc/tree-vect-patterns.c
> +@@ -3363,7 +3363,7 @@ vect_recog_bool_pattern (vec<gimple *> *stmts, tree *type_in,
> + rhs_code = gimple_assign_rhs_code (last_stmt);
> + if (CONVERT_EXPR_CODE_P (rhs_code))
> + {
> +- if (TREE_CODE (TREE_TYPE (lhs)) != INTEGER_TYPE
> ++ if (! INTEGRAL_TYPE_P (TREE_TYPE (lhs))
> + || TYPE_PRECISION (TREE_TYPE (lhs)) == 1)
> + return NULL;
> + vectype = get_vectype_for_scalar_type (TREE_TYPE (lhs));
> +diff --git a/gcc/varasm.c b/gcc/varasm.c
> +index b65f29c13a4..2e88e71c25d 100644
> +--- a/gcc/varasm.c
> ++++ b/gcc/varasm.c
> +@@ -2806,7 +2806,7 @@ static void
> + decode_addr_const (tree exp, struct addr_const *value)
> + {
> + tree target = TREE_OPERAND (exp, 0);
> +- int offset = 0;
> ++ HOST_WIDE_INT offset = 0;
> + rtx x;
> +
> + while (1)
> +@@ -2820,8 +2820,9 @@ decode_addr_const (tree exp, struct addr_const *value)
> + else if (TREE_CODE (target) == ARRAY_REF
> + || TREE_CODE (target) == ARRAY_RANGE_REF)
> + {
> +- offset += (tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (target)))
> +- * tree_to_shwi (TREE_OPERAND (target, 1)));
> ++ /* Truncate big offset. */
> ++ offset += (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (target)))
> ++ * TREE_INT_CST_LOW (TREE_OPERAND (target, 1)));
> + target = TREE_OPERAND (target, 0);
> + }
> + else if (TREE_CODE (target) == MEM_REF
> +--
> +2.14.4
> +
> --
> 2.14.4
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list