From 57fc62cb326ab913d7eef6d0ac0cd7788edd1797 Mon Sep 17 00:00:00 2001 From: Zhenqiang Chen Date: Fri, 19 Oct 2012 09:24:39 +0000 Subject: [PATCH] re PR target/54892 (, ICE in extract_insn, at recog.c:2123) gcc/ChangeLog PR target/54892 * config/arm/arm.c (arm_expand_compare_and_swap): Use SImode to make sure the mode is correct when falling through from above cases. gcc/testsuite/ChangeLog PR target/54892 * gcc.target/arm/pr54892.c: New. From-SVN: r192609 --- gcc/ChangeLog | 6 ++++++ gcc/config/arm/arm.c | 4 ++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/arm/pr54892.c | 7 +++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/arm/pr54892.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b09aaa638a..cdba3366b00 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-10-19 Zhenqiang Chen + + PR target/54892 + * config/arm/arm.c (arm_expand_compare_and_swap): Use SImode to make + sure the mode is correct when falling through from above cases. + 2012-10-19 Bin Cheng * common.opt (flag_ira_hoist_pressure): New. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 327ef223e4e..11f793d5d77 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -25447,8 +25447,8 @@ arm_expand_compare_and_swap (rtx operands[]) case SImode: /* Force the value into a register if needed. We waited until after the zero-extension above to do this properly. */ - if (!arm_add_operand (oldval, mode)) - oldval = force_reg (mode, oldval); + if (!arm_add_operand (oldval, SImode)) + oldval = force_reg (SImode, oldval); break; case DImode: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57d4383f174..4af8265d80d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-10-19 Zhenqiang Chen + + PR target/54892 + * gcc.target/arm/pr54892.c: New. + 2012-10-19 Bin Cheng * testsuite/gcc.dg/hoist-register-pressure.c: New test. diff --git a/gcc/testsuite/gcc.target/arm/pr54892.c b/gcc/testsuite/gcc.target/arm/pr54892.c new file mode 100644 index 00000000000..a7fe1bc6676 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr54892.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ + +int set_role(unsigned char role_id, short m_role) +{ + return __sync_bool_compare_and_swap(&m_role, -1, role_id); +} + -- 2.30.2