diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0ec0c60cf01c00df3a58d5e7ac30958bd3ca4d8c..0aed70c980ed06a32695f74eab5077aa90efc444 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-11-04 Eric Botcazou <ebotcazou@adacore.com> + + 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 <harsha.jagasia@amd.com> Dwarakanath Rajagopal <dwarak.rajagopal@amd.com> diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index c011d9b434707e94f593b6a211717f7f981b59fb..82f5352597c22a034d9a4fc4be20350e5e3530ca 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 3066e3d17ff47aab9d034abacbdc9c2b42b1fbcf..5f63688f2fcc8a18ebaefb9f826af2a05a38e77e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Eric Botcazou <ebotcazou@adacore.com> + + 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 <janus@gcc.gnu.org> PR fortran/41556 diff --git a/gcc/testsuite/ada/acats/norun.lst b/gcc/testsuite/ada/acats/norun.lst index 8441024b241a6943d3f43d88ba2cf13ce7149e43..c0b08e42c07a43ae688d6b83c945e550044c8351 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 05f3ff57df5d91fb7eee31ae8a846cc9d848b889..acb6ab5715190757e905252bcdff5f080e3b1361 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+"$@"}