Commit 813b70a1 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/92930 (GCC incorrectly optimizes away __builtin_apply() calls)

	PR tree-optimization/92930
	* ipa-pure-const.c (special_builtin_state): Don't handle
	BUILT_IN_APPLY.  Formatting fixes.
	(check_call): Formatting fixes.

	* gcc.dg/tree-ssa/pr92930.c: New test.

From-SVN: r279394
parent 4e62faf2
2019-12-14 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/92930
* ipa-pure-const.c (special_builtin_state): Don't handle
BUILT_IN_APPLY. Formatting fixes.
(check_call): Formatting fixes.
2019-12-14 Iain Sandoe <iain@sandoe.co.uk> 2019-12-14 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.h (DARWIN_EXTRA_SPECS): Add new * config/darwin.h (DARWIN_EXTRA_SPECS): Add new
...@@ -511,35 +511,34 @@ worse_state (enum pure_const_state_e *state, bool *looping, ...@@ -511,35 +511,34 @@ worse_state (enum pure_const_state_e *state, bool *looping,
but function using them is. */ but function using them is. */
static bool static bool
special_builtin_state (enum pure_const_state_e *state, bool *looping, special_builtin_state (enum pure_const_state_e *state, bool *looping,
tree callee) tree callee)
{ {
if (DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL) if (DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL)
switch (DECL_FUNCTION_CODE (callee)) switch (DECL_FUNCTION_CODE (callee))
{ {
case BUILT_IN_RETURN: case BUILT_IN_RETURN:
case BUILT_IN_UNREACHABLE: case BUILT_IN_UNREACHABLE:
CASE_BUILT_IN_ALLOCA: CASE_BUILT_IN_ALLOCA:
case BUILT_IN_STACK_SAVE: case BUILT_IN_STACK_SAVE:
case BUILT_IN_STACK_RESTORE: case BUILT_IN_STACK_RESTORE:
case BUILT_IN_EH_POINTER: case BUILT_IN_EH_POINTER:
case BUILT_IN_EH_FILTER: case BUILT_IN_EH_FILTER:
case BUILT_IN_UNWIND_RESUME: case BUILT_IN_UNWIND_RESUME:
case BUILT_IN_CXA_END_CLEANUP: case BUILT_IN_CXA_END_CLEANUP:
case BUILT_IN_EH_COPY_VALUES: case BUILT_IN_EH_COPY_VALUES:
case BUILT_IN_FRAME_ADDRESS: case BUILT_IN_FRAME_ADDRESS:
case BUILT_IN_APPLY: case BUILT_IN_APPLY_ARGS:
case BUILT_IN_APPLY_ARGS: case BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT:
case BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT: case BUILT_IN_ASAN_AFTER_DYNAMIC_INIT:
case BUILT_IN_ASAN_AFTER_DYNAMIC_INIT: *looping = false;
*looping = false; *state = IPA_CONST;
*state = IPA_CONST; return true;
return true; case BUILT_IN_PREFETCH:
case BUILT_IN_PREFETCH: *looping = true;
*looping = true; *state = IPA_CONST;
*state = IPA_CONST; return true;
return true; default:
default: break;
break;
} }
return false; return false;
} }
...@@ -624,9 +623,10 @@ check_call (funct_state local, gcall *call, bool ipa) ...@@ -624,9 +623,10 @@ check_call (funct_state local, gcall *call, bool ipa)
case BUILT_IN_LONGJMP: case BUILT_IN_LONGJMP:
case BUILT_IN_NONLOCAL_GOTO: case BUILT_IN_NONLOCAL_GOTO:
if (dump_file) if (dump_file)
fprintf (dump_file, " longjmp and nonlocal goto is not const/pure\n"); fprintf (dump_file,
" longjmp and nonlocal goto is not const/pure\n");
local->pure_const_state = IPA_NEITHER; local->pure_const_state = IPA_NEITHER;
local->looping = true; local->looping = true;
break; break;
default: default:
break; break;
...@@ -1532,7 +1532,7 @@ propagate_pure_const (void) ...@@ -1532,7 +1532,7 @@ propagate_pure_const (void)
} }
} }
else if (special_builtin_state (&edge_state, &edge_looping, else if (special_builtin_state (&edge_state, &edge_looping,
y->decl)) y->decl))
; ;
else else
state_from_flags (&edge_state, &edge_looping, state_from_flags (&edge_state, &edge_looping,
......
2019-12-14 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/92930
* gcc.dg/tree-ssa/pr92930.c: New test.
2019-12-13 Martin Sebor <msebor@redhat.com> 2019-12-13 Martin Sebor <msebor@redhat.com>
PR middle-end/91582 PR middle-end/91582
......
/* PR tree-optimization/92930 */
/* { dg-do compile { target untyped_assembly } } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
/* { dg-final { scan-tree-dump "__builtin_apply " "optimized" } } */
/* { dg-final { scan-tree-dump "__builtin_apply_args" "optimized" } } */
void foo (int a, int b, int c, int d, int e, int f, int g);
static void bar (int a, ...)
{
__builtin_apply (foo, __builtin_apply_args (), 20);
}
int
main ()
{
bar (1024, 1025, 1026, 1027, 1028, 1029, 1030);
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment