You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.3 KiB
88 lines
3.3 KiB
commit 93ed472702aad6d9b8998592775a0ab4120b6242 |
|
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4> |
|
Date: Wed Sep 20 21:59:50 2017 +0000 |
|
|
|
* explow.c (compute_stack_clash_protection_loop_data): Use |
|
CONST_INT_P instead of explicit test. Verify object is a |
|
CONST_INT_P before looking at INTVAL. |
|
(anti_adjust_stack_and_probe_stack_clash): Use CONST_INT_P |
|
instead of explicit test. |
|
|
|
* gcc.target/i386/stack-check-11.c: Update test and regexp |
|
so that it works for both i?86 and x86_64. |
|
|
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253034 138bc75d-0d04-0410-961f-82ee72b054a4 |
|
|
|
diff --git a/gcc/explow.c b/gcc/explow.c |
|
index 2526e8513b7..d118e0d7782 100644 |
|
--- a/gcc/explow.c |
|
+++ b/gcc/explow.c |
|
@@ -1778,11 +1778,11 @@ compute_stack_clash_protection_loop_data (rtx *rounded_size, rtx *last_addr, |
|
if (*rounded_size == CONST0_RTX (Pmode)) |
|
fprintf (dump_file, |
|
"Stack clash skipped dynamic allocation and probing loop.\n"); |
|
- else if (GET_CODE (*rounded_size) == CONST_INT |
|
+ else if (CONST_INT_P (*rounded_size) |
|
&& INTVAL (*rounded_size) <= 4 * *probe_interval) |
|
fprintf (dump_file, |
|
"Stack clash dynamic allocation and probing inline.\n"); |
|
- else if (GET_CODE (*rounded_size) == CONST_INT) |
|
+ else if (CONST_INT_P (*rounded_size)) |
|
fprintf (dump_file, |
|
"Stack clash dynamic allocation and probing in " |
|
"rotated loop.\n"); |
|
@@ -1880,7 +1880,8 @@ anti_adjust_stack_and_probe_stack_clash (rtx size) |
|
|
|
if (rounded_size != CONST0_RTX (Pmode)) |
|
{ |
|
- if (INTVAL (rounded_size) <= 4 * probe_interval) |
|
+ if (CONST_INT_P (rounded_size) |
|
+ && INTVAL (rounded_size) <= 4 * probe_interval) |
|
{ |
|
for (HOST_WIDE_INT i = 0; |
|
i < INTVAL (rounded_size); |
|
@@ -1900,7 +1901,7 @@ anti_adjust_stack_and_probe_stack_clash (rtx size) |
|
else |
|
{ |
|
rtx loop_lab, end_loop; |
|
- bool rotate_loop = GET_CODE (rounded_size) == CONST_INT; |
|
+ bool rotate_loop = CONST_INT_P (rounded_size); |
|
emit_stack_clash_protection_probe_loop_start (&loop_lab, &end_loop, |
|
last_addr, rotate_loop); |
|
|
|
@@ -1938,7 +1939,7 @@ anti_adjust_stack_and_probe_stack_clash (rtx size) |
|
might hold live data. So probe at *sp if we know that |
|
an allocation was made, otherwise probe into the red zone |
|
which is obviously undesirable. */ |
|
- if (GET_CODE (size) == CONST_INT) |
|
+ if (CONST_INT_P (size)) |
|
{ |
|
emit_stack_probe (stack_pointer_rtx); |
|
emit_insn (gen_blockage ()); |
|
diff --git a/gcc/testsuite/gcc.target/i386/stack-check-11.c b/gcc/testsuite/gcc.target/i386/stack-check-11.c |
|
index 183103f01e5..fe5b2c2b844 100644 |
|
--- a/gcc/testsuite/gcc.target/i386/stack-check-11.c |
|
+++ b/gcc/testsuite/gcc.target/i386/stack-check-11.c |
|
@@ -2,15 +2,17 @@ |
|
/* { dg-options "-O2 -fstack-clash-protection" } */ |
|
/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
|
|
-extern void arf (unsigned long int *, unsigned long int *); |
|
+#include <stdint.h> |
|
+ |
|
+extern void arf (uint64_t *, uint64_t *); |
|
void |
|
frob () |
|
{ |
|
- unsigned long int num[859]; |
|
- unsigned long int den[859]; |
|
+ uint64_t num[859]; |
|
+ uint64_t den[859]; |
|
arf (den, num); |
|
} |
|
|
|
-/* { dg-final { scan-assembler-times "subq" 4 } } */ |
|
-/* { dg-final { scan-assembler-times "orq" 3 } } */ |
|
+/* { dg-final { scan-assembler-times "sub\[ql\]" 4 } } */ |
|
+/* { dg-final { scan-assembler-times "or\[ql\]" 3 } } */ |
|
|
|
|