This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add un-distribution capabilities to tree reassoc (3rd try)



         lhs = gimple_assign_lhs (stmt);
         rhs1 = gimple_assign_rhs1 (stmt);
--- 1760,1775 ----
         /* If this was part of an already processed statement,
            we don't need to touch it again. */
         if (gimple_visited_p (stmt))
!           {
!             /* This statement might have become dead because of previous
!                reassociations.  */
!             if (has_zero_uses (gimple_get_lhs (stmt)))
!               {
!                 gsi_remove (&gsi, true);
!                 release_defs (stmt);

There seem to be a minor problem -- there needs to be an gsi_end_p check and break after the removal.


Thanks,

David


!               }
!             continue;
!           }

         lhs = gimple_assign_lhs (stmt);
         rhs1 = gimple_assign_rhs1 (stmt);
*************** reassociate_bb (basic_block bb)
*** 1375,1386 ****
               continue;

             gimple_set_visited (stmt, true);
!             linearize_expr_tree (&ops, stmt);
             qsort (VEC_address (operand_entry_t, ops),
                    VEC_length (operand_entry_t, ops),
                    sizeof (operand_entry_t),
                    sort_by_operand_rank);
             optimize_ops_list (rhs_code, &ops);

             if (VEC_length (operand_entry_t, ops) == 1)
               {
--- 1800,1820 ----
               continue;

             gimple_set_visited (stmt, true);
!             linearize_expr_tree (&ops, stmt, true);
             qsort (VEC_address (operand_entry_t, ops),
                    VEC_length (operand_entry_t, ops),
                    sizeof (operand_entry_t),
                    sort_by_operand_rank);
             optimize_ops_list (rhs_code, &ops);
+             if (undistribute_ops_list (rhs_code, &ops,
+                                        loop_containing_stmt (stmt)))
+               {
+                 qsort (VEC_address (operand_entry_t, ops),
+                        VEC_length (operand_entry_t, ops),
+                        sizeof (operand_entry_t),
+                        sort_by_operand_rank);
+                 optimize_ops_list (rhs_code, &ops);
+               }

             if (VEC_length (operand_entry_t, ops) == 1)
               {
Index: gcc/testsuite/gcc.dg/tree-ssa/reassoc-14.c
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gcc.dg/tree-ssa/reassoc-14.c  2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-reassoc1" } */
+
+ int test1 (int x, int y, int z, int weight)
+ {
+   int tmp1 = x * weight;
+   int tmp2 = y * weight;
+   int tmp3 = (x - y) * weight;
+   return tmp1 + (tmp2 + tmp3);
+ }
+
+ int test2 (int x, int y, int z, int weight)
+ {
+   int tmp1 = x * weight;
+   int tmp2 = y * weight * weight;
+   int tmp3 = z * weight * weight * weight;
+   return tmp1 + tmp2 + tmp3;
+ }
+
+ /* There should be one multiplication left in test1 and three in test2.  */
+
+ /* { dg-final { scan-tree-dump-times "\\\*" 4 "reassoc1" } } */
+ /* { dg-final { cleanup-tree-dump "reassoc1" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/reassoc-15.c
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gcc.dg/tree-ssa/reassoc-15.c  2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-reassoc1" } */
+
+ int test3 (int x, int y, int z, int weight, int w1, int w2, int w3)
+ {
+   int wtmp1 = w1 * weight;
+   int wtmp2 = w2 * weight;
+   int wtmp3 = w3 * weight;
+   int tmp1 = x * wtmp1;
+   int tmp2 = y * wtmp2;
+   int tmp3 = z * wtmp3;
+   return tmp1 + tmp2 + tmp3;
+ }
+
+ /* The multiplication with weight should be un-distributed.
+    ???  This pattern is not recognized currently.  */
+
+ /* { dg-final { scan-tree-dump-times "\\\*" 4 "reassoc1" } } */
+ /* { dg-final { cleanup-tree-dump "reassoc1" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/reassoc-16.c
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gcc.dg/tree-ssa/reassoc-16.c  2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */
+
+ double test1 (double x, double y, double z, double weight)
+ {
+   double tmp1 = x / weight;
+   double tmp2 = y / weight;
+   double tmp3 = -x / weight;
+   return tmp1 + tmp2 + tmp3;
+ }
+
+ /* The division should be un-distributed and all references to x should
+    be gone.  */
+
+ /* { dg-final { scan-tree-dump-times "/" 1 "reassoc1" } } */
+ /* { dg-final { cleanup-tree-dump "reassoc1" } } */
Index: gcc/testsuite/gcc.dg/torture/reassoc-1.c
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gcc.dg/torture/reassoc-1.c    2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+
+ int x;
+
+ int __attribute__((noinline))
+ foo(int a, int b, int w)
+ {
+   int tmp1 = a * w;
+   int tmp2 = b * w;
+   x = tmp1;
+   return tmp1 + tmp2;
+ }
+
+ extern void abort (void);
+
+ int main()
+ {
+   if (foo(1, 2, 3) != 9)
+     abort ();
+   if (x != 3)
+     abort ();
+   return 0;
+ }
+
Index: gcc/testsuite/gcc.dg/tree-ssa/recip-2.c
===================================================================
*** gcc/testsuite/gcc.dg/tree-ssa/recip-2.c.orig        2008-08-07 11:20:19.000000000 +0200
--- gcc/testsuite/gcc.dg/tree-ssa/recip-2.c     2008-08-07 11:27:42.000000000 +0200
***************
*** 1,7 ****
 /* { dg-do compile } */
 /* { dg-options "-O1 -funsafe-math-optimizations -fdump-tree-recip" } */

! float e(float a, float b, float c, float d, float e, float f)
 {
   if (a < b)
     {
--- 1,9 ----
 /* { dg-do compile } */
 /* { dg-options "-O1 -funsafe-math-optimizations -fdump-tree-recip" } */

! float u, v, w, x, y, z;
!
! void e(float a, float b, float c, float d, float e, float f)
 {
   if (a < b)
     {
*************** float e(float a, float b, float c, float
*** 20,26 ****
   /* This should not be left as a multiplication.  */
   c = 1 / c;

!   return a + b + c + d + e + f;
 }

 /* { dg-final { scan-tree-dump-times " / " 2 "recip" } } */
--- 22,33 ----
   /* This should not be left as a multiplication.  */
   c = 1 / c;

!   u = a;
!   v = b;
!   w = c;
!   x = d;
!   y = e;
!   z = f;
 }

 /* { dg-final { scan-tree-dump-times " / " 2 "recip" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/recip-6.c
===================================================================
*** gcc/testsuite/gcc.dg/tree-ssa/recip-6.c.orig        2008-08-07 11:20:19.000000000 +0200
--- gcc/testsuite/gcc.dg/tree-ssa/recip-6.c     2008-08-07 11:27:42.000000000 +0200
***************
*** 5,11 ****

extern int f2();

! double f1(double y, double z, double w)
 {
   double b, c, d, e, f;

--- 5,13 ----

extern int f2();

! double m, n, o;
!
! void f1(double y, double z, double w)
 {
   double b, c, d, e, f;

*************** double f1(double y, double z, double w)
*** 18,24 ****
   e = c / y;
   f = 1 / y;

!   return d + e + f;
 }

 /* { dg-final { scan-tree-dump-times " / " 1 "recip" } } */
--- 20,28 ----
   e = c / y;
   f = 1 / y;

!   m = d;
!   n = e;
!   o = f;
 }

 /* { dg-final { scan-tree-dump-times " / " 1 "recip" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/recip-7.c
===================================================================
*** gcc/testsuite/gcc.dg/tree-ssa/recip-7.c.orig        2008-08-07 11:20:19.000000000 +0200
--- gcc/testsuite/gcc.dg/tree-ssa/recip-7.c     2008-08-07 11:27:42.000000000 +0200
***************
*** 5,11 ****

extern double h();

! double f(int x, double z, double w)
 {
   double b, c, d, e, f;
   double y = h ();
--- 5,13 ----

extern double h();

! double m, n, o;
!
! void f(int x, double z, double w)
 {
   double b, c, d, e, f;
   double y = h ();
*************** double f(int x, double z, double w)
*** 19,25 ****
   e = c / y;
   f = 1 / y;

!   return d + e + f;
 }

 /* { dg-final { scan-tree-dump-times " / " 1 "recip" } } */
--- 21,29 ----
   e = c / y;
   f = 1 / y;

!   m = d;
!   n = e;
!   o = f;
 }

 /* { dg-final { scan-tree-dump-times " / " 1 "recip" } } */
Index: gcc/passes.c
===================================================================
*** gcc/passes.c.orig   2008-08-07 11:21:29.000000000 +0200
--- gcc/passes.c        2008-08-07 11:27:42.000000000 +0200
*************** init_optimization_passes (void)
*** 633,641 ****
        only examines PHIs to discover const/copy propagation
        opportunities.  */
       NEXT_PASS (pass_phi_only_cprop);
       NEXT_PASS (pass_reassoc);
       NEXT_PASS (pass_dce);
-       NEXT_PASS (pass_dse);
       NEXT_PASS (pass_forwprop);
       NEXT_PASS (pass_phiopt);
       NEXT_PASS (pass_object_sizes);
--- 633,641 ----
        only examines PHIs to discover const/copy propagation
        opportunities.  */
       NEXT_PASS (pass_phi_only_cprop);
+       NEXT_PASS (pass_dse);
       NEXT_PASS (pass_reassoc);
       NEXT_PASS (pass_dce);
       NEXT_PASS (pass_forwprop);
       NEXT_PASS (pass_phiopt);
       NEXT_PASS (pass_object_sizes);
Index: gcc/testsuite/gfortran.dg/reassoc_4.f
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gfortran.dg/reassoc_4.f       2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,43 ----
+ ! { dg-do compile }
+ ! { dg-options "-O3 -ffast-math -fdump-tree-reassoc1" }
+       subroutine anisonl(w,vo,anisox,s,ii1,jj1,weight)
+       integer ii1,jj1,i1,iii1,j1,jjj1,k1,l1,m1,n1
+       real*8 w(3,3),vo(3,3),anisox(3,3,3,3),s(60,60),weight
+ !
+ !     This routine replaces the following lines in e_c3d.f for
+ !     an anisotropic material
+ !
+                       do i1=1,3
+                         iii1=ii1+i1-1
+                         do j1=1,3
+                           jjj1=jj1+j1-1
+                           do k1=1,3
+                             do l1=1,3
+                               s(iii1,jjj1)=s(iii1,jjj1)
+      &                          +anisox(i1,k1,j1,l1)*w(k1,l1)*weight
+                               do m1=1,3
+                                 s(iii1,jjj1)=s(iii1,jjj1)
+      &                              +anisox(i1,k1,m1,l1)*w(k1,l1)
+      &                                 *vo(j1,m1)*weight
+      &                              +anisox(m1,k1,j1,l1)*w(k1,l1)
+      &                                 *vo(i1,m1)*weight
+                                 do n1=1,3
+                                   s(iii1,jjj1)=s(iii1,jjj1)
+      &                              +anisox(m1,k1,n1,l1)
+      &                              *w(k1,l1)*vo(i1,m1)*vo(j1,n1)*weight
+                                 enddo
+                               enddo
+                             enddo
+                           enddo
+                         enddo
+                       enddo
+
+       return
+       end
+
+ ! There should be 22 multiplications left after un-distributing
+ ! weigth, w(k1,l1), vo(i1,m1) and vo(j1,m1) on the innermost two
+ ! unrolled loops.
+
+ ! { dg-final { scan-tree-dump-times "\[0-9\] \\\* " 22 "reassoc1" } }
+ ! { dg-final { cleanup-tree-dump "reassoc1" } }
Index: gcc/testsuite/gcc.dg/tree-ssa/reassoc-17.c
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gcc.dg/tree-ssa/reassoc-17.c  2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */
+
+ double test2 (double x, double y, double ddj, int b)
+ {
+   double tmp1, tmp2, sum;
+   sum = 0.0;
+   if (b)
+     sum = 1.0;
+   tmp1 = sum/ddj;
+   tmp2 = x/ddj;
+   return tmp1 + y + tmp2;
+ }
+
+ /* { dg-final { scan-tree-dump-times "/" 1 "reassoc1" } } */
+ /* { dg-final { cleanup-tree-dump "reassoc1" } } */
Index: gcc/tree-ssa-loop-niter.c
===================================================================
*** gcc/tree-ssa-loop-niter.c.orig      2008-08-07 11:20:19.000000000 +0200
--- gcc/tree-ssa-loop-niter.c   2008-08-07 11:27:42.000000000 +0200
*************** stmt_dominates_stmt_p (gimple s1, gimple
*** 2918,2923 ****
--- 2918,2929 ----
     {
       gimple_stmt_iterator bsi;

+       if (gimple_code (s2) == GIMPLE_PHI)
+       return false;
+
+       if (gimple_code (s1) == GIMPLE_PHI)
+       return true;
+
       for (bsi = gsi_start_bb (bb1); gsi_stmt (bsi) != s2; gsi_next (&bsi))
       if (gsi_stmt (bsi) == s1)
         return true;
Index: gcc/testsuite/gcc.dg/tree-ssa/reassoc-18.c
===================================================================
*** /dev/null   1970-01-01 00:00:00.000000000 +0000
--- gcc/testsuite/gcc.dg/tree-ssa/reassoc-18.c  2008-08-07 11:27:42.000000000 +0200
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -fdump-tree-reassoc1" } */
+
+ int
+ ETree_nFactorEntriesInFront (int b, int m)
+ {
+   int nent = b*b + 2*b*m;
+   return nent;
+ }
+
+ /* { dg-final { scan-tree-dump-times "\\\*" 2 "reassoc1" } } */
+ /* { dg-final { cleanup-tree-dump "reassoc1" } } */


------------------------------------------------------------------------


Subject:
Re: [C++ PATCH] Fix decltype for calls to function pointers, references
From:
Mark Mitchell <mark@codesourcery.com>
Date:
Thu, 07 Aug 2008 07:23:03 -0700
To:
Paolo Bonzini <bonzini@gnu.org>

To:
Paolo Bonzini <bonzini@gnu.org>
CC:
Doug Gregor <doug.gregor@gmail.com>, Gcc Patch List <gcc-patches@gcc.gnu.org>



Paolo Bonzini wrote:

I'm guessing you mean okay for mainline, but not 4.3? This isn't a
regression; it's a bug-fix for a new C++0x feature.

What is the risk that we get complaints when 4.4 is out from people that were using the buggy feature and expecting the wrong result?

Sure, that could happen.


But, the same thing applies when backporting to 4.3; people using 4.3.1 will be surprised if 4.3.2 breaks their application, and, in fact, more surprised than if they go to a new major release. Sadly, people have been well-trained that going from X.Y to X.Y+N will force them to change their code.

We have the regression-only rule for a good reason: it means we don't have to have a discussion about whether to backport every patch and we err on the side of making X.Y.Z->X.Y.Z + N transitions preserve the workingness of programs. Arguably, having that discussion for more patches might improve releases, but certainly at the cost of time spent elsewhere. That's why we have a bright-line rule.

In general, everyone thinks their patch important, and everyone thinks their patch safe...


------------------------------------------------------------------------


Subject:
Re: [C++ PATCH] Fix decltype for calls to function pointers, references
From:
Paolo Bonzini <bonzini@gnu.org>
Date:
Thu, 07 Aug 2008 16:45:31 +0200
To:
Mark Mitchell <mark@codesourcery.com>

To:
Mark Mitchell <mark@codesourcery.com>
CC:
Doug Gregor <doug.gregor@gmail.com>, Gcc Patch List <gcc-patches@gcc.gnu.org>




But, the same thing applies when backporting to 4.3; people using 4.3.1 will be surprised if 4.3.2 breaks their application, and, in fact, more surprised than if they go to a new major release.

Yes, though there is a difference being 6 or more months of monkeys typing wrong code. :-) That's the main reason why I asked.


In general, everyone thinks their patch important, and everyone thinks their patch safe...

It's not my patch! :-)


I don't know even if people would understand that 4.3 has a bug, or they could happily go on and use the wrong result. Understanding that is another reason why I asked.

Thanks,

Paolo

------------------------------------------------------------------------

Subject:
Re: [C++ PATCH] Fix decltype for calls to function pointers, references
From:
Mark Mitchell <mark@codesourcery.com>
Date:
Thu, 07 Aug 2008 08:33:52 -0700
To:
Paolo Bonzini <bonzini@gnu.org>

To:
Paolo Bonzini <bonzini@gnu.org>
CC:
Doug Gregor <doug.gregor@gmail.com>, Gcc Patch List <gcc-patches@gcc.gnu.org>



Paolo Bonzini wrote:


In general, everyone thinks their patch important, and everyone thinks their patch safe...

It's not my patch! :-)

I know. Sorry, I was trying to make the general point.


My feeling here is that the things worth fixing in point releases are regressions (which make us look bad relative to previous releases), and things that have really widespread impact, like, for example, a miscompilation of the Linux kernel. I think it's overkill to try to look at every patch and decide whether it's safe enough and valuable enough to backport. In this case, we're talking about a C++0x feature, which means it's used by a very small fraction of our userbase at this point, so it certainly doesn't seem worth it to me.

I'm not saying it would be harmful, but I want to avoid having this conversation every time. Once we open the door, everyone will try to get through it, and it's too much work for not enough benefit.


------------------------------------------------------------------------


Subject:
Re: [patch-rfc] N2179: Exception Propagation in C++
From:
Paolo Carlini <paolo.carlini@oracle.com>
Date:
Thu, 7 Aug 2008 09:33:01 -0500 (CDT)
To:
Paolo Carlini <paolo.carlini@oracle.com>, sebastian.redl@getdesigned.at

To:
Paolo Carlini <paolo.carlini@oracle.com>, sebastian.redl@getdesigned.at
CC:
gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org


Hi again,


Can you please send over the ChangeLog entry? It will facilitates
the final review, then we can commit very soon.
I'm trying again with a different email address which I found
in the GCC archive, got returned email from mail.windmuehlgasse...

Apparently this address worked, no bounced messages so far...


In the meanwhile, I checked with FSF and the work is cleared to be accepted, given the status of the paperwork. Thus, please provide a ChangeLog entry, regtest again the patch, submit it in the final form... Thanks!

Paolo.


------------------------------------------------------------------------


Subject:
Fix i386 bootstrap problem
From:
Jan Hubicka <jh@suse.cz>
Date:
Thu, 7 Aug 2008 16:54:57 +0200
To:
gcc-patches@gcc.gnu.org

To:
gcc-patches@gcc.gnu.org


Hi, my patch for optimize_insn_for_size_p predicates probably broke i386 bootstrap on any mdern system (our testing setup still use glibc with stringop inlines that masked the issue).

I've bootstrapped the following and will commit it in minute.

Honza

Index: ChangeLog
===================================================================
*** ChangeLog (revision 138840)
--- ChangeLog (working copy)
***************
*** 1,3 ****
--- 1,8 ----
+ 2008-08-07 Jan Hubicka <jh@suse.cz>
+ + PR target/37048
+ * i386.md (single stringop patterns): Enable unconditionally. + 2008-08-07 H.J. Lu <hongjiu.lu@intel.com>
PR target/36992
Index: config/i386/i386.md
===================================================================
*** config/i386/i386.md (revision 138840)
--- config/i386/i386.md (working copy)
***************
*** 18652,18658 ****
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 8)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movsq"
[(set_attr "type" "str")
(set_attr "mode" "DI")
--- 18652,18658 ----
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 8)))]
! "TARGET_64BIT"
"movsq"
[(set_attr "type" "str")
(set_attr "mode" "DI")
***************
*** 18667,18673 ****
(set (match_operand:SI 1 "register_operand" "=S")
(plus:SI (match_dup 3)
(const_int 4)))]
! "!TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movs{l|d}"
[(set_attr "type" "str")
(set_attr "mode" "SI")
--- 18667,18673 ----
(set (match_operand:SI 1 "register_operand" "=S")
(plus:SI (match_dup 3)
(const_int 4)))]
! "!TARGET_64BIT"
"movs{l|d}"
[(set_attr "type" "str")
(set_attr "mode" "SI")
***************
*** 18682,18688 ****
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 4)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movs{l|d}"
[(set_attr "type" "str")
(set_attr "mode" "SI")
--- 18682,18688 ----
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 4)))]
! "TARGET_64BIT"
"movs{l|d}"
[(set_attr "type" "str")
(set_attr "mode" "SI")
***************
*** 18697,18703 ****
(set (match_operand:SI 1 "register_operand" "=S")
(plus:SI (match_dup 3)
(const_int 2)))]
! "!TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movsw"
[(set_attr "type" "str")
(set_attr "memory" "both")
--- 18697,18703 ----
(set (match_operand:SI 1 "register_operand" "=S")
(plus:SI (match_dup 3)
(const_int 2)))]
! "!TARGET_64BIT"
"movsw"
[(set_attr "type" "str")
(set_attr "memory" "both")
***************
*** 18712,18718 ****
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 2)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movsw"
[(set_attr "type" "str")
(set_attr "memory" "both")
--- 18712,18718 ----
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 2)))]
! "TARGET_64BIT"
"movsw"
[(set_attr "type" "str")
(set_attr "memory" "both")
***************
*** 18727,18733 ****
(set (match_operand:SI 1 "register_operand" "=S")
(plus:SI (match_dup 3)
(const_int 1)))]
! "!TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movsb"
[(set_attr "type" "str")
(set_attr "memory" "both")
--- 18727,18733 ----
(set (match_operand:SI 1 "register_operand" "=S")
(plus:SI (match_dup 3)
(const_int 1)))]
! "!TARGET_64BIT"
"movsb"
[(set_attr "type" "str")
(set_attr "memory" "both")
***************
*** 18742,18748 ****
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 1)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"movsb"
[(set_attr "type" "str")
(set_attr "memory" "both")
--- 18742,18748 ----
(set (match_operand:DI 1 "register_operand" "=S")
(plus:DI (match_dup 3)
(const_int 1)))]
! "TARGET_64BIT"
"movsb"
[(set_attr "type" "str")
(set_attr "memory" "both")
***************
*** 18917,18923 ****
(match_operand 2 "register_operand" ""))
(set (match_operand 0 "register_operand" "")
(match_operand 3 "" ""))])]
! "TARGET_SINGLE_STRINGOP"
"ix86_current_function_needs_cld = 1;")
(define_insn "*strsetdi_rex_1"
--- 18917,18923 ----
(match_operand 2 "register_operand" ""))
(set (match_operand 0 "register_operand" "")
(match_operand 3 "" ""))])]
! ""
"ix86_current_function_needs_cld = 1;")
(define_insn "*strsetdi_rex_1"
***************
*** 18926,18932 ****
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 8)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stosq"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18926,18932 ----
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 8)))]
! "TARGET_64BIT"
"stosq"
[(set_attr "type" "str")
(set_attr "memory" "store")
***************
*** 18938,18944 ****
(set (match_operand:SI 0 "register_operand" "=D")
(plus:SI (match_dup 1)
(const_int 4)))]
! "!TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stos{l|d}"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18938,18944 ----
(set (match_operand:SI 0 "register_operand" "=D")
(plus:SI (match_dup 1)
(const_int 4)))]
! "!TARGET_64BIT"
"stos{l|d}"
[(set_attr "type" "str")
(set_attr "memory" "store")
***************
*** 18950,18956 ****
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 4)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stos{l|d}"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18950,18956 ----
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 4)))]
! "TARGET_64BIT"
"stos{l|d}"
[(set_attr "type" "str")
(set_attr "memory" "store")
***************
*** 18962,18968 ****
(set (match_operand:SI 0 "register_operand" "=D")
(plus:SI (match_dup 1)
(const_int 2)))]
! "!TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stosw"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18962,18968 ----
(set (match_operand:SI 0 "register_operand" "=D")
(plus:SI (match_dup 1)
(const_int 2)))]
! "!TARGET_64BIT"
"stosw"
[(set_attr "type" "str")
(set_attr "memory" "store")
***************
*** 18974,18980 ****
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 2)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stosw"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18974,18980 ----
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 2)))]
! "TARGET_64BIT"
"stosw"
[(set_attr "type" "str")
(set_attr "memory" "store")
***************
*** 18986,18992 ****
(set (match_operand:SI 0 "register_operand" "=D")
(plus:SI (match_dup 1)
(const_int 1)))]
! "!TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stosb"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18986,18992 ----
(set (match_operand:SI 0 "register_operand" "=D")
(plus:SI (match_dup 1)
(const_int 1)))]
! "!TARGET_64BIT"
"stosb"
[(set_attr "type" "str")
(set_attr "memory" "store")
***************
*** 18998,19004 ****
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 1)))]
! "TARGET_64BIT && TARGET_SINGLE_STRINGOP"
"stosb"
[(set_attr "type" "str")
(set_attr "memory" "store")
--- 18998,19004 ----
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
(const_int 1)))]
! "TARGET_64BIT"
"stosb"
[(set_attr "type" "str")
(set_attr "memory" "store")


------------------------------------------------------------------------

Subject:
Re: Combine iWMMXt vector move patterns
From:
Paul Brook <paul@codesourcery.com>
Date:
Thu, 7 Aug 2008 16:24:20 +0100
To:
gcc-patches@gcc.gnu.org

To:
gcc-patches@gcc.gnu.org
CC:
"Joseph S. Myers" <joseph@codesourcery.com>


2008-07-27 Joseph Myers <joseph@codesourcery.com>

	* config/arm/iwmmxt.md (movv8qi_internal, movv4hi_internal,
	movv2si_internal): Combine into mov<mode>_internal.
	(movv2si_internal_2): Remove.

Ok.


Paul

------------------------------------------------------------------------

Subject:
Re: patch for merging graphite branch (before tuplification)
From:
Jack Howarth <howarth@bromo.msbb.uc.edu>
Date:
Thu, 7 Aug 2008 11:25:33 -0400
To:
Sebastian Pop <sebpop@gmail.com>

To:
Sebastian Pop <sebpop@gmail.com>
CC:
Richard Guenther <richard.guenther@gmail.com>, GCC Patches <gcc-patches@gcc.gnu.org>, Mark Mitchell <mark@codesourcery.com>, Jakub Jelinek <jakub@redhat.com>, David Edelsohn <edelsohn@gmail.com>, "Harle, Christophe" <christophe.harle@amd.com>, Tobias Grosser <grosser@fim.uni-passau.de>, Konrad Trifunovic <konrad.trifunovic@gmail.com>, Albert Cohen <Albert.Cohen@inria.fr>, Roberto Bagnara <bagnara@cs.unipr.it>



Sebastian, A couple questions. Do you know when the ppl cvs will be released as the next ppl version? I noticed today that the ppl testsuite failures I am seeing on i386-apple-darwin9 appear to be fixed in ppl cvs. Also is it likely that cloog-ppl git and the graphite patches would build under ppl cvs? I ask because I thought I would try ppl cvs to see if it eliminated the two graphite gcc testsuite failures I am seeing on i686-apple-darwin9 with ppl 0.9 (since that release shows failures in the ppl testsuite on that target). Jack




On Sat, Aug 02, 2008 at 07:26:18PM -0500, Sebastian Pop wrote:
Hi,

The graphite branch has been tuplified and the port to PPL passes the
graphite testsuite.  For building the graphite branch right now, here
are the steps you'll have to go through:

You have to get a copy of the release 0.9 of PPL from:
http://www.cs.unipr.it/ppl/Download/

cd ppl
./configure --prefix=/somewhere
make
make install

Then you can get a copy of the port of Cloog to PPL as follows:

cd cloog
git-init
git-pull http://repo.or.cz/w/cloog-ppl.git
aclocal
autoconf
./configure --with-ppl=/somewhere --prefix=/somewhere
make
make install

Then grab a version of graphite branch and configure like this:

cd gcc/build
../configure --with-cloog=/somewhere --with-ppl=/somewhere
make

For the moment I think that building the cloog and ppl libs in the gcc
directory is broken.  I have not been able to configure ppl within the
build of gcc because ieeefp.h has not been found on my ubuntu system.
I will try to see how that can be fixed, or better, not provide this
functionality and expect all the time the cloog and ppl libs to be
installed on the system.

Note that ppl and polylib are two backends of cloog, and one has the
choice of the polyhedral library to be used.  For the moment the code
generated by the ppl backend contains much more conditions that are
redundant with respect to the enclosing loops because of the
cloog_domain_simplify operation that is still very inefficient in the
ppl backend.  This should be improved either in newer versions of PPL.

Sebastian Pop
--
AMD - GNU Tools


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]