PR tree-optimization/68157
* tree-ssa-reassoc.c (attempt_builtin_powi): Set uid of
pow_stmt or mul_stmt from stmt's uid.
(reassociate_bb): Set uid of mul_stmt from stmt's uid.
* g++.dg/opt/pr68157.C: New test.
From-SVN: r230530
2015-11-18 Arnaud Charlet <charlet@adacore.com>
* switch-c.adb (Scan_Front_End_Switches): Add a check requiring
-gnatc with -gnateg.
2015-11-18 Ed Schonberg <schonberg@adacore.com>
* sem_ch7.adb (Uninstall_Declarations): Before swapping private
and full views, ensure that the potential use visbility of the
two views is consistent.
2015-11-18 Doug Rupp <rupp@adacore.com>
* s-parame-vxworks.adb: Increase default stack size for targets
using stack limit checking.
2015-11-18 Jose Ruiz <ruiz@adacore.com>
* a-interr.adb, a-interr.ads (Ada.Interrupts.Get_CPU): Add this
function that was added to Ada 2005 returning the processor where
interrupt handlers execute.
2015-11-18 Tristan Gingold <gingold@adacore.com>
* exp_ch9.adb (Is_Pure_Barrier): Handle expanded component
declaration of a protected definition.
From-SVN: r230529
2015-11-18 Arnaud Charlet <charlet@adacore.com>
* interfac.ads (Unsigned_24): New type.
* sem_ch13.adb (Validate_Unchecked_Conversion): Disable error on
unconstrained arrays in Relaxed_RM_Semantics mode.
2015-11-18 Vincent Celier <celier@adacore.com>
* bcheck.adb (Check_Consistent_Dynamic_Elaboration_Checking): No
warning is withed unit is the interface of a Stand-Alone Library.
From-SVN: r230527
2015-11-18 Thomas Quinot <quinot@adacore.com>
* s-os_lib.ads, s-os_lib.adb(Normalize_Pathname): Support the case of
an unresolved Directory argument, by recursively resolving it
against the current dir.
2015-11-18 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Process_Formals): A function declaration that
returns a class-wide type must have freeing deferred, so that it
is not frozen before the class-wide type and its root type are
frozen. This is significant when there may be a limited view of
the class_wide type in another package.
From-SVN: r230526
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* einfo.adb (Has_Non_Null_Refinement): Rename to
Has_Non_Null_Visible_Refinement.
(Has_Null_Refinement): Rename to Has_Null_Visible_Refinement.
* einfo.ads Update the documentation of
attribute Has_Non_Null_Refinement and attribute Has_Null_Refinement.
(Has_Non_Null_Refinement): Rename to Has_Non_Null_Visible_Refinement
and update occurrences in entities.
(Has_Null_Refinement): Rename to Has_Null_Visible_Refinement and update
occurrences in entities.
* sem_prag.adb (Check_In_Out_States): Update the calls to
Has_[Non_]Null_Refinement.
(Check_Input_States): Update the
calls to Has_[Non_]Null_Refinement.
(Check_Output_States): Update the calls to Has_[Non_]Null_Refinement.
(Check_Proof_In_States): Update the calls to Has_[Non_]Null_Refinement.
(Collect_Global_Item): Update the calls to Has_[Non_]Null_Refinement.
(Is_Null_Refined_State): Update the calls to Has_[Non_]Null_Refinement.
(Match_Item): Update the calls to Has_[Non_]Null_Refinement.
* sem_util.adb (Has_Non_Null_Refinement): New routine.
(Has_Null_Refinement): New routine.
* sem_util.ads (Has_Non_Null_Refinement): New routine.
(Has_Null_Refinement): New routine.
2015-11-18 Gary Dismukes <dismukes@adacore.com>
* exp_util.adb: Minor reformatting and typo fixes.
From-SVN: r230525
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch4.adb: Minor reformatting.
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* exp_util.adb (Expand_Subtype_From_Expr): Add new formal
parameter Related_Id and propagate it to Make_Subtype_From_Expr.
(Make_Subtype_From_Expr): Add new formal parameter
Related_Id. Create external entities when requested by the caller.
* exp_util.ads (Expand_Subtype_From_Expr): Add new formal
parameter Related_Id. Update the comment on usage.
(Make_Subtype_From_Expr): Add new formal parameter
Related_Id. Update the comment on usage.
* sem_ch3.adb (Analyze_Object_Declaration): Add local variable
Related_Id. Generate an external constrained subtype when the
object is a public symbol.
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_prag.adb (Analyze_Pragma): Update the grammars of pragmas
Abstract_State, Depends, Global, Initializes, Refined_Depends,
Refined_Global and Refined_State.
From-SVN: r230524
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_util.adb (Has_Full_Default_Initialization):
Perform the test for the presence of pragma
Default_Initial_Condition prior to the specialized type
checks. Add a missing case where the lack of a pragma argument
yields full default initialization.
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_res.adb (Resolve_Entity_Name): Do not check
for elaboration issues when a variable appears as the name of
an object renaming declaration as this constitutes an aliasing,
not a read.
2015-11-18 Ed Schonberg <schonberg@adacore.com>
* checks.adb (Overlap_Check): An actual that is an aggregate
cannot overlap with another actual, and no check should be
generated for it.
* targparm.ads: Fix typos.
2015-11-18 Pascal Obry <obry@adacore.com>
* adaint.c: Routine __gnat_killprocesstree only implemented on
Linux and Windows.
2015-11-18 Pascal Obry <obry@adacore.com>
* g-ctrl_c.adb: Minor style fixes.
From-SVN: r230523
2015-11-18 Pascal Obry <obry@adacore.com>
* adaint.c, s-os_lib.adb, s-os_lib.ads (Kill_Process_Tree): New.
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_util.adb (Check_Nonvolatile_Function_Profile): Place the error
message concerning the return type on the result definition.
(Is_Volatile_Function): A function with a parameter of a protected
type is a protected function if it is defined within a protected
definition.
2015-11-18 Ed Schonberg <schonberg@adacore.com>
* sem_ch4.adb (Try_Container_Indexing): When building the
parameter list for the function call on indexing functions,
preserve overloading of the parameters, which may themselves be
generalized indexing operations.
From-SVN: r230522
* tree-ssa-uninit.c (convert_control_dep_chain_into_preds):
Fix GNU coding style.
(find_def_preds): Use auto_vec.
(destroy_predicate_vecs): Change signature of the function.
(prune_uninit_phi_opnds_in_unrealizable_paths): Use the
new signature.
(simplify_preds_4): Use destroy_predicate_vecs instread of
just releasing preds vector.
(normalize_preds): Likewise.
(is_use_properly_guarded): Use new signature of
destroy_predicate_vecs.
(find_uninit_use): Likewise.
From-SVN: r230519
2015-11-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/67790
* tree-vect-loop.c (vect_is_simple_reduction_1): Remove
IL rewrite for MINUS_EXPR reductions, rename back to ...
(vect_is_simple_reduction): ... this, removing the wrapper.
(vect_force_simple_reduction): Adjust.
(vectorizable_reduction): Adjust reduc_index for MINUS_EXPR
reductions and make use if reduc_index in all places. For
the final reduction of MINUS_EXPR use PLUS_EXPR.
* gcc.dg/vect/pr67790.c: New testcase.
From-SVN: r230518
POWERPC64_TOC_POINTER_ALIGNMENT
A default of -z relro (as on Fedora) defeats the deliberate
mis-alignment of .got in the testcase.
* configure.ac (POWERPC64_TOC_POINTER_ALIGNMENT): Pass -z norelro
to ld.
* configure: Regenerate.
From-SVN: r230509
2015-11-17 Tom de Vries <tom@codesourcery.com>
* tree-scalar-evolution.c (scev_const_prop): Dump details if replacing
uses of ssa_name with constant.
From-SVN: r230504
2015-11-17 Tom de Vries <tom@codesourcery.com>
* tree-ssa-ccp.c (do_ssa_ccp): Clear LOOP_CLOSED_SSA in loops state if
something changed.
From-SVN: r230503
* regrename.c (regrename_find_superclass): New function, code moved
from ...
(rename_chains): ... here. Call it.
* regrename.h (regrename_find_superclass): Declare.
From-SVN: r230501
PR target/66785
* regrename.c (record_operand_use): Keep track of failed operands
and stop appending if we see any.
* regrename.h (struct operand_rr_info): Add a failed field and shrink
n_chains to short.
From-SVN: r230499
gcc/c/ChangeLog:
* c-parser.c (set_c_expr_source_range): Bulletproof both
overloaded implementations against NULL expr->value.
(c_parser_braced_init): Set src_range for "ret" to a sane pair of
values.
(c_parser_unary_expression): Likewise when handling addresses of
labels.
(c_parser_postfix_expression): Likewise for statement expressions,
for __FUNCTION__, __PRETTY_FUNCTION_ and __func__ keywords, for
__builtin_va_arg, and for __builtin_offset_of.
(c_parser_postfix_expression_after_paren_type): Initialize expr's
src_range using the range of the braced initializer.
(c_parser_transaction_expression): Set src_range for "ret" to a
sane pair of values.
gcc/testsuite/ChangeLog:
* gcc.dg/plugin/diagnostic-test-expressions-1.c (vector): New
macro.
(test_braced_init): New function.
(test_statement_expression): New function.
(test_address_of_label): New function.
(test_transaction_expressions): New function.
(test_keywords): New function.
(test_builtin_va_arg): New function.
(test_builtin_offsetof): New function.
* lib/multiline.exp (_build_multiline_regex): Escape braces.
From-SVN: r230497
After the previous patches it's no longer necessary for
TARGET_BUILTIN_VECTORIZED_FUNCTION to return functions that
map to the vector optab of the original operation. We'll use
a vector form of the internal function instead.
Tested on powerpc64-linux-gnu.
gcc/
* config/rs6000/rs6000.c (rs6000_builtin_vectorized_function): Remove
entries that map directly to optabs.
From-SVN: r230494
After the previous patches it's no longer necessary for
TARGET_BUILTIN_VECTORIZED_FUNCTION to return functions that
map to the vector optab of the original operation. We'll use
a vector form of the internal function instead.
Tested on x86_64-linux-gnu.
gcc/
* config/i386/i386.c (ix86_builtin_vectorized_function): Remove
entries that map directly to optabs.
From-SVN: r230493
This patch tries to vectorize built-in and internal functions as
internal functions first, falling back on the current built-in
target hooks otherwise.
This means that we'll automatically pick up vector versions of optabs
without the target having to implement any special hooks. E.g. we'll
use V4SF sqrt if the target defines a "sqrtv4sf2" optab. As well as
being simpler, it means that the target-independent code has more
idea what the vectorized function does.
Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnu and
powerpc64-linux-gnu.
gcc/
* internal-fn.h (direct_internal_fn_info): Add vectorizable flag.
* internal-fn.c (direct_internal_fn_array): Update accordingly.
* tree-vectorizer.h (vectorizable_function): Delete.
* tree-vect-stmts.c: Include internal-fn.h.
(vectorizable_internal_function): New function.
(vectorizable_function): Inline into...
(vectorizable_call): ...here. Explicitly reject calls that read
from or write to memory. Try using an internal function before
falling back on the old vectorizable_function behavior.
From-SVN: r230492
This patch replaces the fndecl argument to builtin_vectorized_function
with a combined_fn and gets the vectoriser to call it for internal
functions too. The patch also moves vectorisation of machine-specific
built-ins to a new hook, builtin_md_vectorized_function.
Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnu and
powerpc64-linux-gnu.
gcc/
* target.def (builtin_vectorized_function): Take a combined_fn (in
the form of an unsigned int) rather than a function decl.
(builtin_md_vectorized_function): New.
* targhooks.h (default_builtin_vectorized_function): Replace the
fndecl argument with an unsigned int.
(default_builtin_md_vectorized_function): Declare.
* targhooks.c (default_builtin_vectorized_function): Replace the
fndecl argument with an unsigned int.
(default_builtin_md_vectorized_function): New function.
* doc/tm.texi.in (TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION):
New hook.
* doc/tm.texi: Regenerate.
* tree-vect-stmts.c (vectorizable_function): Update call to
builtin_vectorized_function, also passing internal functions.
Call builtin_md_vectorized_function for target-specific builtins.
* config/aarch64/aarch64-protos.h
(aarch64_builtin_vectorized_function): Replace fndecl argument
with an unsigned int.
* config/aarch64/aarch64-builtins.c: Include case-cfn-macros.h.
(aarch64_builtin_vectorized_function): Update after above changes.
Use CASE_CFN_*.
* config/arm/arm-protos.h (arm_builtin_vectorized_function): Replace
fndecl argument with an unsigned int.
* config/arm/arm-builtins.c: Include case-cfn-macros.h
(arm_builtin_vectorized_function): Update after above changes.
Use CASE_CFN_*.
* config/i386/i386.c: Include case-cfn-macros.h
(ix86_veclib_handler): Take a combined_fn rather than a
built_in_function.
(ix86_veclibabi_svml, ix86_veclibabi_acml): Likewise. Use
mathfn_built_in rather than calling builtin_decl_implicit directly.
(ix86_builtin_vectorized_function) Update after above changes.
Use CASE_CFN_*.
* config/rs6000/rs6000.c: Include case-cfn-macros.h
(rs6000_builtin_vectorized_libmass): Replace fndecl argument
with a combined_fn. Use CASE_CFN_*. Use mathfn_built_in rather
than calling builtin_decl_implicit directly.
(rs6000_builtin_vectorized_function): Update after above changes.
Use CASE_CFN_*. Move BUILT_IN_MD to...
(rs6000_builtin_md_vectorized_function): ...this new function.
(TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION): Define.
From-SVN: r230491
In practice all targets that can vectorise sqrt define the appropriate
sqrt<mode>2 optab. The only case where this isn't immediately obvious
is the libmass support in rs6000.c, but Mike Meissner said that it shouldn't
be exercised for sqrt.
This patch therefore uses the internal function interface instead of
going via the target hook.
Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnueabi and
powerpc64-linux-gnu.
gcc/
* tree-vect-patterns.c: Include internal-fn.h.
(vect_recog_pow_pattern): Use IFN_SQRT instead of BUILT_IN_SQRT*.
From-SVN: r230490
Nothing uses these macros and removing them makes it more likely
that future code will use CASE_CFN_* instead.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* tree.h (BUILTIN_EXP10_P, BUILTIN_EXPONENT_P, BUILTIN_SQRT_P)
(BUILTIN_CBRT_P, BUILTIN_ROOT_P): Delete.
From-SVN: r230489
For -fmath-errno, builtins.c currently expands calls to sqrt to:
y = sqrt_optab (x);
if (y != y)
[ sqrt (x); or errno = EDOM; ]
The drawbacks of this are:
- the call to sqrt is protected by the result of the optab rather
than the input. It would be better to check __builtin_isless (x, 0),
like tree-call-cdce.c does.
- the branch isn't exposed at the gimple level and so gets little
high-level optimisation.
- we do this for log too, but for log a zero input produces
-inf rather than a NaN, and sets errno to ERANGE rather than EDOM.
This patch moves the code to tree-call-cdce.c instead, with the optab
operation being represented as an internal function. This means that
we can use the existing argument-based range checks rather than the
result-based checks and that we get more gimple optimisation of
the branch.
Previously the pass was only enabled by default at -O2 or above,
but the old builtins.c code was enabled at -O. The patch therefore
enables the pass at -O as well.
The previous patch to cfgexpand.c handled cases where functions
don't (or are assumed not to) set errno, so this patch makes
the builtins.c code dead.
Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnueabi
and visium-elf (for the EDOM stuff).
gcc/
* builtins.c (expand_errno_check, expand_builtin_mathfn)
(expand_builtin_mathfn_2): Delete.
(expand_builtin): Remove handling of functions with
internal function equivalents.
* internal-fn.def (SET_EDOM): New internal function.
* internal-fn.h (set_edom_supported_p): Declare.
* internal-fn.c (expand_SET_EDOM): New function.
(set_edom_supported_p): Likewise.
* tree-call-cdce.c: Include builtins.h and internal-fn.h.
Rewrite comment at head of file.
(is_call_dce_candidate): Rename to...
(can_test_argument_range): ...this. Don't check gimple_call_lhs
or gimple_call_builtin_p here.
(edom_only_function): New function.
(shrink_wrap_one_built_in_call_with_conds): New function, split out
from...
(shrink_wrap_one_built_in_call): ...here.
(can_use_internal_fn, use_internal_fn): New functions.
(shrink_wrap_conditional_dead_built_in_calls): Call use_internal_fn
for calls that have an lhs.
(pass_call_cdce::gate): Remove optimize_function_for_speed_p check.
(pass_call_cdce::execute): Skip blocks that are optimized for size.
Check gimple_call_builtin_p here. Use can_use_internal_fn for
calls with an lhs.
* opts.c (default_options_table): Enable -ftree-builtin-call-cdce
at -O and above.
From-SVN: r230488
This patch short-circuits the builtins.c expansion code for a particular
gimple call if:
- the function has an associated internal function
- the target implements that internal function
- the call has no side effects
This allows a later patch to remove the builtins.c code, once calls with
side effects have been handled.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* builtins.h (called_as_built_in): Declare.
* builtins.c (called_as_built_in): Make external.
* internal-fn.h (expand_internal_call): Define a variant that
specifies the internal function explicitly.
* internal-fn.c (expand_load_lanes_optab_fn)
(expand_store_lanes_optab_fn, expand_ANNOTATE, expand_GOMP_SIMD_LANE)
(expand_GOMP_SIMD_VF, expand_GOMP_SIMD_LAST_LANE)
(expand_GOMP_SIMD_ORDERED_START, expand_GOMP_SIMD_ORDERED_END)
(expand_UBSAN_NULL, expand_UBSAN_BOUNDS, expand_UBSAN_VPTR)
(expand_UBSAN_OBJECT_SIZE, expand_ASAN_CHECK, expand_TSAN_FUNC_EXIT)
(expand_UBSAN_CHECK_ADD, expand_UBSAN_CHECK_SUB)
(expand_UBSAN_CHECK_MUL, expand_ADD_OVERFLOW, expand_SUB_OVERFLOW)
(expand_MUL_OVERFLOW, expand_LOOP_VECTORIZED)
(expand_mask_load_optab_fn, expand_mask_store_optab_fn)
(expand_ABNORMAL_DISPATCHER, expand_BUILTIN_EXPECT, expand_VA_ARG)
(expand_UNIQUE, expand_GOACC_DIM_SIZE, expand_GOACC_DIM_POS)
(expand_GOACC_LOOP, expand_GOACC_REDUCTION, expand_direct_optab_fn)
(expand_unary_optab_fn, expand_binary_optab_fn): Add an internal_fn
argument.
(internal_fn_expanders): Update prototype.
(expand_internal_call): Define a variant that specifies the
internal function explicitly. Use it to implement the previous
interface.
* cfgexpand.c (expand_call_stmt): Try to expand calls to built-in
functions as calls to internal functions.
From-SVN: r230487
This patch autogenerates the operator lists for maths functions
like SQRT, adding an additional entry for internal functions.
E.g.:
(define_operator_list SQRT
BUILT_IN_SQRTF
BUILT_IN_SQRT
BUILT_IN_SQRTL
IFN_SQRT)
and:
(define_operator_list CABS
BUILT_IN_CABSF
BUILT_IN_CABS
BUILT_IN_CABSL
null)
(since there's no internal function for CABS).
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* Makefile.in (MOSTLYCLEANFILES): Add cfn-operators.pd.
(generated_files): Likewise.
(s-cfn-operators, cfn-operators.pd): New rules.
(s-match): Depend on cfn-operators.pd.
* gencfn-macros.c: Expand comment to describe -o behavior.
(print_define_operator_list): New function.
(main): Accept -o. Call print_define_operator_list.
* genmatch.c (main): Add the current directory to the include path.
* match.pd (DEFINE_MATH_FN): Delete. Include cfn-operators.pd
instead.
From-SVN: r230486
This patch adds a null identifier that can never match anything and
can never be generated. It is only valid in operator lists and fors.
Later patches will add uses of it.
The idea is to allow operator lists for maths functions that have
four entries:
- float built-in
- double built-in
- long double built-in
- internal function
Not all maths functions have an associated internal function,
and for those the final operator will be "null". Any simplification
that tries to use a null substitution will be skipped.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* doc/match-and-simplify.texi: Document the "null" identifier.
* genmatch.c (id_base::NULL_ID): New kind.
(null_id): New variable.
(get_operator): Add a parameter that says whether null identifiers
are allowed.
(contains_id): New function.
(lower_for): Skip substitutions that would have a null_id in
either the match or the result.
(parser::parse_for): Allow the null identifier to be used.
(parser::parse_operator_list): Likewise.
(main): Initialize null_id.
From-SVN: r230485
This patch makes genmatch match calls based on combined_fn rather
than built_in_function and extends the matching to internal functions.
It also uses fold_const_call to fold the calls to a constant, rather
than going through fold_builtin_n.
In order to slightly simplify the code and remove potential
ambiguity, the patch enforces lower case for tree codes
(foo->FOO_EXPR), caps for functions (no built_in_hypot->BUILT_IN_HYPOT)
and requires an exact match for user-defined identifiers. The first two
were already met in practice but there were a couple of cases where
operator lists were defined in one case and used in another.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* match.pd: Use HYPOT and COS rather than hypot and cos.
Use CASE_CFN_* macros. Guard log/exp folds with
SCALAR_FLOAT_TYPE_P.
* genmatch.c (internal_fn): New enum.
(fn_id::fn): Change to an unsigned int.
(fn_id::fn_id): Accept internal_fn too.
(add_builtin): Rename to...
(add_function): ...this and turn into a template.
(get_operator): Only try one variation if the original name fails.
Only add _EXPR if the original name was all lower case.
Try converting internal and built-in function names to their
CFN equivalents.
(expr::gen_transform): Use maybe_build_call_expr_loc for generic.
(dt_simplify::gen_1): Likewise.
(dt_node::gen_kids_1): Use gimple_call_combined_fn for gimple
and get_call_combined_fn for generic.
(dt_simplify::gen): Use combined_fn as the type of fn_ids.
(decision_tree::gen): Likewise.
(main): Use lower case in the strings for {VIEW_,}CONVERT[012].
Use add_function rather than add_builtin. Register internal
functions too.
* generic-match-head.c: Include case-cfn-macros.h.
* gimple-fold.c (replace_stmt_with_simplification): Use
gimple_call_combined_fn to test whether we can keep an
existing call.
* gimple-match.h (code_helper): Replace built_in_function
with combined_fn.
* gimple-match-head.c: Include fold-const-call.h, internal-fn.h
and case-fn-macros.h.
(gimple_resimplify1): Use fold_const_call.
(gimple_resimplify2, gimple_resimplify3): Likewise.
(build_call_internal, build_call): New functions.
(maybe_push_res_to_seq): Use them.
(gimple_simplify): Use fold_const_call. Set *rcode to a combined_fn
rather than a built-in function.
* tree.h (build_call_expr_internal_loc): Declare.
(maybe_build_call_expr_loc): Likewise.
* tree.c (build_call_expr_internal_loc_array): New function.
(maybe_build_call_expr_loc): Likewise.
From-SVN: r230484
This patch extends mathfn_built_in to handle combined_fn, but keeps the
old built_in_function interface around since it's a common case.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* builtins.h (mathfn_built_in): Add a variant that takes
a combined_fn.
* builtins.c: Include case-cfn-macros.h.
(CASE_MATHFN): Use CASE_CFN_*.
(CASE_MATHFN_REENT): Use CFN_ codes.
(mathfn_built_in_2, mathfn_built_in_1): Replace built_in_function
argument with a combined_fn.
(mathfn_built_in): Add a variant that takes a combined_fn.
(expand_builtin_int_roundingfn_2): Update callers accordingly.
(fold_builtin_sincos, fold_builtin_classify): Likewise.
From-SVN: r230483
Another patch to extend uses of built_in_function to combined_fn,
this time in tree-vect-patterns.c. The old code didn't handle the
long double pow variants, but I think that's because noone had a target
that would benefit rather than because the code would mishandle them.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* tree-vect-patterns.c: Include case-cfn-macros.h.
(vect_recog_pow_pattern): Use combined_fn instead of built-in codes.
From-SVN: r230482
Another patch to extend uses of built_in_function to combined_fn, this time
in tree-ssa-math-opts.c.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* tree-ssa-math-opts.c: Include case-cfn-macros.h.
(execute_cse_sincos_1): Use combined_fn instead of built-in codes.
(pass_cse_sincos::execute): Likewise.
From-SVN: r230481
Another patch to extend uses of built_in_function to combined_fn, this time
in tree-ssa-reassoc.c.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* tree-ssa-reassoc.c: Include case-cfn-macros.h.
(stmt_is_power_of_op): Use combined_fn instead of built-in codes.
(decrement_power, acceptable_pow_call): Likewise.
(attempt_builtin_copysign): Likewise.
From-SVN: r230480
Another patch to extend uses of built_in_function to combined_fn, this time
in tree-vrp.c.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* tree-vrp.c: Include case-cfn-macros.h.
(extract_range_basic): Switch on combined_fn rather than handling
built-in functions and internal functions separately.
From-SVN: r230479
This patch generalises fold-const.[hc] routines to use combined_fn
instead of built_in_function. It also updates gimple-ssa-backprop,c
since the update is simple and it avoids churn on the call to
negate_mathfn_p.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* fold-const.h (negate_mathfn_p): Take a combined_fn rather
than a built_in_function.
(tree_call_nonnegative_warnv_p): Take a combined_fn rather than
a function decl.
(integer_valued_real_call_p): Likewise.
* fold-const.c: Include case-cfn-macros.h
(negate_mathfn_p): Take a combined_fn rather than a built_in_function.
(negate_expr_p): Update accordingly.
(tree_call_nonnegative_warnv_p): Take a combined_fn rather than
a function decl.
(integer_valued_real_call_p): Likewise.
(tree_invalid_nonnegative_warnv_p): Update accordingly.
(integer_valued_real_p): Likewise.
* gimple-fold.c (gimple_call_nonnegative_warnv_p): Update call
to tree_call_nonnegative_warnv_p.
(gimple_call_integer_valued_real_p): Likewise
integer_valued_real_call_p.
* gimple-ssa-backprop.c: Include case-cfn-macros.h.
(backprop::process_builtin_call_use): Extend to combined_fn.
(strip_sign_op_1): Likewise.
(backprop::process_use): Don't check for built-in calls here.
(backprop::execute): Likewise.
(backprop::optimize_builtin_call): Update call to negate_mathfn_p.
From-SVN: r230478
This patch extends fold_const_call so that it can handle internal
as well as built-in functions.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* fold-const-call.h (fold_const_call): Replace built_in_function
arguments with combined_fn arguments.
* fold-const-call.c: Include case-cfn-macros.h.
(fold_const_call_ss, fold_const_call_cs, fold_const_call_sc)
(fold_const_call_cc, fold_const_call_sss, fold_const_call_ccc)
(fold_const_call_ssss, fold_const_call_1, fold_const_call): Replace
built_in_function arguments with combined_fn arguments.
* builtins.c (fold_builtin_sincos, fold_builtin_1, fold_builtin_2)
(fold_builtin_3): Update calls to fold_const_call.
From-SVN: r230477
This patch automatically generates case macros such as:
CASE_CFN_SQRT
for each {F,,L} floating-point built-in function and each {,L,LL,IMAX}
integer built-in function. The macros match the same built-in
functions as CASE_FLT_FN and CASE_INT_FN but in addition include
the associated internal function, if any.
The idea is to make sure that users of combined_fn don't need to know
which built-in functions have internal-function equivalents. If we add
a new function to internal-fn.def, all combined_fn users should pick it
up automatically.
The generator wants to use "hash_set <nofree_string_hash>",
so the patch follows hash_map in using the types given by the
traits as the key. This is a no-op for current users of hash_set.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* Makefile.in (HASH_TABLE_H): Add GGC_H.
(MOSTLYCLEANFILES, generated_files): Add case-fn-macros.h.
(s-case-cfn-macros, case-cfn-macros.h, build/gencfn-macros.o)
(build/gencfn-macros$(build_exeext): New rules.
(genprogerr): Add cfn-macros.
* hash-set.h (hash_set): Use the traits value_type as the key.
* gencfn-macros.c: New file.
From-SVN: r230476
This patch adds internal function equivalents of all the INT_FN functions.
Unlike the math functions, these functions never set errno and the internal
functions should be exactly equivalent to the built-in ones. The reason
for defining the internal functions is so that we can extend the
functionality to other modes, in particular vector modes.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* internal-fn.def (DEF_INTERNAL_INT_FN): New macro.
(CLRSB, CLZ, CTZ, FFS, PARITY, POPCOUNT): New functions.
* builtins.c (associated_internal_fn): Handle them.
From-SVN: r230475