OSDN Git Service

gcc/
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Dec 2010 13:48:40 +0000 (13:48 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Dec 2010 13:48:40 +0000 (13:48 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167981 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20101217-1.c [new file with mode: 0644]

index c5e8012..8aab810 100644 (file)
@@ -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
index 21fc256..2bfdd9f 100644 (file)
@@ -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),
index 67799d0..209174b 100644 (file)
@@ -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 (file)
index 0000000..c4eef0e
--- /dev/null
@@ -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;
+}