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  <ebotcazou@multimania.com>
	            Jeff Law  <law@redhat.com>

	* 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
This commit is contained in:
Eric Botcazou 2003-03-09 16:51:41 +01:00 committed by Eric Botcazou
parent cda7b37938
commit cee7d07b45
4 changed files with 43 additions and 6 deletions

View File

@ -1,3 +1,21 @@
2003-03-09 Eric Botcazou <ebotcazou@libertysurf.fr>
PR optimization/9888
Backport patch from mainline:
2002-07-03 Eric Botcazou <ebotcazou@multimania.com>
Jeff Law <law@redhat.com>
* 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 <ebotcazou@libertysurf.fr>
PR middle-end/7796

View File

@ -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")])

View File

@ -1,3 +1,7 @@
2003-03-09 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/i386-loop-1.c: New test.
2003-03-08 Hans-Peter Nilsson <hp@bitrange.com>
* gcc.dg/old-style-asm-1.c: Tweak to match mmix-knuth-mmixware.

View File

@ -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. */