From cee7d07b4573c5ae3c499a54943aafc2eeb6b427 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 9 Mar 2003 16:51:41 +0100 Subject: [PATCH] re PR rtl-optimization/9888 (-mcpu=k6 -Os produces out of range loop instructions) PR optimization/9888 Backport patch from mainline: 2002-07-03 Eric Botcazou Jeff Law * i386.md (length_immediate attribute): Fix typo. (length_address attribute): Likewise. (modrm attribute): Set it to 0 for immediate call instructions. (jcc_1 pattern): Set modrm attribute to 0. (jcc_2 pattern ): Likewise. (jump pattern): Likewise. (doloop_end_internal pattern): Explicitly set length. (leave pattern): Fix typo. (leave_rex64 pattern): Likewise. From-SVN: r64035 --- gcc/ChangeLog | 18 ++++++++++++++++++ gcc/config/i386/i386.md | 25 ++++++++++++++++++++----- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/i386-loop-1.c | 2 +- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ccdb5c812039..27b9113c84c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,21 @@ +2003-03-09 Eric Botcazou + + PR optimization/9888 + Backport patch from mainline: + + 2002-07-03 Eric Botcazou + Jeff Law + + * i386.md (length_immediate attribute): Fix typo. + (length_address attribute): Likewise. + (modrm attribute): Set it to 0 for immediate call instructions. + (jcc_1 pattern): Set modrm attribute to 0. + (jcc_2 pattern ): Likewise. + (jump pattern): Likewise. + (doloop_end_internal pattern): Explicitly set length. + (leave pattern): Fix typo. + (leave_rex64 pattern): Likewise. + 2003-03-08 Eric Botcazou PR middle-end/7796 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 36a0497818eb..304c889b3b6a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -131,7 +131,7 @@ ;; The (bounding maximum) length of an instruction immediate. (define_attr "length_immediate" "" - (cond [(eq_attr "type" "incdec,setcc,icmov,ibr,str,cld,lea,other,multi,idiv,sse,mmx") + (cond [(eq_attr "type" "incdec,setcc,icmov,str,cld,lea,other,multi,idiv,sse,mmx") (const_int 0) (eq_attr "i387" "1") (const_int 0) @@ -162,7 +162,7 @@ (cond [(eq_attr "type" "str,cld,other,multi,fxch") (const_int 0) (and (eq_attr "type" "call") - (match_operand 1 "constant_call_address_operand" "")) + (match_operand 0 "constant_call_address_operand" "")) (const_int 0) (and (eq_attr "type" "callv") (match_operand 1 "constant_call_address_operand" "")) @@ -205,6 +205,12 @@ (and (match_operand 0 "register_operand" "") (match_operand 1 "immediate_operand" ""))) (const_int 0) + (and (eq_attr "type" "call") + (match_operand 0 "constant_call_address_operand" "")) + (const_int 0) + (and (eq_attr "type" "callv") + (match_operand 1 "constant_call_address_operand" "")) + (const_int 0) ] (const_int 1))) @@ -12961,6 +12967,7 @@ "" "%+j%C1\t%l0" [(set_attr "type" "ibr") + (set_attr "modrm" "0") (set (attr "prefix_0f") (if_then_else (and (ge (minus (match_dup 0) (pc)) (const_int -128)) @@ -12978,6 +12985,7 @@ "" "%+j%c1\t%l0" [(set_attr "type" "ibr") + (set_attr "modrm" "0") (set (attr "prefix_0f") (if_then_else (and (ge (minus (match_dup 0) (pc)) (const_int -128)) @@ -13244,7 +13252,8 @@ (label_ref (match_operand 0 "" "")))] "" "jmp\t%l0" - [(set_attr "type" "ibr")]) + [(set_attr "type" "ibr") + (set_attr "modrm" "0")]) (define_expand "indirect_jump" [(set (pc) (match_operand 0 "nonimmediate_operand" "rm"))] @@ -13357,6 +13366,14 @@ return "dec{l}\t%1\;%+jne\t%l0"; } [(set_attr "ppro_uops" "many") + (set (attr "length") + (if_then_else (and (eq_attr "alternative" "0") + (and (ge (minus (match_dup 0) (pc)) + (const_int -128)) + (lt (minus (match_dup 0) (pc)) + (const_int 124)))) + (const_int 2) + (const_int 16))) (set (attr "type") (if_then_else (and (eq_attr "alternative" "0") (and (ge (minus (match_dup 0) (pc)) @@ -13879,7 +13896,6 @@ [(set_attr "length_immediate" "0") (set_attr "length" "1") (set_attr "modrm" "0") - (set_attr "modrm" "0") (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) @@ -13892,7 +13908,6 @@ [(set_attr "length_immediate" "0") (set_attr "length" "1") (set_attr "modrm" "0") - (set_attr "modrm" "0") (set_attr "athlon_decode" "vector") (set_attr "ppro_uops" "few")]) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 164941741ce1..97a86d1e6e3a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-03-09 Eric Botcazou + + * gcc.dg/i386-loop-1.c: New test. + 2003-03-08 Hans-Peter Nilsson * gcc.dg/old-style-asm-1.c: Tweak to match mmix-knuth-mmixware. diff --git a/gcc/testsuite/gcc.dg/i386-loop-1.c b/gcc/testsuite/gcc.dg/i386-loop-1.c index 635f012a4777..e8bdaf5bcd34 100644 --- a/gcc/testsuite/gcc.dg/i386-loop-1.c +++ b/gcc/testsuite/gcc.dg/i386-loop-1.c @@ -1,6 +1,6 @@ /* PR optimization/9888 */ /* { dg-do run { target i?86-*-* } } */ -/* { dg-options "-mtune=k6 -O3" } */ +/* { dg-options "-mcpu=k6 -O3" } */ /* Verify that GCC doesn't emit out of range 'loop' instructions. */ -- 2.47.2