mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-10 16:40:03 +00:00
gcc-4.6: Fix ICE on x86_64 seen during vectorization
Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
@@ -53,7 +53,7 @@
|
|||||||
Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c
|
Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c 2011-09-16 20:32:57.279056697 -0700
|
+++ gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c 2012-01-09 15:03:29.156918805 -0800
|
||||||
@@ -0,0 +1,52 @@
|
@@ -0,0 +1,52 @@
|
||||||
+/* { dg-require-effective-target vect_int } */
|
+/* { dg-require-effective-target vect_int } */
|
||||||
+
|
+
|
||||||
@@ -110,7 +110,7 @@ Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c
|
|||||||
Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c
|
Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c 2011-09-16 20:32:57.279056697 -0700
|
+++ gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c 2012-01-09 15:03:29.156918805 -0800
|
||||||
@@ -0,0 +1,59 @@
|
@@ -0,0 +1,59 @@
|
||||||
+/* { dg-require-effective-target vect_int } */
|
+/* { dg-require-effective-target vect_int } */
|
||||||
+
|
+
|
||||||
@@ -174,7 +174,7 @@ Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c
|
|||||||
Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c
|
Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c 2011-09-16 20:32:57.279056697 -0700
|
+++ gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c 2012-01-09 15:03:29.160918806 -0800
|
||||||
@@ -0,0 +1,49 @@
|
@@ -0,0 +1,49 @@
|
||||||
+/* { dg-require-effective-target vect_int } */
|
+/* { dg-require-effective-target vect_int } */
|
||||||
+
|
+
|
||||||
@@ -227,8 +227,8 @@ Index: gcc-4_6-branch/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c
|
|||||||
+
|
+
|
||||||
Index: gcc-4_6-branch/gcc/tree-vect-loop.c
|
Index: gcc-4_6-branch/gcc/tree-vect-loop.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gcc-4_6-branch.orig/gcc/tree-vect-loop.c 2011-09-16 20:31:52.000000000 -0700
|
--- gcc-4_6-branch.orig/gcc/tree-vect-loop.c 2012-01-09 15:02:15.000000000 -0800
|
||||||
+++ gcc-4_6-branch/gcc/tree-vect-loop.c 2011-09-16 20:32:57.289056641 -0700
|
+++ gcc-4_6-branch/gcc/tree-vect-loop.c 2012-01-09 15:03:29.160918806 -0800
|
||||||
@@ -181,6 +181,8 @@
|
@@ -181,6 +181,8 @@
|
||||||
stmt_vec_info stmt_info;
|
stmt_vec_info stmt_info;
|
||||||
int i;
|
int i;
|
||||||
@@ -379,8 +379,8 @@ Index: gcc-4_6-branch/gcc/tree-vect-loop.c
|
|||||||
|
|
||||||
Index: gcc-4_6-branch/gcc/tree-vect-patterns.c
|
Index: gcc-4_6-branch/gcc/tree-vect-patterns.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gcc-4_6-branch.orig/gcc/tree-vect-patterns.c 2011-09-16 20:31:52.000000000 -0700
|
--- gcc-4_6-branch.orig/gcc/tree-vect-patterns.c 2012-01-09 15:02:15.000000000 -0800
|
||||||
+++ gcc-4_6-branch/gcc/tree-vect-patterns.c 2011-09-16 20:32:57.289056641 -0700
|
+++ gcc-4_6-branch/gcc/tree-vect-patterns.c 2012-01-09 15:03:29.160918806 -0800
|
||||||
@@ -39,10 +39,13 @@
|
@@ -39,10 +39,13 @@
|
||||||
#include "diagnostic-core.h"
|
#include "diagnostic-core.h"
|
||||||
|
|
||||||
@@ -930,8 +930,8 @@ Index: gcc-4_6-branch/gcc/tree-vect-patterns.c
|
|||||||
fprintf (vect_dump, "=== vect_pattern_recog ===");
|
fprintf (vect_dump, "=== vect_pattern_recog ===");
|
||||||
Index: gcc-4_6-branch/gcc/tree-vect-slp.c
|
Index: gcc-4_6-branch/gcc/tree-vect-slp.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gcc-4_6-branch.orig/gcc/tree-vect-slp.c 2011-09-16 20:31:52.000000000 -0700
|
--- gcc-4_6-branch.orig/gcc/tree-vect-slp.c 2012-01-09 15:02:15.000000000 -0800
|
||||||
+++ gcc-4_6-branch/gcc/tree-vect-slp.c 2011-09-16 20:32:57.289056641 -0700
|
+++ gcc-4_6-branch/gcc/tree-vect-slp.c 2012-01-09 15:03:29.160918806 -0800
|
||||||
@@ -152,7 +152,9 @@
|
@@ -152,7 +152,9 @@
|
||||||
if (loop && def_stmt && gimple_bb (def_stmt)
|
if (loop && def_stmt && gimple_bb (def_stmt)
|
||||||
&& flow_bb_inside_loop_p (loop, gimple_bb (def_stmt))
|
&& flow_bb_inside_loop_p (loop, gimple_bb (def_stmt))
|
||||||
@@ -945,8 +945,8 @@ Index: gcc-4_6-branch/gcc/tree-vect-slp.c
|
|||||||
*pattern0 = true;
|
*pattern0 = true;
|
||||||
Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gcc-4_6-branch.orig/gcc/tree-vect-stmts.c 2011-09-16 20:31:52.000000000 -0700
|
--- gcc-4_6-branch.orig/gcc/tree-vect-stmts.c 2012-01-09 15:02:15.000000000 -0800
|
||||||
+++ gcc-4_6-branch/gcc/tree-vect-stmts.c 2011-09-16 20:32:57.289056641 -0700
|
+++ gcc-4_6-branch/gcc/tree-vect-stmts.c 2012-01-09 15:06:23.636927250 -0800
|
||||||
@@ -126,33 +126,72 @@
|
@@ -126,33 +126,72 @@
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1007,6 +1007,8 @@ Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
|||||||
+ pattern that can potentially be vectorized. Don't mark the stmt
|
+ pattern that can potentially be vectorized. Don't mark the stmt
|
||||||
+ as relevant/live because it's not going to be vectorized.
|
+ as relevant/live because it's not going to be vectorized.
|
||||||
+ Instead mark the pattern-stmt that replaces it. */
|
+ Instead mark the pattern-stmt that replaces it. */
|
||||||
|
+
|
||||||
|
+ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
|
||||||
|
|
||||||
- /* This is the last stmt in a sequence that was detected as a
|
- /* This is the last stmt in a sequence that was detected as a
|
||||||
- pattern that can potentially be vectorized. Don't mark the stmt
|
- pattern that can potentially be vectorized. Don't mark the stmt
|
||||||
@@ -1022,8 +1024,6 @@ Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
|||||||
- save_relevant = STMT_VINFO_RELEVANT (stmt_info);
|
- save_relevant = STMT_VINFO_RELEVANT (stmt_info);
|
||||||
- save_live_p = STMT_VINFO_LIVE_P (stmt_info);
|
- save_live_p = STMT_VINFO_LIVE_P (stmt_info);
|
||||||
- stmt = pattern_stmt;
|
- stmt = pattern_stmt;
|
||||||
+ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
|
|
||||||
+
|
|
||||||
+ if (vect_print_dump_info (REPORT_DETAILS))
|
+ if (vect_print_dump_info (REPORT_DETAILS))
|
||||||
+ fprintf (vect_dump, "last stmt in pattern. don't mark"
|
+ fprintf (vect_dump, "last stmt in pattern. don't mark"
|
||||||
+ " relevant/live.");
|
+ " relevant/live.");
|
||||||
@@ -1181,11 +1181,11 @@ Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
|||||||
In basic blocks we only analyze statements that are a part of some SLP
|
In basic blocks we only analyze statements that are a part of some SLP
|
||||||
- instance, therefore, all the statements are relevant. */
|
- instance, therefore, all the statements are relevant. */
|
||||||
+ instance, therefore, all the statements are relevant.
|
+ instance, therefore, all the statements are relevant.
|
||||||
|
+
|
||||||
+ Pattern statement need to be analyzed instead of the original statement
|
+ Pattern statement need to be analyzed instead of the original statement
|
||||||
+ if the original statement is not relevant. Otherwise, we analyze both
|
+ if the original statement is not relevant. Otherwise, we analyze both
|
||||||
+ statements. */
|
+ statements. */
|
||||||
+
|
|
||||||
+ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
|
+ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
|
||||||
if (!STMT_VINFO_RELEVANT_P (stmt_info)
|
if (!STMT_VINFO_RELEVANT_P (stmt_info)
|
||||||
&& !STMT_VINFO_LIVE_P (stmt_info))
|
&& !STMT_VINFO_LIVE_P (stmt_info))
|
||||||
@@ -1222,7 +1222,37 @@ Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
|||||||
|
|
||||||
switch (STMT_VINFO_DEF_TYPE (stmt_info))
|
switch (STMT_VINFO_DEF_TYPE (stmt_info))
|
||||||
{
|
{
|
||||||
@@ -5605,8 +5687,12 @@
|
@@ -5074,7 +5156,6 @@
|
||||||
|
bool is_store = false;
|
||||||
|
gimple vec_stmt = NULL;
|
||||||
|
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
|
||||||
|
- gimple orig_stmt_in_pattern;
|
||||||
|
bool done;
|
||||||
|
|
||||||
|
switch (STMT_VINFO_TYPE (stmt_info))
|
||||||
|
@@ -5213,21 +5294,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec_stmt)
|
||||||
|
- {
|
||||||
|
STMT_VINFO_VEC_STMT (stmt_info) = vec_stmt;
|
||||||
|
- orig_stmt_in_pattern = STMT_VINFO_RELATED_STMT (stmt_info);
|
||||||
|
- if (orig_stmt_in_pattern)
|
||||||
|
- {
|
||||||
|
- stmt_vec_info stmt_vinfo = vinfo_for_stmt (orig_stmt_in_pattern);
|
||||||
|
- /* STMT was inserted by the vectorizer to replace a computation idiom.
|
||||||
|
- ORIG_STMT_IN_PATTERN is a stmt in the original sequence that
|
||||||
|
- computed this idiom. We need to record a pointer to VEC_STMT in
|
||||||
|
- the stmt_info of ORIG_STMT_IN_PATTERN. See more details in the
|
||||||
|
- documentation of vect_pattern_recog. */
|
||||||
|
- if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo))
|
||||||
|
- STMT_VINFO_VEC_STMT (stmt_vinfo) = vec_stmt;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
|
||||||
|
return is_store;
|
||||||
|
}
|
||||||
|
@@ -5605,8 +5672,12 @@
|
||||||
|| *dt == vect_nested_cycle)
|
|| *dt == vect_nested_cycle)
|
||||||
{
|
{
|
||||||
stmt_vec_info stmt_info = vinfo_for_stmt (*def_stmt);
|
stmt_vec_info stmt_info = vinfo_for_stmt (*def_stmt);
|
||||||
@@ -1238,8 +1268,8 @@ Index: gcc-4_6-branch/gcc/tree-vect-stmts.c
|
|||||||
}
|
}
|
||||||
Index: gcc-4_6-branch/gcc/tree-vectorizer.h
|
Index: gcc-4_6-branch/gcc/tree-vectorizer.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gcc-4_6-branch.orig/gcc/tree-vectorizer.h 2011-09-16 20:31:52.000000000 -0700
|
--- gcc-4_6-branch.orig/gcc/tree-vectorizer.h 2012-01-09 15:02:15.000000000 -0800
|
||||||
+++ gcc-4_6-branch/gcc/tree-vectorizer.h 2011-09-16 20:32:57.299056515 -0700
|
+++ gcc-4_6-branch/gcc/tree-vectorizer.h 2012-01-09 15:03:29.164918806 -0800
|
||||||
@@ -890,7 +890,7 @@
|
@@ -890,7 +890,7 @@
|
||||||
/* Pattern recognition functions.
|
/* Pattern recognition functions.
|
||||||
Additional pattern recognition functions can (and will) be added
|
Additional pattern recognition functions can (and will) be added
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# this will prepend this layer to FILESPATH
|
# this will prepend this layer to FILESPATH
|
||||||
FILESEXTRAPATHS := "${THISDIR}/gcc-4.6"
|
FILESEXTRAPATHS := "${THISDIR}/gcc-4.6"
|
||||||
PRINC = "3"
|
PRINC = "4"
|
||||||
ARM_INSTRUCTION_SET = "arm"
|
ARM_INSTRUCTION_SET = "arm"
|
||||||
|
|||||||
Reference in New Issue
Block a user