public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/4382
@ 2003-01-24 21:26 rth
0 siblings, 0 replies; 3+ messages in thread
From: rth @ 2003-01-24 21:26 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR optimization/4382; it has been noted by GNATS.
From: rth@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:
Subject: optimization/4382
Date: 24 Jan 2003 21:17:19 -0000
CVSROOT: /cvs/gcc
Module name: gcc
Branch: gcc-3_3-branch
Changes by: rth@gcc.gnu.org 2003-01-24 21:17:19
Modified files:
gcc : ChangeLog tree-inline.c
Log message:
PR optimization/4382
* tree-inline.c (find_builtin_longjmp_call_1): New.
(find_builtin_longjmp_call): New.
(inlinable_function_p): Use it.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.16114.2.96&r2=1.16114.2.97
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-inline.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.38&r2=1.38.2.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: optimization/4382
@ 2003-01-24 21:36 Wolfgang Bangerth
0 siblings, 0 replies; 3+ messages in thread
From: Wolfgang Bangerth @ 2003-01-24 21:36 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR optimization/4382; it has been noted by GNATS.
From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: gcc-gnats@gcc.gnu.org
Cc:
Subject: Re: optimization/4382
Date: Fri, 24 Jan 2003 15:35:23 -0600 (CST)
---------- Forwarded message ----------
Date: Fri, 24 Jan 2003 13:20:47 -0800
From: Richard Henderson <rth@redhat.com>
To: Janis Johnson <janis187@us.ibm.com>
Cc: gcc@gcc.gnu.org, rodrigc@attbi.com, bangerth@ticam.utexas.edu
Subject: Re: patch that caused regression PR optimization/4382
On Thu, Dec 19, 2002 at 03:25:13PM -0800, Janis Johnson wrote:
> The regression reported in PR optimization/4382 showed up ...
This is _really_ borderline, but ok. We'll hack around
this problem like so.
If you call both __builtin_setjmp and __builtin_longjmp in
the same function, expect things to crash again, however.
All I can say is, Don't Do That.
r~
* tree-inline.c (find_builtin_longjmp_call_1): New.
(find_builtin_longjmp_call): New.
(inlinable_function_p): Use it.
Index: tree-inline.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-inline.c,v
retrieving revision 1.40
diff -c -p -d -r1.40 tree-inline.c
*** tree-inline.c 24 Dec 2002 08:30:33 -0000 1.40
--- tree-inline.c 24 Jan 2003 21:14:47 -0000
*************** static tree add_stmt_to_compound PARAMS
*** 125,130 ****
--- 125,132 ----
#endif /* INLINER_FOR_JAVA */
static tree find_alloca_call_1 PARAMS ((tree *, int *, void *));
static tree find_alloca_call PARAMS ((tree));
+ static tree find_builtin_longjmp_call_1 PARAMS ((tree *, int *, void *));
+ static tree find_builtin_longjmp_call PARAMS ((tree));
/* The approximate number of instructions per statement. This number
need not be particularly accurate; it is used only to make
*************** tree_inlinable_function_p (fn)
*** 873,879 ****
return inlinable_function_p (fn, NULL);
}
! /* if *TP is possibly call to alloca, return nonzero. */
static tree
find_alloca_call_1 (tp, walk_subtrees, data)
tree *tp;
--- 875,881 ----
return inlinable_function_p (fn, NULL);
}
! /* If *TP is possibly call to alloca, return nonzero. */
static tree
find_alloca_call_1 (tp, walk_subtrees, data)
tree *tp;
*************** find_alloca_call_1 (tp, walk_subtrees, d
*** 885,892 ****
return NULL;
}
! /* Return subexpression representing possible alloca call,
! if any. */
static tree
find_alloca_call (exp)
tree exp;
--- 887,893 ----
return NULL;
}
! /* Return subexpression representing possible alloca call, if any. */
static tree
find_alloca_call (exp)
tree exp;
*************** find_alloca_call (exp)
*** 894,899 ****
--- 895,926 ----
return walk_tree (&exp, find_alloca_call_1, NULL, NULL);
}
+ static tree
+ find_builtin_longjmp_call_1 (tp, walk_subtrees, data)
+ tree *tp;
+ int *walk_subtrees ATTRIBUTE_UNUSED;
+ void *data ATTRIBUTE_UNUSED;
+ {
+ tree exp = *tp, decl;
+
+ if (TREE_CODE (exp) == CALL_EXPR
+ && TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
+ && (decl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
+ TREE_CODE (decl) == FUNCTION_DECL)
+ && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
+ && DECL_FUNCTION_CODE (decl) == BUILT_IN_LONGJMP)
+ return decl;
+
+ return NULL;
+ }
+
+ static tree
+ find_builtin_longjmp_call (exp)
+ tree exp;
+ {
+ return walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+ }
+
/* Returns nonzero if FN is a function that can be inlined into the
inlining context ID_. If ID_ is NULL, check whether the function
can be inlined at all. */
*************** inlinable_function_p (fn, id)
*** 933,938 ****
--- 960,973 ----
allowance for extern inline functions, though. */
else if (! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn)
&& currfn_insns > MAX_INLINE_INSNS_SINGLE)
+ ;
+ /* We can't inline functions that call __builtin_longjmp at all.
+ The non-local goto machenery really requires the destination
+ be in a different function. If we allow the function calling
+ __builtin_longjmp to be inlined into the function calling
+ __builtin_setjmp, Things will Go Awry. */
+ /* ??? Need front end help to identify "regular" non-local goto. */
+ else if (find_builtin_longjmp_call (DECL_SAVED_TREE (fn)))
;
/* Refuse to inline alloca call unless user explicitly forced so as this may
change program's memory overhead drastically when the function using alloca
^ permalink raw reply [flat|nested] 3+ messages in thread
* optimization/4382
@ 2003-01-24 21:26 rth
0 siblings, 0 replies; 3+ messages in thread
From: rth @ 2003-01-24 21:26 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR optimization/4382; it has been noted by GNATS.
From: rth@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:
Subject: optimization/4382
Date: 24 Jan 2003 21:16:28 -0000
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: rth@gcc.gnu.org 2003-01-24 21:16:28
Modified files:
gcc : ChangeLog tree-inline.c
Log message:
PR optimization/4382
* tree-inline.c (find_builtin_longjmp_call_1): New.
(find_builtin_longjmp_call): New.
(inlinable_function_p): Use it.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=1.16470&r2=1.16471
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-inline.c.diff?cvsroot=gcc&r1=1.40&r2=1.41
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2003-01-24 21:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-24 21:26 optimization/4382 rth
-- strict thread matches above, loose matches on Subject: below --
2003-01-24 21:36 optimization/4382 Wolfgang Bangerth
2003-01-24 21:26 optimization/4382 rth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).