diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2005-05-03 17:00:59 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2005-05-03 17:00:59 +0000 |
commit | 332709996543c768adef0b189c1cedea9eba6e37 (patch) | |
tree | 544562d9c21dac60178169f4a69eb7f3102090f4 | |
parent | 64fe5271963de7f68994ce99bda3a380f20b5dbe (diff) | |
download | gcc-332709996543c768adef0b189c1cedea9eba6e37.zip gcc-332709996543c768adef0b189c1cedea9eba6e37.tar.gz gcc-332709996543c768adef0b189c1cedea9eba6e37.tar.bz2 |
re PR target/16888 (ICE: in print_reg, at config/i386/i386.c:7254)
gcc/ChangeLog:
PR target/16888
* config/i386/i386.h (CONDITIONAL_REGISTER_USAGE): Clear reg names
for unavailable registers.
gcc/testsuite/ChangeLog:
PR target/16888
* gcc.target/i386/asm-1.c: New test.
From-SVN: r99167
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/asm-1.c | 9 |
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index defdebb..b768b2d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-05-03 Alexandre Oliva <aoliva@redhat.com> + + PR target/16888 + * config/i386/i386.h (CONDITIONAL_REGISTER_USAGE): Clear reg names + for unavailable registers. + 2005-05-03 Kazu Hirata <kazu@cs.umass.edu> * tree-cfg.c (tree_forwarder_block_p): Fix a typo. diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 4ad8e2e..d65ce49 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -780,14 +780,14 @@ do { \ int i; \ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \ if (TEST_HARD_REG_BIT (reg_class_contents[(int)MMX_REGS], i)) \ - fixed_regs[i] = call_used_regs[i] = 1; \ + fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = ""; \ } \ if (! TARGET_SSE) \ { \ int i; \ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \ if (TEST_HARD_REG_BIT (reg_class_contents[(int)SSE_REGS], i)) \ - fixed_regs[i] = call_used_regs[i] = 1; \ + fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = ""; \ } \ if (! TARGET_80387 && ! TARGET_FLOAT_RETURNS_IN_80387) \ { \ @@ -796,7 +796,15 @@ do { \ COPY_HARD_REG_SET (x, reg_class_contents[(int)FLOAT_REGS]); \ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \ if (TEST_HARD_REG_BIT (x, i)) \ - fixed_regs[i] = call_used_regs[i] = 1; \ + fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = ""; \ + } \ + if (! TARGET_64BIT) \ + { \ + int i; \ + for (i = FIRST_REX_INT_REG; i <= LAST_REX_INT_REG; i++) \ + reg_names[i] = ""; \ + for (i = FIRST_REX_SSE_REG; i <= LAST_REX_SSE_REG; i++) \ + reg_names[i] = ""; \ } \ } while (0) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 41fd498..53428bf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-05-03 Alexandre Oliva <aoliva@redhat.com> + + PR target/16888 + * gcc.target/i386/asm-1.c: New test. + 2005-05-03 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/21330 diff --git a/gcc/testsuite/gcc.target/i386/asm-1.c b/gcc/testsuite/gcc.target/i386/asm-1.c new file mode 100644 index 0000000..63e7af7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/asm-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-m32" } */ + +register unsigned int EAX asm ("r14"); /* { dg-error "register name" } */ + +void foo () +{ + EAX = 0; +} |