diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2017-08-16 17:25:34 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2017-08-16 17:25:34 +0200 |
commit | adb5b54b28383885b4a34b95698cc302af8e0415 (patch) | |
tree | e2cb0848b3fc9721bc5224842d52079c1e140819 /gcc/testsuite/gcc.target | |
parent | 90d43c80aabfbea574ee0435b746f423a62bf3a6 (diff) | |
download | gcc-adb5b54b28383885b4a34b95698cc302af8e0415.zip gcc-adb5b54b28383885b4a34b95698cc302af8e0415.tar.gz gcc-adb5b54b28383885b4a34b95698cc302af8e0415.tar.bz2 |
re PR target/46091 (missed optimization: x86 bt/btc/bts instructions)
PR target/46091
* config/i386/i386.md (*anddi_1_btr): Change predicates of
operand 0 and operand 1 to nomimmediate_operand. Add "m" constraint.
Add ix86_binary_operator_ok to insn constraint.
(*iordi_1_bts): Ditto.
(*xordi_1_btc): Ditto.
(*btsq): Change predicate of operand 0 to nonimmediate_operand.
Update corresponding peephole2 pattern.
(*btrq): Ditto.
(*btcq): Ditto.
testsuite/ChangeLog:
PR target/46091
* gcc.target/i386/pr46091-1.c: Update scan-assembler-times.
(testm): New test function.
* gcc.target/i386/pr46091-2.c: Ditto.
* gcc.target/i386/pr46091-3.c: Ditto.
From-SVN: r251124
Diffstat (limited to 'gcc/testsuite/gcc.target')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr46091-1.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr46091-2.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr46091-3.c | 9 |
3 files changed, 24 insertions, 3 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr46091-1.c b/gcc/testsuite/gcc.target/i386/pr46091-1.c index adca01f..74685af 100644 --- a/gcc/testsuite/gcc.target/i386/pr46091-1.c +++ b/gcc/testsuite/gcc.target/i386/pr46091-1.c @@ -6,4 +6,11 @@ unsigned long long test (unsigned long long a) return a & ~(1ull << 55); } -/* { dg-final { scan-assembler "btr" } } */ +extern unsigned long long m; + +void testm (void) +{ + m &= ~(1ull << 45); +} + +/* { dg-final { scan-assembler-times "btr" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr46091-2.c b/gcc/testsuite/gcc.target/i386/pr46091-2.c index 1743753..5b34045 100644 --- a/gcc/testsuite/gcc.target/i386/pr46091-2.c +++ b/gcc/testsuite/gcc.target/i386/pr46091-2.c @@ -6,4 +6,11 @@ unsigned long long test (unsigned long long a) return a | (1ull << 55); } -/* { dg-final { scan-assembler "bts" } } */ +extern unsigned long long m; + +void testm (void) +{ + m |= (1ull << 45); +} + +/* { dg-final { scan-assembler-times "bts" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr46091-3.c b/gcc/testsuite/gcc.target/i386/pr46091-3.c index c8091e9..3c601a3 100644 --- a/gcc/testsuite/gcc.target/i386/pr46091-3.c +++ b/gcc/testsuite/gcc.target/i386/pr46091-3.c @@ -6,4 +6,11 @@ unsigned long long test (unsigned long long a) return a ^ (1ull << 55); } -/* { dg-final { scan-assembler "btc" } } */ +extern unsigned long long m; + +void testm (void) +{ + m ^= (1ull << 45); +} + +/* { dg-final { scan-assembler-times "btc" 2 } } */ |