2064.md ("z_int", "z_agen"): Ensure the condition matches no insns already matched by other reservations.

* config/s390/2064.md ("z_int", "z_agen"): Ensure the condition
	matches no insns already matched by other reservations.
	* config/s390/2084.md ("x_int", "x_agen"): Ensure the condition
	matches no insns already matched by other reservations.
	("x_ss"): Remove, replace by ...
	("x_cs"): ... this new reservation.  Check type instead of op_type.
	Update bypasses to use x_cs instead of x_ss.
	("x_nn"): Remove, replace by ...
	("x_other"): ... this new reservation.  Check type instead of op_type.
	Add x_other and x_branch to bypasses.
	("x_vs"): New reservation.
	* config/s390/s390.md (attribute "type"): Default according to op_type.
	("*execute"): Set type to "cs".

From-SVN: r90190
This commit is contained in:
Ulrich Weigand 2004-11-06 19:57:41 +00:00 committed by Ulrich Weigand
parent a8f48325ac
commit 29a74354b0
4 changed files with 76 additions and 55 deletions

View file

@ -1,3 +1,19 @@
2004-11-06 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/2064.md ("z_int", "z_agen"): Ensure the condition
matches no insns already matched by other reservations.
* config/s390/2084.md ("x_int", "x_agen"): Ensure the condition
matches no insns already matched by other reservations.
("x_ss"): Remove, replace by ...
("x_cs"): ... this new reservation. Check type instead of op_type.
Update bypasses to use x_cs instead of x_ss.
("x_nn"): Remove, replace by ...
("x_other"): ... this new reservation. Check type instead of op_type.
Add x_other and x_branch to bypasses.
("x_vs"): New reservation.
* config/s390/s390.md (attribute "type"): Default according to op_type.
("*execute"): Set type to "cs".
2004-11-06 Kazu Hirata <kazu@cs.umass.edu>
* fold-const.c (non_lvalue): Don't construct NON_LVALUE_EXPR

View file

@ -72,22 +72,20 @@
(eq_attr "type" "jsr"))
"z_e1*5,z_wr")
;
; Insn still not mentioned are check for
; the usage of the agen unit
;
;; For everything else we check the atype flag.
(define_insn_reservation "z_int" 1
(and (eq_attr "cpu" "z900,g5,g6")
(eq_attr "atype" "reg"))
(and (not (eq_attr "type" "la,larl,load,store,jsr"))
(eq_attr "atype" "reg")))
"z_e1,z_wr")
(define_insn_reservation "z_agen" 1
(and (eq_attr "cpu" "z900,g5,g6")
(eq_attr "atype" "agen"))
(and (not (eq_attr "type" "la,larl,load,store,jsr"))
(eq_attr "atype" "agen")))
"z_e1,z_wr")
;;
;; s390_agen_dep_p returns 1, if a register is set in the
;; first insn and used in the dependent insn to form a address.

View file

@ -61,6 +61,18 @@
;; Simple insns
;;
(define_insn_reservation "x_int" 1
(and (eq_attr "cpu" "z990")
(and (eq_attr "type" "integer")
(eq_attr "atype" "reg")))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_agen" 1
(and (eq_attr "cpu" "z990")
(and (eq_attr "type" "integer")
(eq_attr "atype" "agen")))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_lr" 1
(and (eq_attr "cpu" "z990")
(eq_attr "type" "lr"))
@ -100,11 +112,16 @@
;; Multicycle insns
;;
(define_insn_reservation "x_ss" 1
(define_insn_reservation "x_cs" 1
(and (eq_attr "cpu" "z990")
(eq_attr "op_type" "SS"))
(eq_attr "type" "cs"))
"x-e1-np,x-wr-np")
(define_insn_reservation "x_vs" 1
(and (eq_attr "cpu" "z990")
(eq_attr "type" "vs"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_stm" 1
(and (eq_attr "cpu" "z990")
(eq_attr "type" "stm"))
@ -115,9 +132,9 @@
(eq_attr "type" "lm"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_nn" 1
(define_insn_reservation "x_other" 1
(and (eq_attr "cpu" "z990")
(eq_attr "op_type" "NN"))
(eq_attr "type" "other"))
"x-e1-np,x-wr-np")
;;
@ -182,21 +199,6 @@
(define_bypass 1 "x_floads" "x_fsimps,x_fstores,x_floads")
;;
;; Insns still not mentioned are checked for
;; the usage of the agen unit
;;
(define_insn_reservation "x_int" 1
(and (eq_attr "cpu" "z990")
(eq_attr "atype" "reg"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_agen" 1
(and (eq_attr "cpu" "z990")
(eq_attr "atype" "agen"))
"x-e1-st+x-mem,x-wr-st")
;;
;; s390_agen_dep_p returns 1, if a register is set in the
;; first insn and used in the dependent insn to form a address.
@ -208,7 +210,7 @@
;;
(define_bypass 5 "x_int,x_agen,x_lr"
"x_agen,x_la,x_call,x_load,x_store,x_ss,x_stm,x_lm"
"x_agen,x_la,x_branch,x_call,x_load,x_store,x_cs,x_stm,x_lm,x_other"
"s390_agen_dep_p")
(define_bypass 9 "x_int,x_agen,x_lr"
@ -221,7 +223,7 @@
;;
(define_bypass 4 "x_load"
"x_agen,x_la,x_call,x_load,x_store,x_ss,x_stm,x_lm"
"x_agen,x_la,x_branch,x_call,x_load,x_store,x_cs,x_stm,x_lm,x_other"
"s390_agen_dep_p")
(define_bypass 5 "x_load"
@ -235,7 +237,7 @@
;;
(define_bypass 3 "x_larl,x_la"
"x_agen,x_la,x_call,x_load,x_store,x_ss,x_stm,x_lm"
"x_agen,x_la,x_branch,x_call,x_load,x_store,x_cs,x_stm,x_lm,x_other"
"s390_agen_dep_p")
(define_bypass 5 "x_larl, x_la"

View file

@ -143,16 +143,14 @@
])
;; Processor type. This attribute must exactly match the processor_type
;; enumeration in s390.h. The current machine description does not
;; distinguish between g5 and g6, but there are differences between the two
;; CPUs could in theory be modeled.
;; Instruction operand type as used in the Principles of Operation.
;; Used to determine defaults for length and other attribute values.
(define_attr "cpu" "g5,g6,z900,z990"
(const (symbol_ref "s390_tune")))
(define_attr "op_type"
"NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE,RXY,RSY,SIY"
(const_string "RX"))
;; Define an insn type attribute. This is used in function unit delay
;; computations.
;; Instruction type attribute used for scheduling.
(define_attr "type" "none,integer,load,lr,la,larl,lm,stm,
cs,vs,store,imul,idiv,
@ -161,17 +159,13 @@
fmuld,fmuls,fdivd,fdivs,
ftoi,itof,fsqrtd,fsqrts,
other"
(const_string "integer"))
(cond [(eq_attr "op_type" "NN") (const_string "other")
(eq_attr "op_type" "SS") (const_string "cs")]
(const_string "integer")))
;; Operand type. Used to default length attribute values
(define_attr "op_type"
"NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE,RXY,RSY,SIY"
(const_string "RX"))
;; Insn are devide in two classes:
;; agen: Insn using agen
;; reg: Insn not using agen
;; Another attribute used for scheduling purposes:
;; agen: Instruction uses the address generation unit
;; reg: Instruction does not use the agen unit
(define_attr "atype" "agen,reg"
(cond [ (eq_attr "op_type" "E") (const_string "reg")
@ -193,13 +187,6 @@
(eq_attr "op_type" "SIY") (const_string "agen")]
(const_string "reg")))
;; Pipeline description for z900. For lack of anything better,
;; this description is also used for the g5 and g6.
(include "2064.md")
;; Pipeline description for z990.
(include "2084.md")
;; Length in bytes.
(define_attr "length" ""
@ -227,6 +214,23 @@
(define_asm_attributes [(set_attr "type" "other")
(set_attr "op_type" "NN")])
;; Processor type. This attribute must exactly match the processor_type
;; enumeration in s390.h. The current machine description does not
;; distinguish between g5 and g6, but there are differences between the two
;; CPUs could in theory be modeled.
(define_attr "cpu" "g5,g6,z900,z990"
(const (symbol_ref "s390_tune")))
;; Pipeline description for z900. For lack of anything better,
;; this description is also used for the g5 and g6.
(include "2064.md")
;; Pipeline description for z990.
(include "2084.md")
;;
;; Condition Codes
;;
@ -1760,7 +1764,8 @@
"GET_MODE_CLASS (GET_MODE (operands[1])) == MODE_INT
&& GET_MODE_SIZE (GET_MODE (operands[1])) <= UNITS_PER_WORD"
"ex\t%1,%2"
[(set_attr "op_type" "RX")])
[(set_attr "op_type" "RX")
(set_attr "type" "cs")])
;