diff options
author | Bernd Schmidt <bernds@codesourcery.com> | 2010-12-17 13:48:40 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2010-12-17 13:48:40 +0000 |
commit | 4d5d65862a2a7d54abfee98d94aa2cb536b3d9ff (patch) | |
tree | 3c8a3b8b43afe876ae2f238034721d94b4eb4a78 /gcc | |
parent | 8b432c8b8323a67de0ac1c4fce32b80a6eaef9be (diff) | |
download | gcc-4d5d65862a2a7d54abfee98d94aa2cb536b3d9ff.zip gcc-4d5d65862a2a7d54abfee98d94aa2cb536b3d9ff.tar.gz gcc-4d5d65862a2a7d54abfee98d94aa2cb536b3d9ff.tar.bz2 |
arm.c (arm_select_cc_mode): Before calling arm_select_dominance_cc_mode for AND or IOR operations...
gcc/
* config/arm/arm.c (arm_select_cc_mode): Before calling
arm_select_dominance_cc_mode for AND or IOR operations, ensure
that op is NE or EQ.
gcc/testsuite/
* gcc.c-torture/compile/20101217-1.c: New test.
From-SVN: r167981
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20101217-1.c | 36 |
4 files changed, 48 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c5e8012..8aab810 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-12-17 Bernd Schmidt <bernds@codesourcery.com> + + * config/arm/arm.c (arm_select_cc_mode): Before calling + arm_select_dominance_cc_mode for AND or IOR operations, ensure + that op is NE or EQ. + 2010-12-17 Alexander Monakov <amonakov@ispras.ru> PR middle-end/46761 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 21fc256..2bfdd9f 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -10602,12 +10602,14 @@ arm_select_cc_mode (enum rtx_code op, rtx x, rtx y) /* Alternate canonicalizations of the above. These are somewhat cleaner. */ if (GET_CODE (x) == AND + && (op == EQ || op == NE) && COMPARISON_P (XEXP (x, 0)) && COMPARISON_P (XEXP (x, 1))) return arm_select_dominance_cc_mode (XEXP (x, 0), XEXP (x, 1), DOM_CC_X_AND_Y); if (GET_CODE (x) == IOR + && (op == EQ || op == NE) && COMPARISON_P (XEXP (x, 0)) && COMPARISON_P (XEXP (x, 1))) return arm_select_dominance_cc_mode (XEXP (x, 0), XEXP (x, 1), diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 67799d0..209174b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-12-17 Bernd Schmidt <bernds@codesourcery.com> + + * gcc.c-torture/compile/20101217-1.c: New test. + 2010-12-17 Alexander Monakov <amonakov@ispras.ru> PR middle-end/46761 diff --git a/gcc/testsuite/gcc.c-torture/compile/20101217-1.c b/gcc/testsuite/gcc.c-torture/compile/20101217-1.c new file mode 100644 index 0000000..c4eef0e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20101217-1.c @@ -0,0 +1,36 @@ +/* Testcase provided by HUAWEI. */ +#include <stdio.h> +int main() +{ + int cur_k; + int cur_j=0; + int cur_i=28; + unsigned char temp_data[8]; + unsigned int Data_Size=20; + + for (cur_k=0;cur_j<7;cur_j++,cur_i++) { + if (cur_j%2==0) { + temp_data[cur_k++]=0; + } + if (cur_k==7) { + for (;cur_k>0;cur_k--) { + if (cur_k>2) { + if ((temp_data[7-cur_k]=='n' || temp_data[7-cur_k]=='N' ) && (temp_data[7-cur_k+1]=='a' || temp_data[7-cur_k+1]=='A' )) { + break; + } + } + if (cur_k==1) { + if (temp_data[7-cur_k]=='n' || temp_data[7-cur_k]=='N' ) { + break; + } + } + } + if (cur_k==7) { + } else { + if (cur_k>0) + printf("dfjk"); + } + } + } +return 0; +} |