Patchwork 19/n: trans-mem: compiler tree/gimple stuff

login
register
mail settings
Submitter Aldy Hernandez
Date Nov. 5, 2011, 7:42 a.m.
Message ID <4EB4E8DA.6090900@redhat.com>
Download mbox | patch
Permalink /patch/123827/
State New
Headers show

Comments

Aldy Hernandez - Nov. 5, 2011, 7:42 a.m.
On 11/04/11 08:26, Michael Matz wrote:
> Hi,
>
> On Thu, 3 Nov 2011, Aldy Hernandez wrote:
>
>> +/* GIMPLE_EH_ELSE<N_BODY, E_BODY>  must be the sole contents of
>> +   a GIMPLE_TRY_FINALLY node.  For all normal exits from the try block,
>> +   we N_BODY is run; for all exception exits from the try block,
>
> s/we //
Fixed

>
>> +++ gcc/calls.c	(.../branches/transactional-memory)	(revision 180773)
>> @@ -496,7 +496,60 @@ emit_call_1 (rtx funexp, tree fntree ATT
>>   static int
>>   special_function_p (const_tree fndecl, int flags)
>>   {
>> +	case BUILT_IN_TM_IRREVOCABLE:
>> +	case BUILT_IN_TM_GETTMCLONE_IRR:
>> +	case BUILT_IN_TM_MEMCPY:
>> +	case BUILT_IN_TM_MEMMOVE:
>> +        case BUILT_IN_TM_MEMSET:
>
> Whitespace.
Fixed

>
>> @@ -1751,6 +1787,8 @@ walk_gimple_stmt (gimple_stmt_iterator *
>>         gcc_assert (tree_ret == NULL);
>>
>>         /* Re-read stmt in case the callback changed it.  */
>> +      if (wi&&  wi->removed_stmt)
>> +	return NULL;
>>         stmt = gsi_stmt (*gsi);
>
> Comment belongs to the stmt assignment, not to the new if/return.
Fixed

>
>> @@ -3085,6 +3153,8 @@ get_call_expr_in (tree t)
>>       t = TREE_OPERAND (t, 1);
>>     if (TREE_CODE (t) == WITH_SIZE_EXPR)
>>       t = TREE_OPERAND (t, 0);
>> +  if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
>> +    t = TREE_OPERAND (t, 0);
>>     if (TREE_CODE (t) == CALL_EXPR)
>>       return t;
>
> The function get_call_expr_in is unused in our compiler (and you don't
> introduce a new use), so instead of amending it, just remove it.
Fixed in previous patch.

>> +    GF_CALL_NOINLINE		= 1<<  8,

> This flag is only used by the new accessors gimple_call_noinline_p and
> gimple_call_set_noinline_p.  The latter is used in
> trans-mem.c:ipa_tm_insert_gettmclone_call, but marked as hack.  The flag
> isn't tested anywhere (i.e. no calls to gimple_call_noinline_p).  Hence
> this whole thing is unused, presumably the hack was transformed into a
> real solution :)  So, don't add the flag or the accessors, and remove the
> call from trans-mem.c.

Excellent catch!  Thanks so much.  Fixed.

The attached patch has been bootstrapped and regtested on x86-64 Linux.

Committing to branch.
* trans-mem.c (ipa_tm_insert_gettmclone_call): Remove call to
	gimple_call_set_noinline_p.
	* gimple.h (enum gf_mask): Remove GF_CALL_NOINLINE.
	(gimple_call_noinline_p): Remove.
	(gimple_call_set_noinline_p): Remove.
	* gimple.c (walk_gimple_stmt): Move comment down.
	* calls.c (is_tm_builtin): Fix whitespace problem.
	* gimple.def (GIMPLE_EH_ELSE): Fix typo in comment.

Patch

Index: gimple.def
===================================================================
--- gimple.def	(revision 180974)
+++ gimple.def	(working copy)
@@ -161,7 +161,7 @@  DEFGSCODE(GIMPLE_EH_MUST_NOT_THROW, "gim
 
 /* GIMPLE_EH_ELSE <N_BODY, E_BODY> must be the sole contents of
    a GIMPLE_TRY_FINALLY node.  For all normal exits from the try block,
-   we N_BODY is run; for all exception exits from the try block,
+   N_BODY is run; for all exception exits from the try block,
    E_BODY is run.  */
 DEFGSCODE(GIMPLE_EH_ELSE, "gimple_eh_else", GSS_EH_ELSE)
 
Index: trans-mem.c
===================================================================
--- trans-mem.c	(revision 180974)
+++ trans-mem.c	(working copy)
@@ -4367,12 +4367,6 @@  ipa_tm_insert_gettmclone_call (struct cg
   if (gimple_call_nothrow_p (stmt))
     gimple_call_set_nothrow (stmt, true);
 
-  /* ??? This is a hack to prevent tree-eh.c inlineable_call_p from
-     deciding that the indirect call we have after this transformation
-     might be inlinable, and thus changing the value of can_throw_internal,
-     and thus requiring extra EH edges.  */
-  gimple_call_set_noinline_p (stmt);
-
   gimple_call_set_fn (stmt, callfn);
 
   /* Discarding OBJ_TYPE_REF above may produce incompatible LHS and RHS
Index: calls.c
===================================================================
--- calls.c	(revision 181004)
+++ calls.c	(working copy)
@@ -634,7 +634,7 @@  is_tm_builtin (const_tree fndecl)
 	case BUILT_IN_TM_GETTMCLONE_IRR:
 	case BUILT_IN_TM_MEMCPY:
 	case BUILT_IN_TM_MEMMOVE:
-        case BUILT_IN_TM_MEMSET:
+	case BUILT_IN_TM_MEMSET:
 	CASE_BUILT_IN_TM_STORE (1):
 	CASE_BUILT_IN_TM_STORE (2):
 	CASE_BUILT_IN_TM_STORE (4):
Index: gimple.c
===================================================================
--- gimple.c	(revision 181004)
+++ gimple.c	(working copy)
@@ -1788,9 +1788,10 @@  walk_gimple_stmt (gimple_stmt_iterator *
 	 a value to return.  */
       gcc_assert (tree_ret == NULL);
 
-      /* Re-read stmt in case the callback changed it.  */
       if (wi && wi->removed_stmt)
 	return NULL;
+
+      /* Re-read stmt in case the callback changed it.  */
       stmt = gsi_stmt (*gsi);
     }
 
Index: gimple.h
===================================================================
--- gimple.h	(revision 181004)
+++ gimple.h	(working copy)
@@ -105,7 +105,6 @@  enum gf_mask {
     GF_CALL_NOTHROW		= 1 << 5,
     GF_CALL_ALLOCA_FOR_VAR	= 1 << 6,
     GF_CALL_INTERNAL		= 1 << 7,
-    GF_CALL_NOINLINE		= 1 << 8,
     GF_OMP_PARALLEL_COMBINED	= 1 << 0,
 
     /* True on an GIMPLE_OMP_RETURN statement if the return does not require
@@ -2490,22 +2489,6 @@  gimple_call_alloca_for_var_p (gimple s)
   return (s->gsbase.subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
 }
 
-/* Return true if S is a noinline call.  */
-
-static inline bool
-gimple_call_noinline_p (gimple s)
-{
-  GIMPLE_CHECK (s, GIMPLE_CALL);
-  return (s->gsbase.subcode & GF_CALL_NOINLINE) != 0;
-}
-
-static inline void
-gimple_call_set_noinline_p (gimple s)
-{
-  GIMPLE_CHECK (s, GIMPLE_CALL);
-  s->gsbase.subcode |= GF_CALL_NOINLINE;
-}
-
 /* Copy all the GF_CALL_* flags from ORIG_CALL to DEST_CALL.  */
 
 static inline void