projects
/
gcc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
runtime: mark go-context.S as no-executable-stack and split-stack supported
[gcc.git]
/
gcc
/
combine-stack-adj.c
diff --git
a/gcc/combine-stack-adj.c
b/gcc/combine-stack-adj.c
index 4c98f0082decc7da83f3570ff10effe85782dbab..d14d59abced05b34309f3241f18ab0190a335ca4 100644
(file)
--- a/
gcc/combine-stack-adj.c
+++ b/
gcc/combine-stack-adj.c
@@
-1,5
+1,5
@@
/* Combine stack adjustments.
/* Combine stack adjustments.
- Copyright (C) 1987-201
5
Free Software Foundation, Inc.
+ Copyright (C) 1987-201
9
Free Software Foundation, Inc.
This file is part of GCC.
This file is part of GCC.
@@
-41,42
+41,18
@@
along with GCC; see the file COPYING3. If not see
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "config.h"
#include "system.h"
#include "coretypes.h"
-#include "
tm
.h"
+#include "
backend
.h"
#include "rtl.h"
#include "rtl.h"
-#include "
tm_p
.h"
+#include "
df
.h"
#include "insn-config.h"
#include "insn-config.h"
+#include "memmodel.h"
+#include "emit-rtl.h"
#include "recog.h"
#include "recog.h"
-#include "regs.h"
-#include "hard-reg-set.h"
-#include "flags.h"
-#include "hashtab.h"
-#include "hash-set.h"
-#include "vec.h"
-#include "machmode.h"
-#include "input.h"
-#include "function.h"
-#include "symtab.h"
-#include "expr.h"
-#include "predict.h"
-#include "dominance.h"
-#include "cfg.h"
#include "cfgrtl.h"
#include "cfgrtl.h"
-#include "basic-block.h"
-#include "df.h"
-#include "except.h"
-#include "reload.h"
#include "tree-pass.h"
#include "rtl-iter.h"
\f
#include "tree-pass.h"
#include "rtl-iter.h"
\f
-/* Turn STACK_GROWS_DOWNWARD into a boolean. */
-#ifdef STACK_GROWS_DOWNWARD
-#undef STACK_GROWS_DOWNWARD
-#define STACK_GROWS_DOWNWARD 1
-#else
-#define STACK_GROWS_DOWNWARD 0
-#endif
-
/* This structure records two kinds of stack references between stack
adjusting instructions: stack references in memory addresses for
regular insns and all stack references for debug insns. */
/* This structure records two kinds of stack references between stack
adjusting instructions: stack references in memory addresses for
regular insns and all stack references for debug insns. */
@@
-232,6
+208,7
@@
no_unhandled_cfa (rtx_insn *insn)
case REG_CFA_SET_VDRAP:
case REG_CFA_WINDOW_SAVE:
case REG_CFA_FLUSH_QUEUE:
case REG_CFA_SET_VDRAP:
case REG_CFA_WINDOW_SAVE:
case REG_CFA_FLUSH_QUEUE:
+ case REG_CFA_TOGGLE_RA_MANGLE:
return false;
}
return false;
}
@@
-531,6
+508,8
@@
combine_stack_adjustments_for_block (basic_block bb)
continue;
set = single_set_for_csa (insn);
continue;
set = single_set_for_csa (insn);
+ if (set && find_reg_note (insn, REG_STACK_CHECK, NULL_RTX))
+ set = NULL_RTX;
if (set)
{
rtx dest = SET_DEST (set);
if (set)
{
rtx dest = SET_DEST (set);
@@
-560,7
+539,7
@@
combine_stack_adjustments_for_block (basic_block bb)
Also we need to be careful to not move stack pointer
such that we create stack accesses outside the allocated
area. We can combine an allocation into the first insn,
Also we need to be careful to not move stack pointer
such that we create stack accesses outside the allocated
area. We can combine an allocation into the first insn,
- or a deallocation into the second insn. We can
not
+ or a deallocation into the second insn. We cannot
combine an allocation followed by a deallocation.
The only somewhat frequent occurrence of the later is when
combine an allocation followed by a deallocation.
The only somewhat frequent occurrence of the later is when
@@
-643,11
+622,11
@@
combine_stack_adjustments_for_block (basic_block bb)
if (MEM_P (dest)
&& ((STACK_GROWS_DOWNWARD
? (GET_CODE (XEXP (dest, 0)) == PRE_DEC
if (MEM_P (dest)
&& ((STACK_GROWS_DOWNWARD
? (GET_CODE (XEXP (dest, 0)) == PRE_DEC
- &&
last_sp_adjust
-
== (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (dest
)))
+ &&
known_eq (last_sp_adjust,
+
GET_MODE_SIZE (GET_MODE (dest)
)))
: (GET_CODE (XEXP (dest, 0)) == PRE_INC
: (GET_CODE (XEXP (dest, 0)) == PRE_INC
- &&
last_sp_adjust
-
== -(HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (dest
))))
+ &&
known_eq (-last_sp_adjust,
+
GET_MODE_SIZE (GET_MODE (dest)
))))
|| ((STACK_GROWS_DOWNWARD
? last_sp_adjust >= 0 : last_sp_adjust <= 0)
&& GET_CODE (XEXP (dest, 0)) == PRE_MODIFY
|| ((STACK_GROWS_DOWNWARD
? last_sp_adjust >= 0 : last_sp_adjust <= 0)
&& GET_CODE (XEXP (dest, 0)) == PRE_MODIFY