/* This file contains the definitions of the cgraph_inline_failed_t
   enums used in GCC.

   Copyright (C) 2008-2013 Free Software Foundation, Inc.
   Contributed by Doug Kwan <dougkwan@google.com>

This file is part of GCC.

GCC is free software you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* The format of this file is
   DEFCIFCODE(code, string).

   Where symbol is the enumeration name without the ``''.
   The argument STRING is a explain the failure.  Except for OK,
   which is a NULL pointer.  */

/* Inlining successful.  This must be the first code.  */
DEFCIFCODE(OK , NULL)

/* Inlining failed for an unspecified reason.  */
DEFCIFCODE(UNSPECIFIED , "")

/* Function has not be considered for inlining.  This is the code for
   functions that have not been rejected for inlining yet.  */
DEFCIFCODE(FUNCTION_NOT_CONSIDERED, N_("function not considered for inlining"))

/* Inlining failed owing to unavailable function body.  */
DEFCIFCODE(BODY_NOT_AVAILABLE, N_("function body not available"))

/* Extern inline function that has been redefined.  */
DEFCIFCODE(REDEFINED_EXTERN_INLINE,
	   N_("redefined extern inline functions are not considered for "
	      "inlining"))

/* Function is not inlinable.  */
DEFCIFCODE(FUNCTION_NOT_INLINABLE, N_("function not inlinable"))

/* Function is not overwritable.  */
DEFCIFCODE(OVERWRITABLE, N_("function body can be overwritten at link time"))

/* Function is not an inlining candidate.  */
DEFCIFCODE(FUNCTION_NOT_INLINE_CANDIDATE, N_("function not inline candidate"))

/* Inlining failed because of various limit parameters.  */
DEFCIFCODE(LARGE_FUNCTION_GROWTH_LIMIT,
	   N_("--param large-function-growth limit reached"))
DEFCIFCODE(LARGE_STACK_FRAME_GROWTH_LIMIT,
	   N_("--param large-stack-frame-growth limit reached"))
DEFCIFCODE(MAX_INLINE_INSNS_SINGLE_LIMIT,
	   N_("--param max-inline-insns-single limit reached"))
DEFCIFCODE(MAX_INLINE_INSNS_AUTO_LIMIT,
	   N_("--param max-inline-insns-auto limit reached"))
DEFCIFCODE(INLINE_UNIT_GROWTH_LIMIT,
	   N_("--param inline-unit-growth limit reached"))

/* Recursive inlining.  */
DEFCIFCODE(RECURSIVE_INLINING, N_("recursive inlining"))

/* Call is unlikely.  */
DEFCIFCODE(UNLIKELY_CALL, N_("call is unlikely and code size would grow"))

/* Function is not declared as inline.  */
DEFCIFCODE(NOT_DECLARED_INLINED,
	   N_("function not declared inline and code size would grow"))

/* Inlining suppressed due to size optimization.  */
DEFCIFCODE(OPTIMIZING_FOR_SIZE,
	   N_("optimizing for size and code size would grow"))

/* Caller and callee disagree on the arguments.  */
DEFCIFCODE(MISMATCHED_ARGUMENTS, N_("mismatched arguments"))

/* Call was originally indirect.  */
DEFCIFCODE(ORIGINALLY_INDIRECT_CALL,
	   N_("originally indirect function call not considered for inlining"))

/* Ths edge represents an indirect edge with a yet-undetermined callee .  */
DEFCIFCODE(INDIRECT_UNKNOWN_CALL,
	   N_("indirect function call with a yet undetermined callee"))

/* We can't inline different EH personalities together.  */
DEFCIFCODE(EH_PERSONALITY, N_("exception handling personality mismatch"))

/* We can't inline if the callee can throw non-call exceptions but the
   caller cannot.  */
DEFCIFCODE(NON_CALL_EXCEPTIONS, N_("non-call exception handling mismatch"))

/* We can't inline because of mismatched target specific options.  */
DEFCIFCODE(TARGET_OPTION_MISMATCH, N_("target specific option mismatch"))

/* We can't inline because of mismatched optimization levels.  */
DEFCIFCODE(OPTIMIZATION_MISMATCH, N_("optimization level attribute mismatch"))
