RE: MPC 0.7 officially released, please test and report your results!

2009-09-11 Thread Weddington, Eric
 

> -Original Message-
> From: Kaveh R. GHAZI [mailto:gh...@caip.rutgers.edu] 
> Sent: Friday, September 11, 2009 12:07 AM
> To: gcc@gcc.gnu.org
> Subject: MPC 0.7 officially released, please test and report 
> your results!
> 
> Hi,
> 
> mpc-0.7 now has been released, 
 
> Please download, compile and run "make check" for this 
> release and post
> your results as well your target triplet and the versions of your
> compiler, gmp and mpfr. All platform results are welcome, but I am
> especially interested in GCC's primary and secondary platform list.

mpc 0.7
i686-pc-mingw32
gcc 3.4.5
gmp 4.3.1
mpfr 2.4.1

===
All 45 tests passed
===

Eric Weddington


Re: MPC 0.7 officially released, please test and report your results!

2009-09-11 Thread Dave Korn
Kaveh R. GHAZI wrote:
> Hi,
>
> mpc-0.7 now has been released, you can get the package here:
> http://www.multiprecision.org/index.php?prog=mpc&page=download

  Dude!  You have a 2.2 megabyte JPG on your front page!  Seriously, WTF?!  It
took like five seconds to slowly load by scanlines, it was like being back in
1995!  (Also, it's embedded from wikimedia commons.  What happens if the
original uploader decides to replace it with a copy of goatse one day?)

  Err, anyway, to the point:

> $ ./config.status --version
> mpc config.status 0.7
> configured by ./configure, generated by GNU Autoconf 2.61,
>   with options "'-v' '--prefix=/usr' '--disable-static' '--enable-shared'"

> ===
> All 45 tests passed
> ===

> $ ./config.guess
> i686-pc-cygwin

> $ cygcheck -cd cygwin gcc4 mpfr gmp libmpfr1 libgmp3
> Cygwin Package Information
> Package  Version
> cygwin   1.7.0-60
> gcc4 4.3.2-2
> gmp  4.3.1-3
> libgmp3  4.3.1-3
> libmpfr1 2.4.1-4
> mpfr 2.4.1-4

  No sign of the previous compile problems, so that confirms the fix was
integrated correctly.  Thanks.

cheers,
  DaveK


Re: MPC 0.7 officially released, please test and report your results!

2009-09-11 Thread David Edelsohn
On Thu, Sep 10, 2009 at 6:06 PM, Kaveh R. GHAZI  wrote:

> Please download, compile and run "make check" for this release and post
> your results as well your target triplet and the versions of your
> compiler, gmp and mpfr. All platform results are welcome, but I am
> especially interested in GCC's primary and secondary platform list.

powerpc-ibm-aix5.3.0.0
gcc-4.3.4
gmp-4.2.4
mpfr-2.4.0
mpc-0.7

===
All 45 tests passed
===


Restrict qualifier doesn't work in TRUNK.

2009-09-11 Thread Bingfeng Mei
Hello,
I notice the restrict qualifier doesn't work properly in trunk any more. 
In the following example, the memory accesses of a, b, c don't have different
alias set attached any more. Instead, the generic alias set of 2 is used
for all accesses. 

I remember alias analysis part had some big changes since 4.5 branched out.
Is it still in unstable phase, or is there some new hooks I should use for
my port? 

Cheers,
Bingfeng Mei


void foo (int * __restrict__ a, int * __restrict__ b, int * __restrict__ c)
{
   int i;
   for(i = 0; i < 100; i+=4)
 {
   a[i] = b[i] * c[i];
   a[i+1] = b[i+1] * c[i+1];
   a[i+2] = b[i+2] * c[i+2];
   a[i+3] = b[i+3] * c[i+3];
 }
}   

Before expand:

foo (int * restrict a, int * restrict b, int * restrict c)
{
  long unsigned int D.3213;
  long unsigned int ivtmp.32;
  long unsigned int ivtmp.31;
  long unsigned int ivtmp.29;
  int D.3168;
  int D.3167;
  int D.3165;
  int D.3160;
  int D.3159;
  int D.3157;
  int D.3152;
  int D.3151;
  int D.3149;
  int D.3143;
  int D.3142;
  int D.3140;

  # BLOCK 2 freq:385
  # PRED: ENTRY [100.0%]  (fallthru,exec)
  ivtmp.29_77 = (long unsigned int) b_9(D);
  ivtmp.31_74 = (long unsigned int) c_14(D);
  ivtmp.32_83 = (long unsigned int) a_5(D);
  D.3213_85 = ivtmp.32_83 + 400;
  # SUCC: 3 [100.0%]  (fallthru,exec)

  # BLOCK 3 freq:9615
  # PRED: 3 [96.0%]  (true,exec) 2 [100.0%]  (fallthru,exec)
  # ivtmp.29_79 = PHI 
  # ivtmp.31_76 = PHI 
  # ivtmp.32_73 = PHI 
  D.3140_11 = MEM[index: ivtmp.29_79];
  D.3142_16 = MEM[index: ivtmp.31_76];
  D.3143_17 = D.3142_16 * D.3140_11;
  MEM[index: ivtmp.32_73] = D.3143_17;
  D.3149_26 = MEM[index: ivtmp.29_79, offset: 4];
  D.3151_31 = MEM[index: ivtmp.31_76, offset: 4];
  D.3152_32 = D.3151_31 * D.3149_26;
  MEM[index: ivtmp.32_73, offset: 4] = D.3152_32;
  D.3157_41 = MEM[index: ivtmp.29_79, offset: 8];
  D.3159_46 = MEM[index: ivtmp.31_76, offset: 8];
  D.3160_47 = D.3159_46 * D.3157_41;
  MEM[index: ivtmp.32_73, offset: 8] = D.3160_47;
  D.3165_56 = MEM[index: ivtmp.29_79, offset: 12];
  D.3167_61 = MEM[index: ivtmp.31_76, offset: 12];
  D.3168_62 = D.3167_61 * D.3165_56;
  MEM[index: ivtmp.32_73, offset: 12] = D.3168_62;
  ivtmp.29_78 = ivtmp.29_79 + 16;
  ivtmp.31_75 = ivtmp.31_76 + 16;
  ivtmp.32_82 = ivtmp.32_73 + 16;
  if (ivtmp.32_82 != D.3213_85)
goto ;
  else
goto ;
  # SUCC: 3 [96.0%]  (true,exec) 4 [4.0%]  (false,exec)

  # BLOCK 4 freq:385
  # PRED: 3 [4.0%]  (false,exec)
  return;
  # SUCC: EXIT [100.0%] 

}

Part of RTL

...
insn 40 39 41 4 sms-6.c:11 (set (reg:SI 157)
(mem:SI (reg:SI 151 [ ivtmp.31 ]) [2 S4 A32])) -1 (nil))

(insn 41 40 42 4 sms-6.c:11 (set (reg:SI 158)
(mem:SI (reg:SI 152 [ ivtmp.29 ]) [2 S4 A32])) -1 (nil))

(insn 42 41 43 4 sms-6.c:11 (set (reg:SI 159)
(mult:SI (reg:SI 157)
(reg:SI 158))) -1 (nil))

(insn 43 42 44 4 sms-6.c:11 (set (mem:SI (reg:SI 150 [ ivtmp.32 ]) [2 S4 A32])
(reg:SI 159)) -1 (nil))

(insn 44 43 45 4 sms-6.c:12 (set (reg:SI 160)
(mem:SI (plus:SI (reg:SI 151 [ ivtmp.31 ])
(const_int 4 [0x4])) [2 S4 A32])) -1 (nil))

(insn 45 44 46 4 sms-6.c:12 (set (reg:SI 161)
(mem:SI (plus:SI (reg:SI 152 [ ivtmp.29 ])
(const_int 4 [0x4])) [2 S4 A32])) -1 (nil))

(insn 46 45 47 4 sms-6.c:12 (set (reg:SI 162)
(mult:SI (reg:SI 160)
(reg:SI 161))) -1 (nil))

(insn 47 46 48 4 sms-6.c:12 (set (mem:SI (plus:SI (reg:SI 150 [ ivtmp.32 ])
(const_int 4 [0x4])) [2 S4 A32])
(reg:SI 162)) -1 (nil))

(insn 48 47 49 4 sms-6.c:13 (set (reg:SI 163)
(mem:SI (plus:SI (reg:SI 151 [ ivtmp.31 ])
(const_int 8 [0x8])) [2 S4 A32])) -1 (nil))

(insn 49 48 50 4 sms-6.c:13 (set (reg:SI 164)
(mem:SI (plus:SI (reg:SI 152 [ ivtmp.29 ])
(const_int 8 [0x8])) [2 S4 A32])) -1 (nil))
...


New Hyip - 15-30% Daily - Paid

2009-09-11 Thread tlmay


New Hyip - 15-30% Daily - Paid

2009-09-11 Thread pinkpanther2


New Hyip - 15-30% Daily - Paid

2009-09-11 Thread triangle


Re: Restrict qualifier doesn't work in TRUNK.

2009-09-11 Thread Richard Guenther
On Fri, Sep 11, 2009 at 4:11 PM, Bingfeng Mei  wrote:
> Hello,
> I notice the restrict qualifier doesn't work properly in trunk any more.
> In the following example, the memory accesses of a, b, c don't have different
> alias set attached any more. Instead, the generic alias set of 2 is used
> for all accesses.
>
> I remember alias analysis part had some big changes since 4.5 branched out.
> Is it still in unstable phase, or is there some new hooks I should use for
> my port?

restrict is no longer encoded in the type-based alias-sets but in
the points-to sets that are reachable from the mems MEM_EXPR.
In case of TARGET_MEM_REFs you are (at the moment) out of luck
though.

Richard.

> Cheers,
> Bingfeng Mei
>
>
> void foo (int * __restrict__ a, int * __restrict__ b, int * __restrict__ c)
> {
>   int i;
>   for(i = 0; i < 100; i+=4)
>     {
>       a[i] = b[i] * c[i];
>       a[i+1] = b[i+1] * c[i+1];
>       a[i+2] = b[i+2] * c[i+2];
>       a[i+3] = b[i+3] * c[i+3];
>     }
> }
>
> Before expand:
>
> foo (int * restrict a, int * restrict b, int * restrict c)
> {
>  long unsigned int D.3213;
>  long unsigned int ivtmp.32;
>  long unsigned int ivtmp.31;
>  long unsigned int ivtmp.29;
>  int D.3168;
>  int D.3167;
>  int D.3165;
>  int D.3160;
>  int D.3159;
>  int D.3157;
>  int D.3152;
>  int D.3151;
>  int D.3149;
>  int D.3143;
>  int D.3142;
>  int D.3140;
>
>  # BLOCK 2 freq:385
>  # PRED: ENTRY [100.0%]  (fallthru,exec)
>  ivtmp.29_77 = (long unsigned int) b_9(D);
>  ivtmp.31_74 = (long unsigned int) c_14(D);
>  ivtmp.32_83 = (long unsigned int) a_5(D);
>  D.3213_85 = ivtmp.32_83 + 400;
>  # SUCC: 3 [100.0%]  (fallthru,exec)
>
>  # BLOCK 3 freq:9615
>  # PRED: 3 [96.0%]  (true,exec) 2 [100.0%]  (fallthru,exec)
>  # ivtmp.29_79 = PHI 
>  # ivtmp.31_76 = PHI 
>  # ivtmp.32_73 = PHI 
>  D.3140_11 = MEM[index: ivtmp.29_79];
>  D.3142_16 = MEM[index: ivtmp.31_76];
>  D.3143_17 = D.3142_16 * D.3140_11;
>  MEM[index: ivtmp.32_73] = D.3143_17;
>  D.3149_26 = MEM[index: ivtmp.29_79, offset: 4];
>  D.3151_31 = MEM[index: ivtmp.31_76, offset: 4];
>  D.3152_32 = D.3151_31 * D.3149_26;
>  MEM[index: ivtmp.32_73, offset: 4] = D.3152_32;
>  D.3157_41 = MEM[index: ivtmp.29_79, offset: 8];
>  D.3159_46 = MEM[index: ivtmp.31_76, offset: 8];
>  D.3160_47 = D.3159_46 * D.3157_41;
>  MEM[index: ivtmp.32_73, offset: 8] = D.3160_47;
>  D.3165_56 = MEM[index: ivtmp.29_79, offset: 12];
>  D.3167_61 = MEM[index: ivtmp.31_76, offset: 12];
>  D.3168_62 = D.3167_61 * D.3165_56;
>  MEM[index: ivtmp.32_73, offset: 12] = D.3168_62;
>  ivtmp.29_78 = ivtmp.29_79 + 16;
>  ivtmp.31_75 = ivtmp.31_76 + 16;
>  ivtmp.32_82 = ivtmp.32_73 + 16;
>  if (ivtmp.32_82 != D.3213_85)
>    goto ;
>  else
>    goto ;
>  # SUCC: 3 [96.0%]  (true,exec) 4 [4.0%]  (false,exec)
>
>  # BLOCK 4 freq:385
>  # PRED: 3 [4.0%]  (false,exec)
>  return;
>  # SUCC: EXIT [100.0%]
>
> }
>
> Part of RTL
>
> ...
> insn 40 39 41 4 sms-6.c:11 (set (reg:SI 157)
>        (mem:SI (reg:SI 151 [ ivtmp.31 ]) [2 S4 A32])) -1 (nil))
>
> (insn 41 40 42 4 sms-6.c:11 (set (reg:SI 158)
>        (mem:SI (reg:SI 152 [ ivtmp.29 ]) [2 S4 A32])) -1 (nil))
>
> (insn 42 41 43 4 sms-6.c:11 (set (reg:SI 159)
>        (mult:SI (reg:SI 157)
>            (reg:SI 158))) -1 (nil))
>
> (insn 43 42 44 4 sms-6.c:11 (set (mem:SI (reg:SI 150 [ ivtmp.32 ]) [2 S4 A32])
>        (reg:SI 159)) -1 (nil))
>
> (insn 44 43 45 4 sms-6.c:12 (set (reg:SI 160)
>        (mem:SI (plus:SI (reg:SI 151 [ ivtmp.31 ])
>                (const_int 4 [0x4])) [2 S4 A32])) -1 (nil))
>
> (insn 45 44 46 4 sms-6.c:12 (set (reg:SI 161)
>        (mem:SI (plus:SI (reg:SI 152 [ ivtmp.29 ])
>                (const_int 4 [0x4])) [2 S4 A32])) -1 (nil))
>
> (insn 46 45 47 4 sms-6.c:12 (set (reg:SI 162)
>        (mult:SI (reg:SI 160)
>            (reg:SI 161))) -1 (nil))
>
> (insn 47 46 48 4 sms-6.c:12 (set (mem:SI (plus:SI (reg:SI 150 [ ivtmp.32 ])
>                (const_int 4 [0x4])) [2 S4 A32])
>        (reg:SI 162)) -1 (nil))
>
> (insn 48 47 49 4 sms-6.c:13 (set (reg:SI 163)
>        (mem:SI (plus:SI (reg:SI 151 [ ivtmp.31 ])
>                (const_int 8 [0x8])) [2 S4 A32])) -1 (nil))
>
> (insn 49 48 50 4 sms-6.c:13 (set (reg:SI 164)
>        (mem:SI (plus:SI (reg:SI 152 [ ivtmp.29 ])
>                (const_int 8 [0x8])) [2 S4 A32])) -1 (nil))
> ...
>


Re: [gnat] stmt_group_free_list and gnu_stack_free_list in trans.c

2009-09-11 Thread Ian Lance Taylor
oliver.kell...@t-online.de (Oliver Kellogg) writes:

> What is the point of stmt_group_free_list and gnu_stack_free_list in
> trans.c? Why not always allocate a fresh node?

Just for speed, I assume.  It's usually faster to keep a free list than
to go back to the allocator each time.  I don't know anything about the
Ada compiler but I assume it needs to allocate a bunch of stmt_group
structures.

stmt_group_free_list is marked deletable which means that if a garbage
collection occurs the memory taken up by the free list will be freed.

Ian


Re: Add support for the Win32 hook prologue (try 3)

2009-09-11 Thread Ross Ridge
Stefan Dösinger writes:
>On a partly related topic, I think the Win64 ABI requires that the first
>function is two bytes long, and there at least 6 bytes of slack before
>the function. Does gcc implement that?

As far as I can tell the Win64 ABI doesn't have either of these
requirements.  Microsoft's compiler certainly doesn't guarantee that
functions begin with two byte instructions, and the "x64 Software
Conventions" document gives examples of prologues with larger initial
instructions:

http://msdn.microsoft.com/en-us/library/tawsa7cb(VS.80).aspx

Mind you, last I checked, GCC didn't actually follow the ABI requirements
for prologues and epilogues given in the link above, but that only breaks
ABI unwinding.

Ross Ridge



Re: Add support for the Win32 hook prologue (try 3)

2009-09-11 Thread Kai Tietz
2009/9/11 Ross Ridge :
> Stefan Dösinger writes:
>>On a partly related topic, I think the Win64 ABI requires that the first
>>function is two bytes long, and there at least 6 bytes of slack before
>>the function. Does gcc implement that?
>
> As far as I can tell the Win64 ABI doesn't have either of these
> requirements.  Microsoft's compiler certainly doesn't guarantee that
> functions begin with two byte instructions, and the "x64 Software
> Conventions" document gives examples of prologues with larger initial
> instructions:
>
>        http://msdn.microsoft.com/en-us/library/tawsa7cb(VS.80).aspx
>
> Mind you, last I checked, GCC didn't actually follow the ABI requirements
> for prologues and epilogues given in the link above, but that only breaks
> ABI unwinding.

Right, but even unwinding is still possible on x64 (so we don't break
the SEH2 unwinding support actually), as everything gcc does here in
prologue, can be expressed by chaininfo (if prologue size is bigger
then 255 bytes).



-- 
|  (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination


[lto] Merge from trunk rev 151592.

2009-09-11 Thread Diego Novillo
This merge uncovered a bug in cgraph node streaming.  There were
several bitflags that were not being written out.  I also removed
a few old patches that are no longer needed.

Once the EH changes are in mainline, we'll be ready to merge the
streamer, which is the only module left to merge.

Bootstrapped and tested on x86_64.


Diego.


2009-09-11  Diego Novillo  

Mainline merge @151592.

* configure.ac (ACX_PKGVERSION): Update revision merge string.
* configure: Regenerate.

2009-09-11  Diego Novillo  

* cgraph.c (cgraph_clone_input_node): Remove.  Update all users to
call cgraph_clone_node instead.
(cgraph_is_clone_node): Remove unused function.
* ipa.c (cgraph_remove_unreachable_nodes): Do not set
disregard_inline_limits to false.
(gate_ipa_fun_and_var_visibility): Remove.  Update
pass_ipa_function_and_variable_visibility.
* lto-cgraph.c (lto_output_node): Output field count.
Reorganize packing of node bitflags to follow the same
order that they're declared.
Add fields address_taken, abstract_and_needed, reachable,
process, alias and finalized_by_frontend.
(input_overwrite_node): Corresponding changes.

diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 11a9ed2..3d49b8d 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1713,44 +1713,6 @@ cgraph_clone_node (struct cgraph_node *n, gcov_type 
count, int freq,
   return new_node;
 }
 
-/* Create node representing clone of N during when reading the call-graph
-   from an LTO stream.  This is simpler than cgraph_clone_node.  Additional
-   information in the cloned node will be filled in later. */
-
-struct cgraph_node *
-cgraph_clone_input_node (struct cgraph_node *n)
-{
-  struct cgraph_node *new_node = cgraph_create_node ();
-
-  new_node->decl = n->decl;
-  new_node->origin = n->origin;
-  if (new_node->origin)
-{
-  new_node->next_nested = new_node->origin->nested;
-  new_node->origin->nested = new_node;
-}
-  new_node->analyzed = n->analyzed;
-  new_node->local = n->local;
-  new_node->global = n->global;
-  new_node->rtl = n->rtl;
-
-  new_node->next_sibling_clone = n->clones;
-  if (n->clones)
-n->clones->prev_sibling_clone = new_node;
-  n->clones = new_node;
-  new_node->clone_of = n;
-
-  return new_node;
-}
-
-/* Return true if N is a cloned node.  */
-
-bool
-cgraph_is_clone_node (struct cgraph_node *n)
-{
-  return n->clone_of != NULL;
-}
-
 /* Create a new name for omp child function.  Returns an identifier.  */
 
 static GTY(()) unsigned int clone_fn_id_num;
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 3349a57..10617ec 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -422,7 +422,6 @@ struct cgraph_edge * cgraph_clone_edge (struct cgraph_edge 
*,
unsigned, gcov_type, int, int, bool);
 struct cgraph_node * cgraph_clone_node (struct cgraph_node *, gcov_type, int,
int, bool);
-struct cgraph_node * cgraph_clone_input_node (struct cgraph_node *);
 
 void cgraph_redirect_edge_callee (struct cgraph_edge *, struct cgraph_node *);
 
@@ -432,7 +431,6 @@ bool cgraph_function_possibly_inlined_p (tree);
 void cgraph_unnest_node (struct cgraph_node *);
 
 enum availability cgraph_function_body_availability (struct cgraph_node *);
-bool cgraph_is_clone_node (struct cgraph_node *);
 void cgraph_add_new_function (tree, bool);
 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
 struct cgraph_node * cgraph_create_virtual_clone (struct cgraph_node *old_node,
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 3f7a3ee..9204caa 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -216,7 +216,6 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, 
FILE *file)
  node->analyzed = false;
  node->local.inlinable = false;
}
- node->local.disregard_inline_limits = false;
}
  else
cgraph_remove_node (node);
@@ -315,18 +314,12 @@ function_and_variable_visibility (void)
   return 0;
 }
 
-static bool
-gate_ipa_fun_and_var_visibility (void)
-{
-  return true;
-}
-
 struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility = 
 {
  {
   SIMPLE_IPA_PASS,
   "visibility",/* name */
-  gate_ipa_fun_and_var_visibility, /* gate */
+  NULL,/* gate */
   function_and_variable_visibility,/* execute */
   NULL,/* sub */
   NULL,/* next */
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index 899e111..dc85a38 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -243,11 +243,9 @@ lto_output_node (struct lto_simple_output_block *ob, 
struct cgraph_node *node,
 bitmap_set_bit (written_decls, DECL_UID (node->decl));
 
   lto_output_fn_decl_index (ob->decl_state, ob->main_strea

Re: i370 port - in search of hooks

2009-09-11 Thread Paul Edwards

I'm making quite good progress with cleaning up the 3.4.6 i370
port.  I've even got optimization working to some degree.

Meanwhile, on a different machine (a Linux machine I program
on on the way to/from work), I have managed to build 4.4.0,
which means I have an environment to work on a more modern
version of GCC.

That modern version is what I would like to ask about today.
Leaving aside the issue of the actual target, I'm more interested
in the intrusive hooks I expect I will need (I won't know until
I start doing the work, and I can't do that until I find out whether
4.4 is good enough - chicken and egg).  Here is what I needed
for 3.4.6:


1. Ability to build a standalone executable.  Simply put, I need
gcc to do a function call like this:

#ifdef SINGLE_EXECUTABLE
{
int cnt = 0;

while (commands[i].argv[cnt] != NULL)
{
cnt++;
}
if (strcmp(string, "cc1") == 0)
{
ret_code = toplev_main(cnt, commands[i].argv);
if (ret_code != 0) break;
}
 }
#else

Doesn't need to be exactly like that, but some sort of hook to be
made available so that I can bypass system() or any variation of
that.  C90 doesn't guarantee that system() will do anything in
particular.  And my C environment indeed doesn't work too well
if you try that.  Can't have two programs opening and closing
the same DDNAME.  Can only have 100 characters worth of
parameters too.


2. A completely different way of handling include files.  After going
through the normal remap process, I then want the following
transformations:

#include "fred.h"

gets translated into an fopen("dd:include(fred)", "r")

#include 

gets translated into an fopen("dd:sysincl(fred)", "r")

None of this checking to see if something is a directory etc.  There's
no such call available in C90, nor my C library on MVS.  The code
above looks trivial enough, but when it's time to actually find where
to put that, it's non-trivial.


3. There is some complicated parameter lookup facility - it does a binary
search on the parameters.  This requires a whole lot of infrastructure to
be present to generate the code.  Infrastructure which I don't have.  I'd
like a simple sequential search to be available as an option I can
activate.


4. There are a whole lot of includes that don't exist, like sys/types.h, and
I'd like them to be masked out like all other includes are done (even
things that are part of C90 have masks!!!).


5. It'd be cool if some of the names could be unique in the first 8 
characters

(C90 guarantees 6 for externals, but I have the luxury of 8).  I have a
mostly non-intrusive way of remapping everything, but there are a few
that I need to do intrusively, because I can't #define away something
that is already #defined.  Problem is compounded by the fact that
I link together code that normally isn't linked together.  Note that I don't
need things like an assembler and linker linked in together - I just need
the stuff required for the "-S" option to work.  ie text file (ie C code) 
in,

and text file (ie assembler code) out - a text processing program that
should be (and in fact, has already been made that way) possible to
do in pure C90.


6. It would be nice if all the non-C90 Posix functions were masked out,
but so far I have been able to kludge around that without requiring a
lot of intrusive changes.  It would be good to get the worst of them
out though.


My questions are:

1. Are changes like the above likely to be accepted into the head version
going forward?

2. If they are, what version should I work on to get that to happen?


Ideally I'd like to work on a stable version, perhaps 4.4, and later have
those changes merged onto the head.  But I fear if I do that I will end
up in the same position I am in now with 3.4.6, ie too many changes
such that my patches are never actually relevant.

But it's quite daunting to get this working at all.

So I thought that what I might be able to do instead is get the hooks
in place first.  Not necessarily all at once.  Possibly over the course
of a year.

Eventually all the hooks will exist, there will be a stable release cut
containing all the hooks I need, and then I may be in with a chance of
getting i370 working on that environment.  That would also be done
over the course of a year or whatever, as the GMP and MPFR need to
be set up on MVS too (just having a S/390 port is not sufficient - I
need S/370 HLASM).

Hopefully at the end of that process, I'll have an i370 port that is done
in a "standard" way so that updating to the latest GCC is fairly trivial
*regardless* of whether the i370 port is included in GCC proper due
to the yet more technical challenges that requires, another job for
another year.  :-)

This is a parallel effort to my 3.4.6 work which is done on a different
PC at a different time.  3.4.6 is mostly about getting it to run on
real MVS.  4.4/x is simply to get a cross-compile to work for now.

Thanks.  Paul.

Re: [lambda] Latest experimental polymorphic lambda patches

2009-09-11 Thread Ian Lance Taylor
On Tue, Aug 11, 2009 at 7:05 AM, Jason Merrill  wrote:
> A few comments:
>
>> /* XXX: Any way to get current location? */
>
> input_location

Just a late comment: using input_location is generally not a good
idea.  Every token in the parser has a location.  That should be the
source of all location information.  Using input_location generally
gives you the wrong column and sometimes even gives you the wrong
line.  We should eventually eliminate it.

Ian


Re: MPC 0.7 officially released, please test and report your results!

2009-09-11 Thread Janis Johnson
On Thu, 2009-09-10 at 18:06 -0400, Kaveh R. GHAZI wrote:
> Hi,
> 
> mpc-0.7 now has been released, you can get the package here:
> http://www.multiprecision.org/index.php?prog=mpc&page=download
> 
> Here's the official announcement:
> http://lists.gforge.inria.fr/pipermail/mpc-discuss/2009-September/000554.html
> 
> Of particular interest in this release are bugfixes, especially for
> complex division, and the introduction of mpc_pow used for folding
> cpow{,f,l} inside GCC.
> 
> Note the complex "arc" functions are still missing and are now projected
> to be available in a future release, probably 0.8.
> 
> Please download, compile and run "make check" for this release and post
> your results as well your target triplet and the versions of your
> compiler, gmp and mpfr. All platform results are welcome, but I am
> especially interested in GCC's primary and secondary platform list.

I tested using both -m32 and -m64 versions of the libraries.

powerpc64-unknown-linux-gnu
gcc-4.4.1
gmp-4.2.4
mpfr-2.4.1
mpc-0.7

For both versions of the library:

===
All 45 tests passed
===



[lto] Merge from trunk rev 151592 (repost)

2009-09-11 Thread Diego Novillo
Reposting.  Apparently gmail has been labelling messages from
google.com as spam.  It should be fixed now.


Diego.


-- Forwarded message --
From: Diego Novillo 
Date: Fri, Sep 11, 2009 at 11:37
Subject: [lto] Merge from trunk rev 151592.
To: gcc@gcc.gnu.org
Cc: rguent...@suse.de


This merge uncovered a bug in cgraph node streaming.  There were
several bitflags that were not being written out.  I also removed
a few old patches that are no longer needed.

Once the EH changes are in mainline, we'll be ready to merge the
streamer, which is the only module left to merge.

Bootstrapped and tested on x86_64.


Diego.


2009-09-11  Diego Novillo  

       Mainline merge @151592.

       * configure.ac (ACX_PKGVERSION): Update revision merge string.
       * configure: Regenerate.

2009-09-11  Diego Novillo  

       * cgraph.c (cgraph_clone_input_node): Remove.  Update all users to
       call cgraph_clone_node instead.
       (cgraph_is_clone_node): Remove unused function.
       * ipa.c (cgraph_remove_unreachable_nodes): Do not set
       disregard_inline_limits to false.
       (gate_ipa_fun_and_var_visibility): Remove.  Update
       pass_ipa_function_and_variable_visibility.
       * lto-cgraph.c (lto_output_node): Output field count.
       Reorganize packing of node bitflags to follow the same
       order that they're declared.
       Add fields address_taken, abstract_and_needed, reachable,
       process, alias and finalized_by_frontend.
       (input_overwrite_node): Corresponding changes.

diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 11a9ed2..3d49b8d 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1713,44 +1713,6 @@ cgraph_clone_node (struct cgraph_node *n,
gcov_type count, int freq,
  return new_node;
 }

-/* Create node representing clone of N during when reading the call-graph
-   from an LTO stream.  This is simpler than cgraph_clone_node.  Additional
-   information in the cloned node will be filled in later. */
-
-struct cgraph_node *
-cgraph_clone_input_node (struct cgraph_node *n)
-{
-  struct cgraph_node *new_node = cgraph_create_node ();
-
-  new_node->decl = n->decl;
-  new_node->origin = n->origin;
-  if (new_node->origin)
-    {
-      new_node->next_nested = new_node->origin->nested;
-      new_node->origin->nested = new_node;
-    }
-  new_node->analyzed = n->analyzed;
-  new_node->local = n->local;
-  new_node->global = n->global;
-  new_node->rtl = n->rtl;
-
-  new_node->next_sibling_clone = n->clones;
-  if (n->clones)
-    n->clones->prev_sibling_clone = new_node;
-  n->clones = new_node;
-  new_node->clone_of = n;
-
-  return new_node;
-}
-
-/* Return true if N is a cloned node.  */
-
-bool
-cgraph_is_clone_node (struct cgraph_node *n)
-{
-  return n->clone_of != NULL;
-}
-
 /* Create a new name for omp child function.  Returns an identifier.  */

 static GTY(()) unsigned int clone_fn_id_num;
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 3349a57..10617ec 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -422,7 +422,6 @@ struct cgraph_edge * cgraph_clone_edge (struct
cgraph_edge *,
                                       unsigned, gcov_type, int, int, bool);
 struct cgraph_node * cgraph_clone_node (struct cgraph_node *, gcov_type, int,
                                       int, bool);
-struct cgraph_node * cgraph_clone_input_node (struct cgraph_node *);

 void cgraph_redirect_edge_callee (struct cgraph_edge *, struct cgraph_node *);

@@ -432,7 +431,6 @@ bool cgraph_function_possibly_inlined_p (tree);
 void cgraph_unnest_node (struct cgraph_node *);

 enum availability cgraph_function_body_availability (struct cgraph_node *);
-bool cgraph_is_clone_node (struct cgraph_node *);
 void cgraph_add_new_function (tree, bool);
 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
 struct cgraph_node * cgraph_create_virtual_clone (struct cgraph_node *old_node,
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 3f7a3ee..9204caa 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -216,7 +216,6 @@ cgraph_remove_unreachable_nodes (bool
before_inlining_p, FILE *file)
                     node->analyzed = false;
                     node->local.inlinable = false;
                   }
-                 node->local.disregard_inline_limits = false;
               }
             else
               cgraph_remove_node (node);
@@ -315,18 +314,12 @@ function_and_variable_visibility (void)
  return 0;
 }

-static bool
-gate_ipa_fun_and_var_visibility (void)
-{
-  return true;
-}
-
 struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility =
 {
 {
  SIMPLE_IPA_PASS,
  "visibility",                                /* name */
-  gate_ipa_fun_and_var_visibility,     /* gate */
+  NULL,                                        /* gate */
  function_and_variable_visibility,    /* execute */
  NULL,                                        /* sub */
  NULL,                                        /* next */
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index 899e111..dc85a38 100644
--- a/gcc/

Not using DECL_VALUE_EXPR for callee-copied parameters?

2009-09-11 Thread Martin Jambor
Hi,

we sometimes currently mess up when compiling callee-copied parameters
on architectures that use it (so, as far as I know, on hppa).  The
manifestation of the issue is e.g. PR 40464 but I believe there maight
be others.

The real problem is that even though a comment in tree.h says that
declarations with a DECL_VALUE_EXPR "once this field has been set, the
decl itself may not legitimately appear in the function," they do
because gimplify_parameters() in function.c generates an explicit copy
statements.  This then has unintended wrong consequences when such a
declaration is later fed to the gimplifier again (for example through
force_gimple_operand) because they are replaced with their value_expr.

For reference, this is PR 41250.

Because DECL_VALUE_EXPRs affect debug info I attempted to simply not
doing the replacements in gimplifier but ran into all sorts of asserts
in expand and later even to execution failures which altogether looked
too overwhelming and so I gave up.  At the moment I intend to simply
stop making these callee-copied parameters value_expr ones since the
convention is implemented explicitly - this amounts to the two line
patch below.  Obviously, this will impair debug info but I hope that
for this purpose we can represent the relationship in another way.
Specifically, I was hoping to be able to use BLOCK_NONLOCALIZED_VARS
in the form in which they are in pretty-ipa where they essentially map
no longer existing decls to expressions evaluating their values.
Honza, do you think they will work also for an existing PARM_DECL?

I have run the testsuite on hppa with the following patch and I
successfully bootstrapped and tested it on x86_64.  Unless someone
objects, I will bootstrap it on hppa and commit it in a week or two
along with Richi's patch verifying such decls don't leak to the IL
(and then try to use the mechanism above to keep the debug info).

Thanks,

Martin


2009-09-11  Martin Jambor  

* function.c (gimplify_parameters): Do not set a value-expr on
callee-copied parm decls.


Index: small/gcc/function.c
===
--- small.orig/gcc/function.c
+++ small/gcc/function.c
@@ -3425,9 +3425,6 @@ gimplify_parameters (void)
}
 
  gimplify_assign (local, parm, &stmts);
-
- SET_DECL_VALUE_EXPR (parm, local);
- DECL_HAS_VALUE_EXPR_P (parm) = 1;
}
}
 }


PS:  If you are interested what other purposes value_exprs are used
to, here is a list of places where SET_DECL_VALUE_EXPR is called, it
is such a weird thing in gimple that it might be a worthy goal to
replace them all with BLOCK_NONLOCALIZED_VARS:

*** function.c:
gimplify_parameters[3429]  SET_DECL_VALUE_EXPR (parm, local);

*** gimplify.c:
gimplify_vla_decl[1320]SET_DECL_VALUE_EXPR (decl, t);
gimplify_var_or_parm_decl[1900] SET_DECL_VALUE_EXPR (copy, unshare_expr 
(value_expr));

*** omp-low.c:
fixup_remapped_decl[1029]  SET_DECL_VALUE_EXPR (new_decl, ve);
lower_rec_input_clauses[2382]  SET_DECL_VALUE_EXPR (new_var, x);
lower_rec_input_clauses[2438]  SET_DECL_VALUE_EXPR (new_var, x);
lower_rec_input_clauses[2465]  SET_DECL_VALUE_EXPR (placeholder, x);
lower_reduction_clauses[2672]  SET_DECL_VALUE_EXPR (placeholder, ref);

*** tree-cfg.c:
replace_block_vars_by_duplicates[6183] SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR 
(*tp));

*** tree-nested.c:
get_nonlocal_debug_decl[839]   SET_DECL_VALUE_EXPR (new_decl, x);
get_local_debug_decl[1324] SET_DECL_VALUE_EXPR (new_decl, x);
remap_vla_decls[2159]  SET_DECL_VALUE_EXPR (var, val);

*** tree.c:
copy_node_stat[955]SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));



Re: Not using DECL_VALUE_EXPR for callee-copied parameters?

2009-09-11 Thread Ian Lance Taylor
Martin Jambor  writes:

> I have run the testsuite on hppa with the following patch and I
> successfully bootstrapped and tested it on x86_64.  Unless someone
> objects, I will bootstrap it on hppa and commit it in a week or two
> along with Richi's patch verifying such decls don't leak to the IL
> (and then try to use the mechanism above to keep the debug info).

Without meaning to criticize your investigation, I object on procedural
grounds--some maintainer must approve such a patch to mainline.  I don't
think it qualifies as obvious.

Ian


Re: The return of the bootstrap comparison failure on i386

2009-09-11 Thread Ryan Hill
On Thu, 10 Sep 2009 01:38:13 +0200 (CEST)
Gerald Pfeifer  wrote:

> i386-unknown-freebsd7.2, specifically, now PR 41326, after it has
> been originally fixed a few days ago.
> 
> Gerald
> 
> Comparing stages 2 and 3
> warning: gcc/cc1-checksum.o differs
> warning: gcc/cc1plus-checksum.o differs
> warning: gcc/cc1obj-checksum.o differs
> Bootstrap comparison failure!
> gcc/coverage.o differs
> gcc/gcov.o differs
> gcc/gcov-dump.o differs
> gmake[2]: *** [compare] Error 1
> gmake[2]: Leaving directory `/usr/nabil-files/pfeifer/OBJ-0909-2216'
> gmake[1]: *** [stage3-bubble] Error 2
> gmake[1]: Leaving directory `/usr/nabil-files/pfeifer/OBJ-0909-2216'
> gmake: *** [bootstrap-lean] Error 2

I haven't been able to bootstrap x86_64-unknown-linux-gnu at all since this
started. Latest attempt was with r151649.

make "DESTDIR=" "RPATH_ENVVAR=LD_LIBRARY_PATH" 
"TARGET_SUBDIR=x86_64-unknown-linux-gnu" 
"bindir=/usr/x86_64-unknown-linux-gnu/gcc-bin/4.5.0-pre" 
"datadir=/usr/share/gcc-data/x86_64-unknown-linux-gnu/4.5.0-pre" 
"exec_prefix=/usr" 
"includedir=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.0-pre/include" 
"datarootdir=/usr/share" "docdir=/usr/share/doc/" 
"infodir=/usr/share/gcc-data/x86_64-unknown-linux-gnu/4.5.0-pre/info" 
"pdfdir=/usr/share/doc/" "htmldir=/usr/share/doc/" "libdir=/usr/lib" 
"libexecdir=/usr/libexec" "lispdir=" "localstatedir=/usr/var" 
"mandir=/usr/share/gcc-data/x86_64-unknown-linux-gnu/4.5.0-pre/man" 
"oldincludedir=/usr/include" "prefix=/usr" "sbindir=/usr/sbin" 
"sharedstatedir=/usr/com" "sysconfdir=/usr/etc" 
"tooldir=/usr/x86_64-unknown-linux-gnu" 
"build_tooldir=/usr/x86_64-unknown-linux-gnu" 
"target_alias=x86_64-unknown-linux-gnu" "AWK=gawk" "BISON=bison" 
"CC_FOR_BUILD=x86_64-unknown-linux-gnu-gcc" "CFLAGS_FOR_BUILD=-O2 -g 
-march=core2 -pipe" "CXX_FOR_BUILD=x86_64-unknown-linux-gnu-g++" 
"EXPECT=expect" "FLEX=flex" "INSTALL=/usr/bin/install -c" 
"INSTALL_DATA=/usr/bin/install -c -m 644" "INSTALL_PROGRAM=/usr/bin/install -c" 
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS_FOR_BUILD=-Wl,--as-needed 
-Wl,--hash-style=gnu -Wl,--no-as-needed" "LEX=flex" "M4=m4" "MAKE=make" 
"RUNTEST=runtest" "RUNTESTFLAGS=" "SED=/bin/sed" "SHELL=/bin/sh" "YACC=bison 
-y" "`echo 'ADAFLAGS=' | sed -e s'/[^=][^=]*=$/XFOO=/'`" "ADA_CFLAGS=" 
"AR_FLAGS=rc" "`echo 'BOOT_ADAFLAGS=-gnatpg -gnata' | sed -e 
s'/[^=][^=]*=$/XFOO=/'`" "BOOT_CFLAGS=-O2 -g -march=core2 -pipe" 
"BOOT_LDFLAGS=" "CFLAGS=-O2 -g -march=core2 -pipe" "CXXFLAGS=-O2 -g 
-march=core2 -pipe" "LDFLAGS=-Wl,--as-needed -Wl,--hash-style=gnu 
-Wl,--no-as-needed" "LIBCFLAGS=-O2 -g -march=core2 -pipe" "LIBCXXFLAGS=-O2 -g 
-march=core2 -pipe -fno-implicit-templates" 
"STAGE1_CHECKING=--enable-checking=yes,types" "STAGE1_LANGUAGES=c" 
"GNATBIND=no" "GNATMAKE=no" 
"AR_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/ar" 
"AS_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/as" 
"CC_FOR_TARGET=/var/tmp/portage/sys-devel/gcc-4.5.0_pre/work/build/./gcc/xgcc
 -B/var/tmp/portage/sys-devel/gcc-4.5.0_pre/work/build/./gcc/" 
"CFLAGS_FOR_TARGET=-O2 -g -march=core2 -pipe" "CPPFLAGS_FOR_TARGET=" 
"CXX_FOR_TARGET=/var/tmp/portage/sys-devel/gcc-4.5.0_pre/work/build/./gcc/g++
 -B/var/tmp/portage/sys-devel/gcc-4.5.0_pre/work/build/./gcc/ -nostdinc++  
-L/var/tmp/portage/sys-devel/gcc-4.5.0_pre/work/build/x86_64-unknown-linux-gnu/libstdc++-v3/src
 
-L/var/tmp/portage/sys-devel/gcc-4.5.0_pre/work/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs"
 "CXXFLAGS_FOR_TARGET=-O2 -g -march=core2 -pipe -D_GNU_SOURCE" 
"DLLTOOL_FOR_TARGET=dlltool" 
"FLAGS_FOR_TARGET=-B/usr/x86_64-unknown-linux-gnu/bin/ 
-B/usr/x86_64-unknown-linux-gnu/lib/ -isystem 
/usr/x86_64-unknown-linux-gnu/include -isystem 
/usr/x86_64-unknown-linux-gnu/sys-include" "GCJ_FOR_TARGET=" 
"GFORTRAN_FOR_TARGET=" "LD_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/ld" 
"LIPO_FOR_TARGET=lipo" "LDFLAGS_FOR_TARGET=" "LIBCFLAGS_FOR_TARGET=-O2 -g 
-march=core2 -pipe" "LIBCXXFLAGS_FOR_TARGET=-O2 -g -march=core2 -pipe 
-D_GNU_SOURCE -fno-implicit-templates" 
"NM_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/nm" 
"OBJDUMP_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/objdump" 
"RANLIB_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/ranlib" 
"STRIP_FOR_TARGET=/usr/x86_64-unknown-linux-gnu/bin/strip" 
"WINDRES_FOR_TARGET=windres" "WINDMC_FOR_TARGET=windmc" 
"BUILD_CONFIG=bootstrap-debug" "`echo 'LANGUAGES=' | sed -e 
s'/[^=][^=]*=$/XFOO=/'`" "LEAN=:" "STAGE1_CFLAGS=-O" "STAGE1_TFLAGS=" 
"STAGE2_CFLAGS=-O2 -g -march=core2 -pipe -gtoggle" "STAGE2_TFLAGS=" 
"STAGE3_CFLAGS=-O2 -g -march=core2 -pipe" "STAGE3_TFLAGS=" "STAGE4_CFLAGS=-O2 
-g -march=core2 -pipe" "STAGE4_TFLAGS=" "STAGEprofile_CFLAGS=-O2 -g 
-march=core2 -pipe -gtoggle -fprofile-generate" "STAGEprofile_TFLAGS=" 
"STAGEfeedback_CFLAGS=-O2 -g -march=core2 -pipe -fprofile-use" 
"STAGEfeedback_TFLAGS=" "TFLAGS=" "CONFIG_SHELL=/bin/sh" "MAKEINFO=makeinfo 
--split-size=500 --split-size=500"  compare
make[2]: Entering directory 
`/v

Re: [lto] Merge from trunk rev 151592 (repost)

2009-09-11 Thread H.J. Lu
On Fri, Sep 11, 2009 at 1:08 PM, Diego Novillo wrote:
> Reposting.  Apparently gmail has been labelling messages from
> google.com as spam.  It should be fixed now.
>
>

LTO branch failed to bootstrap on Linux/ia32 due to:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41324

It has been fixed in mainline.

-- 
H.J.