From 98b31d73187ac50cb6a74c878b61e4767d5896fc Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Wed, 4 Nov 2009 21:45:54 +0000 Subject: [PATCH] PR target/10127 PR ada/20548 * config/i386/i386.md (probe_stack_range): New expander. (logical operation peepholes): Do not split stack checking probes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153918 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/i386.md | 20 ++++++++++++++++++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/ada/acats/norun.lst | 8 -------- gcc/testsuite/ada/acats/run_acats | 3 +++ 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0ec0c60cf01..0aed70c980e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-11-04 Eric Botcazou + + PR target/10127 + PR ada/20548 + * config/i386/i386.md (probe_stack_range): New expander. + (logical operation peepholes): Do not split stack checking probes. + 2009-11-04 Harsha Jagasia Dwarakanath Rajagopal diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index c011d9b4347..82f5352597c 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -20023,6 +20023,18 @@ DONE; }) +;; Use IOR for stack probes, this is shorter. +(define_expand "probe_stack" + [(match_operand 0 "memory_operand" "")] + "" +{ + if (GET_MODE (operands[0]) == DImode) + emit_insn (gen_iordi3 (operands[0], operands[0], const0_rtx)); + else + emit_insn (gen_iorsi3 (operands[0], operands[0], const0_rtx)); + DONE; +}) + (define_expand "builtin_setjmp_receiver" [(label_ref (match_operand 0 "" ""))] "!TARGET_64BIT && flag_pic" @@ -20526,7 +20538,9 @@ [(match_dup 0) (match_operand:SI 1 "nonmemory_operand" "")])) (clobber (reg:CC FLAGS_REG))])] - "optimize_insn_for_speed_p () && ! TARGET_READ_MODIFY_WRITE" + "optimize_insn_for_speed_p () && ! TARGET_READ_MODIFY_WRITE + /* Do not split stack checking probes. */ + && GET_CODE (operands[3]) != IOR && operands[1] != const0_rtx" [(set (match_dup 2) (match_dup 0)) (parallel [(set (match_dup 2) (match_op_dup 3 [(match_dup 2) (match_dup 1)])) @@ -20541,7 +20555,9 @@ [(match_operand:SI 1 "nonmemory_operand" "") (match_dup 0)])) (clobber (reg:CC FLAGS_REG))])] - "optimize_insn_for_speed_p () && ! TARGET_READ_MODIFY_WRITE" + "optimize_insn_for_speed_p () && ! TARGET_READ_MODIFY_WRITE + /* Do not split stack checking probes. */ + && GET_CODE (operands[3]) != IOR && operands[1] != const0_rtx" [(set (match_dup 2) (match_dup 0)) (parallel [(set (match_dup 2) (match_op_dup 3 [(match_dup 1) (match_dup 2)])) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3066e3d17ff..5f63688f2fc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Eric Botcazou + + PR ada/20548 + * ada/acats/norun.lst: Remove the stack checking tests. + * ada/acats/run_acats: Limit the stack to 8MB. + 2009-11-04 Janus Weil PR fortran/41556 diff --git a/gcc/testsuite/ada/acats/norun.lst b/gcc/testsuite/ada/acats/norun.lst index 8441024b241..c0b08e42c07 100644 --- a/gcc/testsuite/ada/acats/norun.lst +++ b/gcc/testsuite/ada/acats/norun.lst @@ -1,10 +1,2 @@ -c52103x -c52104x -c52104y -cb1010a -cb1010c -cb1010d templat # Tests must be sorted in alphabetical order -# c52103x, c52104x, c52104y: -fstack-check doesn't work, PR middle-end/20548 -# cb1010a, cb1010c, cb1010d: likewise diff --git a/gcc/testsuite/ada/acats/run_acats b/gcc/testsuite/ada/acats/run_acats index 05f3ff57df5..acb6ab57151 100755 --- a/gcc/testsuite/ada/acats/run_acats +++ b/gcc/testsuite/ada/acats/run_acats @@ -52,4 +52,7 @@ echo exec gnatmake '"$@"' >> host_gnatmake chmod +x host_gnatmake +# Limit the stack to 8MB for stack checking +ulimit -s 8192 + exec $testdir/run_all.sh ${1+"$@"} -- 2.11.0