Return to BSD News archive
Path: sserve!manuel.anu.edu.au!munnari.oz.au!constellation!aardvark.ucs.uoknor.edu!ns1.nodak.edu!ogicse!flop.ENGR.ORST.EDU!gaia.ucs.orst.edu!umn.edu!math.fu-berlin.de!fauern!ira.uka.de!Germany.EU.net!tools!jk
Newsgroups: comp.os.386bsd.questions
Subject: Re: gcc - large arrays, out of vm - any way to avoid?
Message-ID: <JK.93Mar4211952@leo.tools.de>
From: jk@tools.de (Juergen Keil)
Date: 5 Mar 93 05:19:52 GMT
References: <9303022137.AA04169@pizzabox.demon.co.uk>
Organization: TooLs GmbH, Bonn, Germany
Article-I.D.: leo.JK.93Mar4211952
NNTP-Posting-Host: leo.tools.de
In-reply-to: gtoal@gtoal.com's message of Tue, 2 Mar 1993 21:37:15 +0000
Lines: 90
In article <9303022137.AA04169@pizzabox.demon.co.uk> gtoal@gtoal.com (Graham Toal) writes:
> char prog[] = {
> /* The 50915 elements of this array have been removed for brevity */
> };
I'm using the following patch to reduce memory requirements somewhat.
*** c-typeck.c.orig Wed Nov 4 17:51:56 1992
--- c-typeck.c Thu Nov 5 13:54:41 1992
***************
*** 4947,4954 ****
index value that will override it. */
for (current_index = min_index; tail != 0 || end_index;
current_index = fold (build (PLUS_EXPR, bound_type,
! current_index, one)))
{
register tree next1 = 0;
--- 4947,4957 ----
index value that will override it. */
for (current_index = min_index; tail != 0 || end_index;
+ #if 0
current_index = fold (build (PLUS_EXPR, bound_type,
! current_index, one))
! #endif
! )
{
register tree next1 = 0;
***************
*** 5081,5086 ****
--- 5084,5126 ----
else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
allsimple = 0;
+ #if 1
+ {
+ int insert_at_end = 0;
+
+ /* Now store NEXT1 in the list, I elements from the *end*.
+ Make the list longer if necessary. */
+ while (! tree_int_cst_lt (current_index, members_index))
+ {
+ members = tree_cons (NULL_TREE, NULL_TREE, members);
+ members_index = fold (build (PLUS_EXPR, bound_type,
+ members_index, one));
+ insert_at_end = 1;
+ }
+
+ if (insert_at_end)
+ {
+ TREE_VALUE (members) = next1;
+ current_index = members_index;
+ }
+ else
+ {
+ tree temp;
+ tree idx;
+
+ temp = members;
+ for (idx = fold (build (MINUS_EXPR, bound_type,
+ members_index, one));
+ tree_int_cst_lt (current_index, idx);
+ idx = fold (build (MINUS_EXPR, bound_type, idx, one)))
+ temp = TREE_CHAIN (temp);
+ TREE_VALUE (temp) = next1;
+
+ current_index = fold (build (PLUS_EXPR, bound_type,
+ current_index, one));
+ }
+ }
+ #else
/* Now store NEXT1 in the list, I elements from the *end*.
Make the list longer if necessary. */
while (! tree_int_cst_lt (current_index, members_index))
***************
*** 5102,5107 ****
--- 5142,5148 ----
temp = TREE_CHAIN (temp);
TREE_VALUE (temp) = next1;
}
+ #endif
}
}
if (TREE_CODE (type) == RECORD_TYPE)
--
Juergen Keil jk@tools.de ...!{uunet,mcsun}!unido!tools!jk