OSDN Git Service

PR target/39226
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Apr 2009 16:18:46 +0000 (16:18 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Apr 2009 16:18:46 +0000 (16:18 +0000)
* config/rs6000/rs6000.md (andsi3_internal5_nomc,
anddi3_internal2_nomc, anddi3_internal3_nomc): Removed.
(booldi3_internal3): Use boolean_or_operator instead of
boolean_operator.

* gcc.dg/pr39226.c: New test.

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

gcc/ChangeLog
gcc/config/rs6000/rs6000.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr39226.c [new file with mode: 0644]

index 1eebf64..1f26fe7 100644 (file)
@@ -1,3 +1,11 @@
+2009-04-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/39226
+       * config/rs6000/rs6000.md (andsi3_internal5_nomc,
+       anddi3_internal2_nomc, anddi3_internal3_nomc): Removed.
+       (booldi3_internal3): Use boolean_or_operator instead of
+       boolean_operator.
+
 2009-04-01  Joseph Myers  <joseph@codesourcery.com>
 
        PR c/39605
index 88322fd..c2f05e5 100644 (file)
   [(set_attr "type" "compare,compare,compare,delayed_compare,compare,compare,compare,compare")
    (set_attr "length" "8,4,4,4,8,8,8,8")])
 
-(define_insn "*andsi3_internal5_nomc"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y,??y,??y,?y")
-        (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
-                            (match_operand:SI 2 "and_operand" "r,r,K,L,T"))
-                    (const_int 0)))
-   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
-        (and:SI (match_dup 1)
-                (match_dup 2)))
-   (clobber (match_scratch:CC 4 "=X,X,x,x,X"))]
-  "TARGET_64BIT && !rs6000_gen_cell_microcode"
-  "#"
-  [(set_attr "type" "compare")
-   (set_attr "length" "8,8,8,8,8")])
-
 (define_split
   [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
        (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
   [(set_attr "type" "compare,compare,delayed_compare,compare,compare,compare,compare,compare,compare,compare,compare,compare")
    (set_attr "length" "4,4,4,4,4,8,8,8,8,8,8,12")])
 
-(define_insn "*anddi3_internal2_nomc"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y,?y,??y,??y,?y")
-       (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r,r,r")
-                           (match_operand:DI 2 "and64_2_operand" "t,r,S,K,J,t"))
-                   (const_int 0)))
-   (clobber (match_scratch:DI 3 "=r,r,r,r,r,r"))
-   (clobber (match_scratch:CC 4 "=X,X,X,x,x,X"))]
-  "TARGET_64BIT && !rs6000_gen_cell_microcode"
-  "#"
-  [(set_attr "type" "delayed_compare,compare,compare,compare,compare,compare")
-   (set_attr "length" "8,8,8,8,8,12")])
-
 (define_split
   [(set (match_operand:CC 0 "cc_reg_operand" "")
         (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "")
   [(set_attr "type" "compare,compare,delayed_compare,compare,compare,compare,compare,compare,compare,compare,compare,compare")
    (set_attr "length" "4,4,4,4,4,8,8,8,8,8,8,12")])
 
-(define_insn "*anddi3_internal3_nomc"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y,?y,??y,??y,?y")
-       (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r,r,r")
-                           (match_operand:DI 2 "and64_2_operand" "t,r,S,K,J,t"))
-                   (const_int 0)))
-   (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r,r")
-       (and:DI (match_dup 1) (match_dup 2)))
-   (clobber (match_scratch:CC 4 "=X,X,X,x,x,X"))]
-  "TARGET_64BIT  && !rs6000_gen_cell_microcode"
-  "#"
-  [(set_attr "type" "delayed_compare,compare,compare,compare,compare,compare")
-   (set_attr "length" "8,8,8,8,8,12")])
 (define_split
   [(set (match_operand:CC 3 "cc_reg_not_micro_cr0_operand" "")
        (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "")
 
 (define_insn "*booldi3_internal3"
   [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
-       (compare:CC (match_operator:DI 4 "boolean_operator"
+       (compare:CC (match_operator:DI 4 "boolean_or_operator"
         [(match_operand:DI 1 "gpc_reg_operand" "%r,r")
          (match_operand:DI 2 "gpc_reg_operand" "r,r")])
         (const_int 0)))
index 7cd559f..2d10907 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/39226
+       * gcc.dg/pr39226.c: New test.
+
 2009-04-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR c++/35240
diff --git a/gcc/testsuite/gcc.dg/pr39226.c b/gcc/testsuite/gcc.dg/pr39226.c
new file mode 100644 (file)
index 0000000..1442ccc
--- /dev/null
@@ -0,0 +1,25 @@
+/* PR target/39226 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-options "-O2 -mtune=cell -mminimal-toc" { target { powerpc*-*-* && lp64 } } } */
+
+struct A
+{
+  char *a;
+  unsigned int b : 1;
+  unsigned int c : 31;
+};
+
+struct B
+{
+  struct A *d;
+};
+
+void
+foo (struct B *x, unsigned long y)
+{
+  if (x->d[y].c)
+    return;
+  if (x->d[y].b)
+    x->d[y].a = 0;
+}