diff options
author | Vladimir N. Makarov <vmakarov@redhat.com> | 2020-01-31 14:26:26 -0500 |
---|---|---|
committer | Vladimir N. Makarov <vmakarov@redhat.com> | 2020-01-31 15:00:38 -0500 |
commit | 2a07345c4f8dabc286fc470e76c53473e5bc3eb7 (patch) | |
tree | 4c4a47ca0f55f137d59f30fc7d5db64da50576b8 /gcc | |
parent | f1c807e887d43551bca0acc16a438d880cfaf7c9 (diff) | |
download | gcc-2a07345c4f8dabc286fc470e76c53473e5bc3eb7.zip gcc-2a07345c4f8dabc286fc470e76c53473e5bc3eb7.tar.gz gcc-2a07345c4f8dabc286fc470e76c53473e5bc3eb7.tar.bz2 |
Fix for PR 91333 - suboptimal register allocation for inline asm
2020-01-31 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/91333
* ira-color.c (bucket_allocno_compare_func): Move conflict hard
reg preferences comparison up.
2020-01-31 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/91333
* gcc.target/i386/pr91333.c: New.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ira-color.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr91333.c | 14 |
4 files changed, 30 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 234e328..e4a3efd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-01-31 Vladimir Makarov <vmakarov@redhat.com> + + PR rtl-optimization/91333 + * ira-color.c (bucket_allocno_compare_func): Move conflict hard + reg preferences comparison up. + 2020-01-31 Richard Sandiford <richard.sandiford@arm.com> * config/aarch64/aarch64.h (TARGET_SVE_BF16): New macro. diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 4a726dc..51c4afd 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -2251,6 +2251,11 @@ bucket_allocno_compare_func (const void *v1p, const void *v2p) ira_allocno_t t2 = ALLOCNO_COLOR_DATA (a2)->first_thread_allocno; int cl1 = ALLOCNO_CLASS (a1), cl2 = ALLOCNO_CLASS (a2); + /* Push allocnos with minimal conflict_allocno_hard_prefs first. */ + pref1 = ALLOCNO_COLOR_DATA (a1)->conflict_allocno_hard_prefs; + pref2 = ALLOCNO_COLOR_DATA (a2)->conflict_allocno_hard_prefs; + if ((diff = pref1 - pref2) != 0) + return diff; freq1 = ALLOCNO_COLOR_DATA (t1)->thread_freq; freq2 = ALLOCNO_COLOR_DATA (t2)->thread_freq; if ((diff = freq1 - freq2) != 0) @@ -2276,11 +2281,6 @@ bucket_allocno_compare_func (const void *v1p, const void *v2p) a2_num = ALLOCNO_COLOR_DATA (a2)->available_regs_num; if ((diff = a2_num - a1_num) != 0) return diff; - /* Push allocnos with minimal conflict_allocno_hard_prefs first. */ - pref1 = ALLOCNO_COLOR_DATA (a1)->conflict_allocno_hard_prefs; - pref2 = ALLOCNO_COLOR_DATA (a2)->conflict_allocno_hard_prefs; - if ((diff = pref1 - pref2) != 0) - return diff; return ALLOCNO_NUM (a2) - ALLOCNO_NUM (a1); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cce52ea..556e5fb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-01-31 Vladimir Makarov <vmakarov@redhat.com> + + PR rtl-optimization/91333 + * gcc.target/i386/pr91333.c: New. + 2020-01-31 David Malcolm <dmalcolm@redhat.com> PR analyzer/93379 diff --git a/gcc/testsuite/gcc.target/i386/pr91333.c b/gcc/testsuite/gcc.target/i386/pr91333.c new file mode 100644 index 0000000..41fc328 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr91333.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target x86_64-*-* } } */ +/* { dg-options "-O2 -mavx" } */ +/* { dg-final { scan-assembler-times "vmovapd" 2 } } */ + +static inline double g (double x){ + asm volatile ("" : "+x" (x)); + return x; +} +static inline double f (double a, double b){ + return g (g (a) + g (b)); +} +double h (double a, double b){ + return f (f (a, a), f (b, b)); +} |