aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.c
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2013-11-06 20:37:12 +0100
committerUros Bizjak <uros@gcc.gnu.org>2013-11-06 20:37:12 +0100
commit992147ee6bc698a938feb38546ca25ce8b977651 (patch)
treecf340a333dfb0fe4b2d672ec9e1a479acf1c29e6 /gcc/config/i386/i386.c
parentb6e168f33a07cd23b7e760bab8e22aa0b907e8aa (diff)
downloadgcc-992147ee6bc698a938feb38546ca25ce8b977651.zip
gcc-992147ee6bc698a938feb38546ca25ce8b977651.tar.gz
gcc-992147ee6bc698a938feb38546ca25ce8b977651.tar.bz2
re PR target/59021 (new vzeroupper instructions generated with -mavx)
PR target/59021 * config/i386/i386.c (ix86_avx_u128_mode_needed): Require AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers. (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn RTXes that return in AVX256 register. testsuite/ChangeLog: PR target/59021 * gcc.target/i386/pr59021.c: New test. From-SVN: r204464
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r--gcc/config/i386/i386.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 0680dea..53e04c4 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -15708,7 +15708,7 @@ ix86_avx_u128_mode_needed (rtx insn)
rtx arg = XEXP (XEXP (link, 0), 0);
if (ix86_check_avx256_register (&arg, NULL))
- return AVX_U128_ANY;
+ return AVX_U128_DIRTY;
}
}
@@ -15828,8 +15828,8 @@ ix86_avx_u128_mode_after (int mode, rtx insn)
{
bool avx_reg256_found = false;
note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
- if (!avx_reg256_found)
- return AVX_U128_CLEAN;
+
+ return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
}
/* Otherwise, return current mode. Remember that if insn