Re: [PATCH] PR60092, add C11 aligned_alloc handling

2014-04-28 Thread Richard Biener
On Thu, Feb 6, 2014 at 2:26 PM, Richard Biener rguent...@suse.de wrote:

 This adds a builtin for C11 aligned_alloc and support for it
 in the alias and alignment tracking machinery.

 Bootstrap and regtest in progress on x86_64-unknown-linux-gnu.

 Ok for trunk?

Ping.

 Thanks,
 Richard.

 2014-02-06  Richard Biener  rguent...@suse.de

 PR middle-end/60092
 * builtins.def (DEF_C11_BUILTIN): Add.
 (BUILT_IN_ALIGNED_ALLOC): Likewise.
 * coretypes.h (enum function_class): Add function_c11_misc.
 * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Handle
 BUILT_IN_ALIGNED_ALLOC like BUILT_IN_MALLOC.
 (call_may_clobber_ref_p_1): Likewise.
 * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
 (mark_all_reaching_defs_necessary_1): Likewise.
 (propagate_necessity): Likewise.
 (eliminate_unnecessary_stmts): Likewise.
 * tree-ssa-ccp.c (evaluate_stmt): Handle BUILT_IN_ALIGNED_ALLOC.

 ada/
 * gcc-interface/utils.c: Define flag_isoc11.

 lto/
 * lto-lang.c: Define flag_isoc11.

 * gcc.dg/tree-ssa/alias-32.c: New testcase.
 * gcc.dg/vect/pr60092.c: Likewise.

 Index: trunk/gcc/builtins.def
 ===
 *** trunk.orig/gcc/builtins.def 2014-02-06 12:46:01.085000256 +0100
 --- trunk/gcc/builtins.def  2014-02-06 13:13:06.499888349 +0100
 *** along with GCC; see the file COPYING3.
 *** 111,116 
 --- 111,123 
 DEF_BUILTIN (ENUM, __builtin_ NAME, BUILT_IN_NORMAL, TYPE, TYPE,  \
true, true, !flag_isoc99, ATTRS, targetm.libc_has_function 
 (function_c99_misc), true)

 + /* Like DEF_LIB_BUILTIN, except that the function is only a part of
 +the standard in C11 or above.  */
 + #undef DEF_C11_BUILTIN
 + #define DEF_C11_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
 +   DEF_BUILTIN (ENUM, __builtin_ NAME, BUILT_IN_NORMAL, TYPE, TYPE,  \
 +  true, true, !flag_isoc11, ATTRS, targetm.libc_has_function 
 (function_c11_misc), true)
 +
   /* Like DEF_C99_BUILTIN, but for complex math functions.  */
   #undef DEF_C99_COMPL_BUILTIN
   #define DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS)\
 *** DEF_C99_BUILTIN(BUILT_IN_ACOSH,
 *** 223,228 
 --- 230,236 
   DEF_C99_BUILTIN(BUILT_IN_ACOSHF, acoshf, BT_FN_FLOAT_FLOAT, 
 ATTR_MATHFN_FPROUNDING_ERRNO)
   DEF_C99_BUILTIN(BUILT_IN_ACOSHL, acoshl, 
 BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
   DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSL, acosl, 
 BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
 + DEF_C11_BUILTIN(BUILT_IN_ALIGNED_ALLOC, aligned_alloc, 
 BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LIST)
   DEF_LIB_BUILTIN(BUILT_IN_ASIN, asin, BT_FN_DOUBLE_DOUBLE, 
 ATTR_MATHFN_FPROUNDING_ERRNO)
   DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINF, asinf, BT_FN_FLOAT_FLOAT, 
 ATTR_MATHFN_FPROUNDING_ERRNO)
   DEF_C99_BUILTIN(BUILT_IN_ASINH, asinh, BT_FN_DOUBLE_DOUBLE, 
 ATTR_MATHFN_FPROUNDING)
 Index: trunk/gcc/coretypes.h
 ===
 *** trunk.orig/gcc/coretypes.h  2014-01-07 10:20:00.549453955 +0100
 --- trunk/gcc/coretypes.h   2014-02-06 13:10:03.472900950 +0100
 *** enum function_class {
 *** 194,200 
 function_c94,
 function_c99_misc,
 function_c99_math_complex,
 !   function_sincos
   };

   /* Memory model types for the __atomic* builtins.
 --- 194,201 
 function_c94,
 function_c99_misc,
 function_c99_math_complex,
 !   function_sincos,
 !   function_c11_misc
   };

   /* Memory model types for the __atomic* builtins.
 Index: trunk/gcc/tree-ssa-alias.c
 ===
 *** trunk.orig/gcc/tree-ssa-alias.c 2014-02-06 12:43:34.450010352 +0100
 --- trunk/gcc/tree-ssa-alias.c  2014-02-06 13:14:08.669884068 +0100
 *** ref_maybe_used_by_call_p_1 (gimple call,
 *** 1516,1521 
 --- 1516,1522 
 case BUILT_IN_FREE:
 case BUILT_IN_MALLOC:
 case BUILT_IN_POSIX_MEMALIGN:
 +   case BUILT_IN_ALIGNED_ALLOC:
 case BUILT_IN_CALLOC:
 case BUILT_IN_ALLOCA:
 case BUILT_IN_ALLOCA_WITH_ALIGN:
 *** call_may_clobber_ref_p_1 (gimple call, a
 *** 1826,1831 
 --- 1827,1833 
 /* Allocating memory does not have any side-effects apart from
being the definition point for the pointer.  */
 case BUILT_IN_MALLOC:
 +   case BUILT_IN_ALIGNED_ALLOC:
 case BUILT_IN_CALLOC:
 case BUILT_IN_STRDUP:
 case BUILT_IN_STRNDUP:
 Index: trunk/gcc/tree-ssa-dce.c
 ===
 *** trunk.orig/gcc/tree-ssa-dce.c   2014-01-07 10:20:02.520453869 +0100
 --- trunk/gcc/tree-ssa-dce.c2014-02-06 13:16:20.570874987 +0100
 *** 

Re: [PATCH] PR60092, add C11 aligned_alloc handling

2014-04-28 Thread Jakub Jelinek
On Mon, Apr 28, 2014 at 01:52:08PM +0200, Richard Biener wrote:
 On Thu, Feb 6, 2014 at 2:26 PM, Richard Biener rguent...@suse.de wrote:
 
  This adds a builtin for C11 aligned_alloc and support for it
  in the alias and alignment tracking machinery.
 
  Bootstrap and regtest in progress on x86_64-unknown-linux-gnu.
 
  Ok for trunk?
 
 Ping.

Ok, thanks.

  2014-02-06  Richard Biener  rguent...@suse.de
 
  PR middle-end/60092
  * builtins.def (DEF_C11_BUILTIN): Add.
  (BUILT_IN_ALIGNED_ALLOC): Likewise.
  * coretypes.h (enum function_class): Add function_c11_misc.
  * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Handle
  BUILT_IN_ALIGNED_ALLOC like BUILT_IN_MALLOC.
  (call_may_clobber_ref_p_1): Likewise.
  * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
  (mark_all_reaching_defs_necessary_1): Likewise.
  (propagate_necessity): Likewise.
  (eliminate_unnecessary_stmts): Likewise.
  * tree-ssa-ccp.c (evaluate_stmt): Handle BUILT_IN_ALIGNED_ALLOC.
 
  ada/
  * gcc-interface/utils.c: Define flag_isoc11.
 
  lto/
  * lto-lang.c: Define flag_isoc11.
 
  * gcc.dg/tree-ssa/alias-32.c: New testcase.
  * gcc.dg/vect/pr60092.c: Likewise.

Jakub


[PATCH] PR60092, add C11 aligned_alloc handling

2014-02-06 Thread Richard Biener

This adds a builtin for C11 aligned_alloc and support for it
in the alias and alignment tracking machinery.

Bootstrap and regtest in progress on x86_64-unknown-linux-gnu.

Ok for trunk?

Thanks,
Richard.

2014-02-06  Richard Biener  rguent...@suse.de

PR middle-end/60092
* builtins.def (DEF_C11_BUILTIN): Add.
(BUILT_IN_ALIGNED_ALLOC): Likewise.
* coretypes.h (enum function_class): Add function_c11_misc.
* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Handle
BUILT_IN_ALIGNED_ALLOC like BUILT_IN_MALLOC.
(call_may_clobber_ref_p_1): Likewise.
* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
(mark_all_reaching_defs_necessary_1): Likewise.
(propagate_necessity): Likewise.
(eliminate_unnecessary_stmts): Likewise.
* tree-ssa-ccp.c (evaluate_stmt): Handle BUILT_IN_ALIGNED_ALLOC.

ada/
* gcc-interface/utils.c: Define flag_isoc11.

lto/
* lto-lang.c: Define flag_isoc11.

* gcc.dg/tree-ssa/alias-32.c: New testcase.
* gcc.dg/vect/pr60092.c: Likewise.

Index: trunk/gcc/builtins.def
===
*** trunk.orig/gcc/builtins.def 2014-02-06 12:46:01.085000256 +0100
--- trunk/gcc/builtins.def  2014-02-06 13:13:06.499888349 +0100
*** along with GCC; see the file COPYING3.
*** 111,116 
--- 111,123 
DEF_BUILTIN (ENUM, __builtin_ NAME, BUILT_IN_NORMAL, TYPE, TYPE,  \
   true, true, !flag_isoc99, ATTRS, targetm.libc_has_function 
(function_c99_misc), true)
  
+ /* Like DEF_LIB_BUILTIN, except that the function is only a part of
+the standard in C11 or above.  */
+ #undef DEF_C11_BUILTIN
+ #define DEF_C11_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
+   DEF_BUILTIN (ENUM, __builtin_ NAME, BUILT_IN_NORMAL, TYPE, TYPE,  \
+  true, true, !flag_isoc11, ATTRS, targetm.libc_has_function 
(function_c11_misc), true)
+ 
  /* Like DEF_C99_BUILTIN, but for complex math functions.  */
  #undef DEF_C99_COMPL_BUILTIN
  #define DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS)\
*** DEF_C99_BUILTIN(BUILT_IN_ACOSH,
*** 223,228 
--- 230,236 
  DEF_C99_BUILTIN(BUILT_IN_ACOSHF, acoshf, BT_FN_FLOAT_FLOAT, 
ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_BUILTIN(BUILT_IN_ACOSHL, acoshl, 
BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSL, acosl, BT_FN_LONGDOUBLE_LONGDOUBLE, 
ATTR_MATHFN_FPROUNDING_ERRNO)
+ DEF_C11_BUILTIN(BUILT_IN_ALIGNED_ALLOC, aligned_alloc, 
BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LIST)
  DEF_LIB_BUILTIN(BUILT_IN_ASIN, asin, BT_FN_DOUBLE_DOUBLE, 
ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINF, asinf, BT_FN_FLOAT_FLOAT, 
ATTR_MATHFN_FPROUNDING_ERRNO)
  DEF_C99_BUILTIN(BUILT_IN_ASINH, asinh, BT_FN_DOUBLE_DOUBLE, 
ATTR_MATHFN_FPROUNDING)
Index: trunk/gcc/coretypes.h
===
*** trunk.orig/gcc/coretypes.h  2014-01-07 10:20:00.549453955 +0100
--- trunk/gcc/coretypes.h   2014-02-06 13:10:03.472900950 +0100
*** enum function_class {
*** 194,200 
function_c94,
function_c99_misc,
function_c99_math_complex,
!   function_sincos
  };
  
  /* Memory model types for the __atomic* builtins. 
--- 194,201 
function_c94,
function_c99_misc,
function_c99_math_complex,
!   function_sincos,
!   function_c11_misc
  };
  
  /* Memory model types for the __atomic* builtins. 
Index: trunk/gcc/tree-ssa-alias.c
===
*** trunk.orig/gcc/tree-ssa-alias.c 2014-02-06 12:43:34.450010352 +0100
--- trunk/gcc/tree-ssa-alias.c  2014-02-06 13:14:08.669884068 +0100
*** ref_maybe_used_by_call_p_1 (gimple call,
*** 1516,1521 
--- 1516,1522 
case BUILT_IN_FREE:
case BUILT_IN_MALLOC:
case BUILT_IN_POSIX_MEMALIGN:
+   case BUILT_IN_ALIGNED_ALLOC:
case BUILT_IN_CALLOC:
case BUILT_IN_ALLOCA:
case BUILT_IN_ALLOCA_WITH_ALIGN:
*** call_may_clobber_ref_p_1 (gimple call, a
*** 1826,1831 
--- 1827,1833 
/* Allocating memory does not have any side-effects apart from
   being the definition point for the pointer.  */
case BUILT_IN_MALLOC:
+   case BUILT_IN_ALIGNED_ALLOC:
case BUILT_IN_CALLOC:
case BUILT_IN_STRDUP:
case BUILT_IN_STRNDUP:
Index: trunk/gcc/tree-ssa-dce.c
===
*** trunk.orig/gcc/tree-ssa-dce.c   2014-01-07 10:20:02.520453869 +0100
--- trunk/gcc/tree-ssa-dce.c2014-02-06 13:16:20.570874987 +0100
*** mark_stmt_if_obviously_necessary (gimple
*** 231,236 
--- 231,237 
  switch (DECL_FUNCTION_CODE (callee))
{
case BUILT_IN_MALLOC:
+   case