From db591c642ebe2ecba239f0389cad40d3d9b9a027 Mon Sep 17 00:00:00 2001 From: vmakarov Date: Wed, 21 Dec 2016 22:20:11 +0000 Subject: [PATCH] 2016-12-21 Vladimir Makarov PR rtl-optimization/78580 * ira-costs.c (find_costs_and_classes): Make regno_aclass translated into an allocno class. 2016-12-21 Vladimir Makarov PR rtl-optimization/78580 * gcc.target/i386/pr78580.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243875 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/ira-costs.c | 15 ++++++++++----- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr78580.c | 18 ++++++++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr78580.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e9ce90d530c..45743607cdb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-12-21 Vladimir Makarov + + PR rtl-optimization/78580 + * ira-costs.c (find_costs_and_classes): Make regno_aclass + translated into an allocno class. + 2016-12-21 Jakub Jelinek PR bootstrap/78817 diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index bdd5cb5ceb6..7b44f5ce40e 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -1846,14 +1846,19 @@ find_costs_and_classes (FILE *dump_file) short in -O0 code and so register pressure tends to be low. Avoid that by ignoring the alternative class if the best - class has plenty of registers. */ - regno_aclass[i] = best; + class has plenty of registers. + + The union class arrays give important classes and only + part of it are allocno classes. So translate them into + allocno classes. */ + regno_aclass[i] = ira_allocno_class_translate[best]; else { /* Make the common class the biggest class of best and - alt_class. */ - regno_aclass[i] - = ira_reg_class_superunion[best][alt_class]; + alt_class. Translate the common class into an + allocno class too. */ + regno_aclass[i] = (ira_allocno_class_translate + [ira_reg_class_superunion[best][alt_class]]); ira_assert (regno_aclass[i] != NO_REGS && ira_reg_allocno_class_p[regno_aclass[i]]); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2da0d44dfb7..40f671fee28 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-12-21 Vladimir Makarov + + PR rtl-optimization/78580 + * gcc.target/i386/pr78580.c: New. + 2016-12-21 Jakub Jelinek PR c++/77830 diff --git a/gcc/testsuite/gcc.target/i386/pr78580.c b/gcc/testsuite/gcc.target/i386/pr78580.c new file mode 100644 index 00000000000..fcf36f1be84 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78580.c @@ -0,0 +1,18 @@ +/* PR rtl-optimization/78580 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -ffixed-ebx" } */ + +extern const signed char a; + +int +foo (signed char x) +{ + return x; +} + +int +main () +{ + foo (a); + return 0; +} -- 2.11.4.GIT