diff options
author | Richard Biener <rguenther@suse.de> | 2018-03-20 14:35:46 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-03-20 14:35:46 +0000 |
commit | b6c1e0329bb7c7b511d685ebb17ab4f2c515a75a (patch) | |
tree | 6d8ccb344664032f07be3292d7f39feb55b9835a | |
parent | 14b05bee0ccd7a6a9d7c6d498121caa4d6f9e23d (diff) | |
download | gcc-b6c1e0329bb7c7b511d685ebb17ab4f2c515a75a.zip gcc-b6c1e0329bb7c7b511d685ebb17ab4f2c515a75a.tar.gz gcc-b6c1e0329bb7c7b511d685ebb17ab4f2c515a75a.tar.bz2 |
re PR target/84986 (Performance regression: loop no longer vectorized (x86-64))
2018-03-20 Richard Biener <rguenther@suse.de>
PR target/84986
* config/i386/i386.c (ix86_add_stmt_cost): Only cost
sign-conversions as zero, fall back to standard scalar_stmt
cost for the rest.
* gcc.dg/vect/costmodel/x86_64/costmodel-pr84986.c: New testcase.
From-SVN: r258684
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr84986.c | 14 |
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f47c192..18d727e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-03-20 Richard Biener <rguenther@suse.de> + + PR target/84986 + * config/i386/i386.c (ix86_add_stmt_cost): Only cost + sign-conversions as zero, fall back to standard scalar_stmt + cost for the rest. + 2018-03-20 Martin Liska <mliska@suse.cz> PR ipa/84825 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 5b1e962..3b26431 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -50462,7 +50462,11 @@ ix86_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind, } break; case NOP_EXPR: - stmt_cost = 0; + /* Only sign-conversions are free. */ + if (tree_nop_conversion_p + (TREE_TYPE (gimple_assign_lhs (stmt_info->stmt)), + TREE_TYPE (gimple_assign_rhs1 (stmt_info->stmt)))) + stmt_cost = 0; break; case BIT_IOR_EXPR: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6c918c0..f88a098 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-20 Richard Biener <rguenther@suse.de> + + PR target/84986 + * gcc.dg/vect/costmodel/x86_64/costmodel-pr84986.c: New testcase. + 2018-03-20 Martin Liska <mliska@suse.cz> PR ipa/84825 diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr84986.c b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr84986.c new file mode 100644 index 0000000..b6dc385 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr84986.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_long } */ + +int N; +long fn1(void) { + short i; + long a; + i = a = 0; + while (i < N) + a -= i++; + return a; +} + +/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */ |