! }
! 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