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: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

* 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: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

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).