S/390: Rework instruction scheduling.

This patch set adds new pipeline descriptions for z13 and z14.  Based
on that, the scoring and some properties are handled differently in
the scheduler hooks.

The patch before (r269620) also belongs to this set but I accidentally
applied it separately.

From-SVN: r269622
This commit is contained in:
Robin Dapp 2019-03-12 17:08:27 +00:00 committed by Robin Dapp
parent 2380e04277
commit ff99338ce3
7 changed files with 503 additions and 115 deletions

View File

@ -1,3 +1,27 @@
2019-03-12 Robin Dapp <rdapp@linux.ibm.com>
* config/s390/3906.md: New file.
* config/s390/s390.c (MAX_SCHED_UNITS): Increase.
(LONGRUNNING_THRESHOLD): Remove.
(MAX_SCHED_MIX_SCORE): Decrease.
(MAX_SCHED_MIX_DISTANCE): Decrease.
(s390_bb_fallthru_entry_likely): Assume fallthru for less than likely.
(struct s390_sched_state): New struct to hold scheduling state.
(S390_SCHED_STATE_NORMAL): Remove.
(S390_SCHED_STATE_CRACKED): Remove.
(S390_SCHED_ATTR_MASK_GROUPOFTWO): Add.
(s390_get_sched_attrmask): Use new attribute.
(s390_get_unit_mask): Use new units.
(s390_is_fpd): New function.
(s390_is_fxd): New function.
(s390_is_longrunning): New function.
(s390_sched_score): Use new functions.
(s390_sched_reorder): Likewise.
(s390_sched_variable_issue): Rework and use new functions.
(s390_sched_init): Use new functions.
* config/s390/s390.h (s390_tune_attr): Add z14.
* config/s390/s390.md: Add z14.
2019-03-12 Robin Dapp <rdapp@linux.ibm.com>
* config/s390/2964.md: Update pipeline description.

282
gcc/config/s390/3906.md Normal file
View File

@ -0,0 +1,282 @@
;; Scheduling description for z14.
;; Copyright (C) 2019 Free Software Foundation, Inc.
;; Contributed by Robin Dapp (rdapp@linux.ibm.com)
;; This file is part of GCC.
;; GCC is free software; you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free
;; Software Foundation; either version 3, or (at your option) any later
;; version.
;; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
;; WARRANTY; without even the implied warranty of MERCHANTABILITY or
;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
;; for more details.
;; You should have received a copy of the GNU General Public License
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
(define_attr "z14_unit_fpd" ""
(cond [(eq_attr "mnemonic" "ddb,ddbr,deb,debr,dxbr,sqdb,sqdbr,sqeb,\
sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfsqdb,wfsqxb")
(const_int 1)] (const_int 0)))
(define_attr "z14_unit_fxa" ""
(cond [(eq_attr "mnemonic" "a,afi,ag,agf,agfi,agfr,agh,aghi,aghik,\
agr,agrk,ahi,ahik,al,alc,alcg,alcgr,alcr,alfi,alg,algf,algfi,algfr,\
alghsik,algr,alhsik,alr,alrk,aly,ark,ay,bras,brasl,etnd,exrl,flogr,ic,icm,\
icmh,icmy,icy,iihf,iilf,ipm,la,larl,lay,lb,lbr,lcgr,lcr,lgb,lgbr,lgf,lgfi,\
lgfr,lgfrl,lgh,lghi,lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr,\
llgtr,llhr,llihf,llihh,llihl,llilf,llilh,llill,lngr,lnr,loc,locg,locghi,\
locgr,lochi,locr,lpgr,lpr,lr,lrv,lrvg,lrvgr,lrvh,lrvr,lt,ltg,ltgf,ltgfr,\
ltgr,ltr,m,mfy,mg,mgh,mghi,mgrk,mh,mhi,mhy,ml,mlg,mlgr,mlr,mr,ms,msfi,msg,\
msgf,msgfi,msgfr,msgr,msgrkc,msr,msrkc,msy,n,ng,ngr,ngrk,nihf,nihh,nihl,\
nilf,nilh,nill,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,oilh,oill,or,\
ork,oy,pfpo,popcnt,risbg,risbgn,rll,rllg,s,sg,sgf,sgfr,sgh,sgr,sgrk,sh,\
shy,sl,slb,slbg,slbgr,slbr,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,\
sllk,slr,slrk,sly,sr,sra,srag,srak,srl,srlg,srlk,sy,x,xg,xgr,xgrk,xihf,\
xilf,xr,xrk,xy")
(const_int 1)] (const_int 0)))
(define_attr "z14_unit_fxb" ""
(cond [(eq_attr "mnemonic" "agsi,algsi,alsi,asi,b,bc,bcr,bi,br,brcl,\
c,cfi,cg,cgf,cgfi,cgfr,cgfrl,cgh,cghi,cghrl,cghsi,cgit,cgr,cgrl,cgrt,ch,\
chi,chrl,chsi,chy,cit,cl,clfhsi,clfi,clfit,clg,clgf,clgfi,clgfr,clgfrl,\
clghsi,clgit,clgr,clgrl,clgrt,clgt,clhhsi,clhrl,cli,cliy,clm,clmy,clr,clrl,\
clrt,clt,cly,cr,crl,crt,cy,j,jg,laa,laag,lan,lang,lao,laog,lat,lax,laxg,\
lcdfr,ldgr,ldr,lgat,lgdr,lndfr,lpdfr,lzdr,lzer,mvghi,mvhhi,mvhi,mvi,mviy,ni,\
niy,nop,nopr,ntstg,oi,oiy,ppa,st,stc,stcy,std,stdy,ste,stey,stg,stgrl,sth,\
sthrl,sthy,stoc,stocg,strl,strv,strvg,strvh,sty,tend,tm,tmh,tmhh,tmhl,tml,\
tmlh,tmll,tmy,vlgvf,vlgvg,vlgvh,vlr,vlvgb,vlvgf,vlvgg,vlvgh,vlvgp,vst,vstl,\
vstrl,vstrlr,xi,xiy")
(const_int 1)] (const_int 0)))
(define_attr "z14_unit_fxd" ""
(cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr")
(const_int 1)] (const_int 0)))
(define_attr "z14_unit_lsu" ""
(cond [(eq_attr "mnemonic" "a,adb,aeb,ag,agf,agh,agsi,al,alc,alcg,\
alg,algf,algsi,alsi,aly,asi,ay,c,cdb,cg,cgf,cgfrl,cgh,cghrl,cghsi,cgrl,ch,\
chrl,chsi,chy,cl,clc,clfhsi,clg,clgf,clgfrl,clghsi,clgrl,clgt,clhhsi,clhrl,\
cli,cliy,clm,clmy,clrl,clt,cly,crl,cy,ddb,deb,ear,ic,icm,icmh,icmy,icy,l,\
laa,laag,lan,lang,lao,laog,lat,lax,laxg,lb,lcbb,ld,lde,ldeb,ldy,le,ley,lg,\
lgat,lgb,lgf,lgfrl,lgh,lghrl,lgrl,lh,lhrl,lhy,llc,llgc,llgf,llgfrl,llgh,\
llghrl,llgt,llh,llhrl,loc,locg,lrl,lrv,lrvg,lrvh,lt,ltg,ltgf,ly,m,madb,maeb,\
meeb,mfy,mg,mgh,mh,mhy,ml,mlg,ms,msdb,mseb,msg,msgf,msy,mvghi,mvhhi,mvhi,\
mvi,mviy,n,ng,ni,niy,ntstg,ny,o,og,oi,oiy,oy,s,sar,sdb,seb,sfpc,sg,sgf,\
sgh,sh,shy,sl,slb,slbg,slg,slgf,sly,sqdb,sqeb,st,stc,stcy,std,stdy,ste,\
stey,stg,stgrl,sth,sthrl,sthy,stoc,stocg,strl,strv,strvg,strvh,sty,sy,\
tabort,tm,tmy,vl,vlbb,vleb,vlef,vleg,vleh,vll,vllezb,vllezf,vllezg,vllezh,\
vllezlf,vlrepb,vlrepf,vlrepg,vlreph,vlrl,vlrlr,vst,vstl,vstrl,vstrlr,x,xg,xi,\
xiy,xy")
(const_int 1)] (const_int 0)))
(define_attr "z14_unit_vfu" ""
(cond [(eq_attr "mnemonic" "adb,adbr,adtr,aeb,aebr,axbr,axtr,cdb,\
cdbr,cdtr,cebr,cpsdr,cxbr,cxtr,ddtr,dxtr,fidbr,fidbra,fidtr,fiebr,fiebra,\
fixbr,fixbra,fixtr,lcdbr,lcebr,lcxbr,ldeb,ldebr,ldetr,le,ledbr,ledtr,ler,\
ley,lndbr,lnebr,lnxbr,lpdbr,lpebr,lpxbr,ltdbr,ltebr,ltxbr,ltxtr,lxdb,\
lxdbr,lxdtr,lxeb,lxebr,madb,madbr,maeb,maebr,mdbr,mdtr,meeb,meebr,msdb,\
msdbr,mseb,msebr,mxbr,mxtr,sdb,sdbr,sdtr,seb,sebr,sxbr,sxtr,tcdb,tceb,tcxb,\
tdcdt,tdcet,tdcxt,vab,vaccb,vacccq,vaccf,vaccg,vacch,vaccq,vacq,vaf,vag,vah,\
vaq,vavgb,vavgf,vavgg,vavgh,vavglb,vavglf,vavglg,vavglh,vbperm,vcdgb,\
vcdlgb,vceqb,vceqbs,vceqf,vceqfs,vceqg,vceqgs,vceqh,vceqhs,vcgdb,vchb,vchbs,\
vchf,vchfs,vchg,vchgs,vchh,vchhs,vchlb,vchlbs,vchlf,vchlfs,vchlg,vchlgs,\
vchlh,vchlhs,vcksm,vclgdb,vclzf,vctzb,vctzf,vctzg,vctzh,verimb,verimf,\
verimg,verimh,verllb,verllf,verllg,verllh,verllvb,verllvf,verllvg,verllvh,\
veslb,veslf,veslg,veslh,veslvb,veslvf,veslvg,veslvh,vesrab,vesraf,vesrag,\
vesrah,vesravb,vesravf,vesravg,vesravh,vesrlb,vesrlf,vesrlg,vesrlh,vesrlvb,\
vesrlvf,vesrlvg,vesrlvh,vfadb,vfasb,vfcedb,vfcedbs,vfcesb,vfcesbs,vfchdb,\
vfchdbs,vfchedb,vfchedbs,vfchesb,vfchesbs,vfchsb,vfchsbs,vfeeb,vfeef,vfeeh,\
vfeezbs,vfeezhs,vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vfidb,vfisb,\
vflcdb,vflcsb,vflndb,vflnsb,vflpdb,vfmadb,vfmasb,vfmaxdb,vfmaxsb,vfmdb,\
vfmindb,vfminsb,vfmsb,vfmsdb,vfmssb,vfnmadb,vfnmsdb,vfnmssb,vfsdb,vfssb,\
vftcidb,vftcisb,vgbm,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,vgm,\
vgmb,vgmf,vgmg,vgmh,vistrb,vistrbs,vistrf,vistrfs,vistrh,vlcb,vlcf,vlcg,\
vlch,vldeb,vleb,vledb,vlef,vleg,vleh,vleib,vleif,vleig,vleih,vlpb,vlpf,\
vlpg,vlph,vmaeb,vmaef,vmaeh,vmahb,vmahf,vmahh,vmalb,vmaleb,vmalef,vmaleh,\
vmalf,vmalhb,vmalhf,vmalhh,vmalhw,vmalob,vmalof,vmaloh,vmaob,vmaof,vmaoh,\
vmeb,vmef,vmeh,vmhb,vmhf,vmhh,vmlb,vmleb,vmlef,vmleh,vmlf,vmlhb,vmlhf,\
vmlhh,vmlhw,vmlob,vmlof,vmloh,vmnb,vmnf,vmng,vmnh,vmnlb,vmnlf,vmnlg,vmnlh,\
vmob,vmof,vmoh,vmrhb,vmrhf,vmrhg,vmrhh,vmrlb,vmrlf,vmrlg,vmrlh,vmxb,vmxf,\
vmxg,vmxh,vn,vnc,vnn,vno,vnot,vnx,vo,voc,vone,vpdi,vperm,vpkf,vpkg,vpkh,\
vpklsf,vpklsfs,vpklsg,vpklsgs,vpklsh,vpklshs,vpksf,vpksfs,vpksg,vpksgs,vpksh,\
vpkshs,vpopct,vpopctb,vpopctf,vpopctg,vpopcth,vrepb,vrepf,vrepg,vreph,vrepib,\
vrepif,vrepig,vrepih,vsb,vsbiq,vscbib,vscbif,vscbig,vscbih,vscbiq,vsegb,\
vsegf,vsegh,vsel,vsf,vsg,vsh,vsl,vslb,vsldb,vsq,vsra,vsrab,vsrl,vsrlb,vsumb,\
vsumgf,vsumgh,vsumh,vsumqf,vsumqg,vtm,vuphb,vuphf,vuphh,vuplb,vuplf,vuplhb,\
vuplhf,vuplhh,vuplhw,vupllb,vupllf,vupllh,vx,vzero,wcdgb,wcdlgb,wcgdb,wclgdb,\
wfadb,wfasb,wfaxb,wfcdb,wfcedb,wfcesb,wfcexbs,wfchdb,wfchedb,wfchesb,\
wfchexb,wfchexbs,wfchsb,wfchxb,wfchxbs,wfcsb,wfisb,wfixb,wflcdb,wflcsb,wflcxb,\
wflld,wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wfmadb,wfmasb,wfmaxb,\
wfmaxxb,wfmdb,wfminxb,wfmsb,wfmsdb,wfmssb,wfmsxb,wfmxb,wfnmaxb,wfnmsxb,wfsdb,\
wfssb,wfsxb,wldeb,wledb")
(const_int 1)] (const_int 0)))
(define_attr "z14_cracked" ""
(cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\
cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\
cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,clgebr,\
clgxbr,clgxtr,cs,csg,csy,d,efpc,ex,lcgfr,lngfr,lpgfr,lpq,lxr,lzxr,rxsbg,stpq,\
vgef,vgeg,vscef,vsceg,vsteb")
(const_int 1)] (const_int 0)))
(define_attr "z14_expanded" ""
(cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,\
cxlftr,cxlgbr,cxlgtr,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,stam,stm,\
stmg,stmy,tbegin,tbeginc")
(const_int 1)] (const_int 0)))
(define_attr "z14_groupalone" ""
(cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\
cxtr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\
lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,mg,mgrk,\
ml,mlg,mlgr,mlr,mr,msdb,mseb,msebr,mvc,mxbr,mxtr,oc,ppa,sfpc,slb,slbg,\
slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc")
(const_int 1)] (const_int 0)))
(define_attr "z14_endgroup" ""
(cond [(eq_attr "mnemonic" "bras,brasl,exrl,ipm")
(const_int 1)] (const_int 0)))
(define_attr "z14_groupoftwo" ""
(cond [(eq_attr "mnemonic" "vacccq,vacq,vfmadb,vfmasb,vfmsdb,vfmssb,\
vfnmadb,vfnmsdb,vfnmssb,vgfmab,vgfmaf,vgfmag,vgfmah,vmaeb,vmaef,vmaeh,vmahb,\
vmahf,vmahh,vmalb,vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,\
vmalob,vmalof,vmaloh,vmaob,vmaof,vmaoh,vperm,vsbiq,vsel,wfmadb,wfmasb,wfmaxb,\
wfmsdb,wfmssb,wfmsxb,wfnmaxb,wfnmsxb")
(const_int 1)] (const_int 0)))
(define_insn_reservation "z14_0" 0
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "a,afi,ag,agfi,aghi,aghik,agr,agrk,ahi,ahik,al,\
alfi,alg,algf,algfi,algfr,alghsik,algr,alhsik,alr,alrk,aly,ark,ay,b,bc,bcr,\
bi,br,bras,brasl,brcl,c,cfi,cg,cgfi,cghi,cghsi,cgit,cgr,cgrl,cgrt,chi,\
chsi,cit,cl,clfhsi,clfi,clfit,clg,clgf,clgfi,clgfr,clgfrl,clghsi,clgit,\
clgr,clgrl,clgrt,clgt,clhhsi,clhrl,cli,cliy,clr,clrl,clrt,clt,cly,cr,crl,\
crt,cy,etnd,exrl,ic,icm,icmh,icmy,icy,iihf,iilf,j,jg,la,larl,lat,lay,lb,\
lbr,lcdfr,lcgr,lcr,ldgr,ldr,lgat,lgb,lgbr,lgf,lgfi,lgfr,lgfrl,lgh,lghi,\
lghr,lghrl,lgr,lh,lhi,lhr,lhrl,lhy,llcr,llgfr,llghr,llgtr,llhr,llihf,llihh,\
llihl,llilf,llilh,llill,lndfr,lngr,lnr,lpdfr,lpgr,lpr,lr,lrv,lrvg,lrvgr,\
lrvh,lrvr,lt,ltg,ltgf,ltgfr,ltgr,ltr,lzdr,lzer,n,ng,ngr,ngrk,nihf,nihh,\
nihl,nilf,nilh,nill,nop,nopr,nr,nrk,ny,o,og,ogr,ogrk,oihf,oihh,oihl,oilf,\
oilh,oill,or,ork,oy,pfpo,risbg,risbgn,rll,rllg,rnsbg,rosbg,s,sg,sgr,sgrk,\
sl,sldl,slfi,slg,slgf,slgfi,slgfr,slgr,slgrk,sll,sllg,sllk,slr,slrk,sly,\
sr,sra,srag,srak,srda,srdl,srl,srlg,srlk,sy,tm,tmh,tmhh,tmhl,tml,tmlh,\
tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,xilf,xr,xrk,xy")) "nothing")
(define_insn_reservation "z14_1" 1
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "agf,agfr,agh,agsi,algsi,alsi,asi,cgf,cgfr,cgfrl,\
cgh,cghrl,ch,chrl,chy,clm,clmy,cpsdr,laa,laag,lan,lang,lao,laog,lax,laxg,\
le,ler,ley,loc,locg,locghi,locgr,lochi,locr,mvghi,mvhhi,mvhi,mvi,mviy,ni,\
niy,ntstg,oi,oiy,sgf,sgfr,sgh,sh,shy,st,stc,stcy,stg,stgrl,sth,sthrl,sthy,\
stoc,stocg,strl,strv,strvg,strvh,sty,vab,vaccb,vacccq,vaccf,vaccg,vacch,\
vaccq,vacq,vaf,vag,vah,vaq,vavgb,vavgf,vavgg,vavgh,vavglb,vavglf,vavglg,\
vavglh,vbperm,vceqb,vceqf,vceqg,vceqh,vchb,vchf,vchg,vchh,vchlb,vchlf,vchlg,\
vchlh,vclzf,vctzb,vctzf,vctzg,vctzh,verimb,verimf,verimg,verimh,verllb,\
verllf,verllg,verllh,verllvb,verllvf,verllvg,verllvh,veslb,veslf,veslg,veslh,\
veslvb,veslvf,veslvg,veslvh,vesrab,vesraf,vesrag,vesrah,vesravb,vesravf,\
vesravg,vesravh,vesrlb,vesrlf,vesrlg,vesrlh,vesrlvb,vesrlvf,vesrlvg,vesrlvh,\
vfcedb,vfcesb,vfchdb,vfchedb,vfchesb,vfchsb,vflcdb,vflcsb,vflndb,vflnsb,\
vflpdb,vfmaxdb,vfmaxsb,vfmindb,vfminsb,vgbm,vgm,vgmb,vgmf,vgmg,vgmh,vlcb,\
vlcf,vlcg,vlch,vleb,vlef,vleg,vleh,vleib,vleif,vleig,vleih,vlpb,vlpf,vlpg,\
vlph,vmnb,vmnf,vmng,vmnh,vmnlb,vmnlf,vmnlg,vmnlh,vmrhb,vmrhf,vmrhg,vmrhh,\
vmrlb,vmrlf,vmrlg,vmrlh,vmxb,vmxf,vmxg,vmxh,vn,vnc,vnn,vno,vnot,vnx,vo,voc,\
vone,vpdi,vperm,vpkf,vpkg,vpkh,vpklsf,vpklsg,vpklsh,vpksf,vpksg,vpksh,\
vpopct,vpopctb,vpopctf,vpopctg,vpopcth,vrepb,vrepf,vrepg,vreph,vrepib,vrepif,\
vrepig,vrepih,vsb,vsbiq,vscbib,vscbif,vscbig,vscbih,vscbiq,vsegb,vsegf,vsegh,\
vsel,vsf,vsg,vsh,vsl,vslb,vsldb,vsq,vsra,vsrab,vsrl,vsrlb,vuphb,vuphf,\
vuphh,vuplb,vuplf,vuplhb,vuplhf,vuplhh,vuplhw,vupllb,vupllf,vupllh,vx,vzero,\
wfcedb,wfcesb,wfchdb,wfchedb,wfchesb,wfchexb,wfchsb,wfchxb,wflcdb,wflcsb,\
wflcxb,wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wfmaxxb,wfminxb,xi,xiy")) "nothing")
(define_insn_reservation "z14_2" 2
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cdb,cdbr,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,lde,\
ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,lmg,\
lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\
vceqbs,vceqfs,vceqgs,vceqhs,vchbs,vchfs,vchgs,vchhs,vchlbs,vchlfs,vchlgs,\
vchlhs,vfcedbs,vfcesbs,vfchdbs,vfchedbs,vfchesbs,vfchsbs,vfeeb,vfeef,vfeeh,\
vfeneb,vfenef,vfeneh,vfenezb,vfenezf,vfenezh,vftcidb,vftcisb,vistrb,vistrf,\
vistrh,vlgvf,vlgvg,vlgvh,vllezb,vllezf,vllezg,vllezh,vllezlf,vlrepb,vlrepf,\
vlrepg,vlreph,vlrl,vlvgp,vpklsfs,vpklsgs,vpklshs,vpksfs,vpksgs,vpkshs,wfcdb,\
wfcexbs,wfchexbs,wfchxbs,wfcsb")) "nothing")
(define_insn_reservation "z14_3" 3
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cds,cdsy,mgh,mghi,mh,mhi,mhy,std,stdy,ste,stey,\
vcksm,vfeezbs,vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,vgfmh,\
vistrbs,vistrfs,vl,vlbb,vll,vlrlr,vmaeb,vmaef,vmaeh,vmahb,vmahf,vmahh,vmalb,\
vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,vmalhw,vmalob,vmalof,vmaloh,\
vmaob,vmaof,vmaoh,vmeb,vmef,vmeh,vmhb,vmhf,vmhh,vmlb,vmleb,vmlef,vmleh,vmlf,\
vmlhb,vmlhf,vmlhh,vmlhw,vmlob,vmlof,vmloh,vmob,vmof,vmoh,vsumb,vsumgf,\
vsumgh,vsumh,vsumqf,vsumqg,vtm")) "nothing")
(define_insn_reservation "z14_4" 4
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "bas,basr,chhsi,clc,ex,lam,lcgfr,lngfr,lpgfr,lxr,\
lzxr,ms,msfi,msgf,msgfi,msgfr,msr,msy,mvc,oc,ppa,rxsbg,tabort,tbegin,\
tbeginc,tend,vst,vstl,vstrl,vstrlr,xc")) "nothing")
(define_insn_reservation "z14_5" 5
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,cs,csg,csy,msrkc,slb,slbg,\
slbgr,slbr,stm,stmg,stmy")) "nothing")
(define_insn_reservation "z14_6" 6
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "adb,adbr,aeb,aebr,fidbr,fidbra,fiebr,fiebra,\
ldeb,ldebr,ledbr,madbr,mdbr,meeb,meebr,msdbr,msg,msgr,sdb,sdbr,seb,sebr,\
sfpc,vcdgb,vcdlgb,vcgdb,vclgdb,vfadb,vfidb,vfmadb,vfmdb,vfmsdb,vfnmadb,\
vfnmsdb,vfsdb,vldeb,vledb,wcdgb,wcdlgb,wcgdb,wclgdb,wfadb,wfasb,wfisb,wfmadb,\
wfmasb,wfmdb,wfmsb,wfmsdb,wfmssb,wfsdb,wfssb,wldeb,wledb")) "nothing")
(define_insn_reservation "z14_7" 7
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "adtr,cdtr,fidtr,ldetr,msgrkc,sdtr,tdcdt,tdcet,\
vfasb,vfisb,vfmasb,vfmsb,vfmssb,vfnmssb,vfssb,vgef,vgeg,wflld")) "nothing")
(define_insn_reservation "z14_8" 8
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cdsg,flogr,lpq,stpq,vsteb")) "nothing")
(define_insn_reservation "z14_9" 9
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cxfbr,cxgbr,cxlgbr,m,mfy,ml,mlr,mr,stam,wfaxb,\
wfixb,wfsxb")) "nothing")
(define_insn_reservation "z14_10" 10
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,\
celgbr,madb,maeb,maebr,msdb,mseb,msebr,vscef,vsceg")) "nothing")
(define_insn_reservation "z14_11" 11
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "lxdb,lxdbr,lxeb,lxebr,mg,mgrk,mlg,mlgr")) "nothing")
(define_insn_reservation "z14_12" 12
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cfdbr,cfebr,cgdbr,cgebr,clfdbr,clfebr,clgdbr,\
clgebr,cxbr,cxtr,tcxb,tdcxt")) "nothing")
(define_insn_reservation "z14_13" 13
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "axbr,axtr,fixbr,fixbra,fixtr,lcxbr,lnxbr,lpxbr,\
ltxbr,ltxtr,lxdtr,sxbr,sxtr")) "nothing")
(define_insn_reservation "z14_14" 14
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cfxbr,cgxbr,clfxbr,clgxbr,ledtr")) "nothing")
(define_insn_reservation "z14_20" 20
(and (eq_attr "cpu" "z14")
(eq_attr "mnemonic" "cdftr,cdgtr,cdlftr,cdlgtr,cgdtr,cgxtr,clfxtr,\
clgdtr,clgxtr,cxftr,cxgtr,cxlftr,cxlgtr,d,ddb,ddbr,ddtr,deb,debr,dl,dlg,dlgr,\
dlr,dr,dsg,dsgf,dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,\
sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfmaxb,wfmsxb,wfmxb,\
wfnmaxb,wfnmsxb,wfsqdb,wfsqxb")) "nothing")

View File

@ -344,28 +344,26 @@ extern int reload_completed;
/* Kept up to date using the SCHED_VARIABLE_ISSUE hook. */
static rtx_insn *last_scheduled_insn;
#define MAX_SCHED_UNITS 4
static int last_scheduled_unit_distance[MAX_SCHED_UNITS];
#define NUM_SIDES 2
static int current_side = 1;
#define LONGRUNNING_THRESHOLD 20
#define MAX_SCHED_UNITS 4
static int last_scheduled_unit_distance[MAX_SCHED_UNITS][NUM_SIDES];
/* Estimate of number of cycles a long-running insn occupies an
execution unit. */
static unsigned fxd_longrunning[NUM_SIDES];
static unsigned fpd_longrunning[NUM_SIDES];
static int fxd_longrunning[NUM_SIDES];
static int fpd_longrunning[NUM_SIDES];
/* The maximum score added for an instruction whose unit hasn't been
in use for MAX_SCHED_MIX_DISTANCE steps. Increase this value to
give instruction mix scheduling more priority over instruction
grouping. */
#define MAX_SCHED_MIX_SCORE 8
#define MAX_SCHED_MIX_SCORE 2
/* The maximum distance up to which individual scores will be
calculated. Everything beyond this gives MAX_SCHED_MIX_SCORE.
Increase this with the OOO windows size of the machine. */
#define MAX_SCHED_MIX_DISTANCE 100
#define MAX_SCHED_MIX_DISTANCE 70
/* Structure used to hold the components of a S/390 memory
address. A legitimate address on S/390 is of the general
@ -14243,7 +14241,7 @@ s390_z10_prevent_earlyload_conflicts (rtx_insn **ready, int *nready_p)
}
/* Returns TRUE if BB is entered via a fallthru edge and all other
incoming edges are less than unlikely. */
incoming edges are less than likely. */
static bool
s390_bb_fallthru_entry_likely (basic_block bb)
{
@ -14259,28 +14257,29 @@ s390_bb_fallthru_entry_likely (basic_block bb)
FOR_EACH_EDGE (e, ei, bb->preds)
if (e != fallthru_edge
&& e->probability >= profile_probability::unlikely ())
&& e->probability >= profile_probability::likely ())
return false;
return true;
}
/* The s390_sched_state variable tracks the state of the current or
the last instruction group.
struct s390_sched_state
{
/* Number of insns in the group. */
int group_state;
/* Execution side of the group. */
int side;
/* Group can only hold two insns. */
bool group_of_two;
} s390_sched_state;
0,1,2 number of instructions scheduled in the current group
3 the last group is complete - normal insns
4 the last group was a cracked/expanded insn */
static int s390_sched_state = 0;
#define S390_SCHED_STATE_NORMAL 3
#define S390_SCHED_STATE_CRACKED 4
static struct s390_sched_state sched_state = {0, 1, false};
#define S390_SCHED_ATTR_MASK_CRACKED 0x1
#define S390_SCHED_ATTR_MASK_EXPANDED 0x2
#define S390_SCHED_ATTR_MASK_ENDGROUP 0x4
#define S390_SCHED_ATTR_MASK_GROUPALONE 0x8
#define S390_SCHED_ATTR_MASK_GROUPOFTWO 0x10
static unsigned int
s390_get_sched_attrmask (rtx_insn *insn)
@ -14300,7 +14299,6 @@ s390_get_sched_attrmask (rtx_insn *insn)
mask |= S390_SCHED_ATTR_MASK_GROUPALONE;
break;
case PROCESSOR_2964_Z13:
case PROCESSOR_3906_Z14:
if (get_attr_z13_cracked (insn))
mask |= S390_SCHED_ATTR_MASK_CRACKED;
if (get_attr_z13_expanded (insn))
@ -14309,6 +14307,20 @@ s390_get_sched_attrmask (rtx_insn *insn)
mask |= S390_SCHED_ATTR_MASK_ENDGROUP;
if (get_attr_z13_groupalone (insn))
mask |= S390_SCHED_ATTR_MASK_GROUPALONE;
if (get_attr_z13_groupoftwo (insn))
mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO;
break;
case PROCESSOR_3906_Z14:
if (get_attr_z14_cracked (insn))
mask |= S390_SCHED_ATTR_MASK_CRACKED;
if (get_attr_z14_expanded (insn))
mask |= S390_SCHED_ATTR_MASK_EXPANDED;
if (get_attr_z14_endgroup (insn))
mask |= S390_SCHED_ATTR_MASK_ENDGROUP;
if (get_attr_z14_groupalone (insn))
mask |= S390_SCHED_ATTR_MASK_GROUPALONE;
if (get_attr_z14_groupoftwo (insn))
mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO;
break;
default:
gcc_unreachable ();
@ -14324,7 +14336,6 @@ s390_get_unit_mask (rtx_insn *insn, int *units)
switch (s390_tune)
{
case PROCESSOR_2964_Z13:
case PROCESSOR_3906_Z14:
*units = 4;
if (get_attr_z13_unit_lsu (insn))
mask |= 1 << 0;
@ -14335,22 +14346,62 @@ s390_get_unit_mask (rtx_insn *insn, int *units)
if (get_attr_z13_unit_vfu (insn))
mask |= 1 << 3;
break;
case PROCESSOR_3906_Z14:
*units = 4;
if (get_attr_z14_unit_lsu (insn))
mask |= 1 << 0;
if (get_attr_z14_unit_fxa (insn))
mask |= 1 << 1;
if (get_attr_z14_unit_fxb (insn))
mask |= 1 << 2;
if (get_attr_z14_unit_vfu (insn))
mask |= 1 << 3;
break;
default:
gcc_unreachable ();
}
return mask;
}
static bool
s390_is_fpd (rtx_insn *insn)
{
if (insn == NULL_RTX)
return false;
return get_attr_z13_unit_fpd (insn) || get_attr_z14_unit_fpd (insn);
}
static bool
s390_is_fxd (rtx_insn *insn)
{
if (insn == NULL_RTX)
return false;
return get_attr_z13_unit_fxd (insn) || get_attr_z14_unit_fxd (insn);
}
/* Returns TRUE if INSN is a long-running instruction. */
static bool
s390_is_longrunning (rtx_insn *insn)
{
if (insn == NULL_RTX)
return false;
return s390_is_fxd (insn) || s390_is_fpd (insn);
}
/* Return the scheduling score for INSN. The higher the score the
better. The score is calculated from the OOO scheduling attributes
of INSN and the scheduling state s390_sched_state. */
of INSN and the scheduling state sched_state. */
static int
s390_sched_score (rtx_insn *insn)
{
unsigned int mask = s390_get_sched_attrmask (insn);
int score = 0;
switch (s390_sched_state)
switch (sched_state.group_state)
{
case 0:
/* Try to put insns into the first slot which would otherwise
@ -14360,7 +14411,7 @@ s390_sched_score (rtx_insn *insn)
score += 5;
if ((mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
score += 10;
/* fallthrough */
break;
case 1:
/* Prefer not cracked insns while trying to put together a
group. */
@ -14370,6 +14421,11 @@ s390_sched_score (rtx_insn *insn)
score += 10;
if ((mask & S390_SCHED_ATTR_MASK_ENDGROUP) == 0)
score += 5;
/* If we are in a group of two already, try to schedule another
group-of-two insn to avoid shortening another group. */
if (sched_state.group_of_two
&& (mask & S390_SCHED_ATTR_MASK_GROUPOFTWO) != 0)
score += 15;
break;
case 2:
/* Prefer not cracked insns while trying to put together a
@ -14381,21 +14437,10 @@ s390_sched_score (rtx_insn *insn)
/* Prefer endgroup insns in the last slot. */
if ((mask & S390_SCHED_ATTR_MASK_ENDGROUP) != 0)
score += 10;
break;
case S390_SCHED_STATE_NORMAL:
/* Prefer not cracked insns if the last was not cracked. */
if ((mask & S390_SCHED_ATTR_MASK_CRACKED) == 0
&& (mask & S390_SCHED_ATTR_MASK_EXPANDED) == 0)
score += 5;
if ((mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
score += 10;
break;
case S390_SCHED_STATE_CRACKED:
/* Try to keep cracked insns together to prevent them from
interrupting groups. */
if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
|| (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0)
score += 5;
/* Try to avoid group-of-two insns in the last slot as they will
shorten this group as well as the next one. */
if ((mask & S390_SCHED_ATTR_MASK_GROUPOFTWO) != 0)
score = MAX (0, score - 15);
break;
}
@ -14413,23 +14458,37 @@ s390_sched_score (rtx_insn *insn)
CPU. */
for (i = 0; i < units; i++, m <<= 1)
if (m & unit_mask)
score += (last_scheduled_unit_distance[i] * MAX_SCHED_MIX_SCORE /
MAX_SCHED_MIX_DISTANCE);
score += (last_scheduled_unit_distance[i][sched_state.side]
* MAX_SCHED_MIX_SCORE / MAX_SCHED_MIX_DISTANCE);
unsigned latency = insn_default_latency (insn);
int other_side = 1 - current_side;
int other_side = 1 - sched_state.side;
/* Try to delay long-running insns when side is busy. */
if (latency > LONGRUNNING_THRESHOLD)
if (s390_is_longrunning (insn))
{
if (get_attr_z13_unit_fxu (insn) && fxd_longrunning[current_side]
&& fxd_longrunning[other_side] <= fxd_longrunning[current_side])
score = MAX (0, score - 10);
if (s390_is_fxd (insn))
{
if (fxd_longrunning[sched_state.side]
&& fxd_longrunning[other_side]
<= fxd_longrunning[sched_state.side])
score = MAX (0, score - 10);
if (get_attr_z13_unit_vfu (insn) && fpd_longrunning[current_side]
&& fpd_longrunning[other_side] <= fpd_longrunning[current_side])
score = MAX (0, score - 10);
else if (fxd_longrunning[other_side]
>= fxd_longrunning[sched_state.side])
score += 10;
}
if (s390_is_fpd (insn))
{
if (fpd_longrunning[sched_state.side]
&& fpd_longrunning[other_side]
<= fpd_longrunning[sched_state.side])
score = MAX (0, score - 10);
else if (fpd_longrunning[other_side]
>= fpd_longrunning[sched_state.side])
score += 10;
}
}
}
@ -14500,7 +14559,7 @@ s390_sched_reorder (FILE *file, int verbose,
if (verbose > 5)
{
fprintf (file, "ready list ooo attributes - sched state: %d\n",
s390_sched_state);
sched_state.group_state);
for (i = last_index; i >= 0; i--)
{
@ -14551,7 +14610,7 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
{
last_scheduled_insn = insn;
bool starts_group = false;
bool ends_group = false;
if (s390_tune >= PROCESSOR_2827_ZEC12
&& reload_completed
@ -14559,37 +14618,31 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
{
unsigned int mask = s390_get_sched_attrmask (insn);
if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
|| (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0
|| (mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
starts_group = true;
if ((mask & S390_SCHED_ATTR_MASK_GROUPOFTWO) != 0)
sched_state.group_of_two = true;
if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
|| (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0)
s390_sched_state = S390_SCHED_STATE_CRACKED;
else if ((mask & S390_SCHED_ATTR_MASK_ENDGROUP) != 0
|| (mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
s390_sched_state = S390_SCHED_STATE_NORMAL;
else
/* If this is a group-of-two insn, we actually ended the last group
and this insn is the first one of the new group. */
if (sched_state.group_state == 2 && sched_state.group_of_two)
{
/* Only normal insns are left (mask == 0). */
switch (s390_sched_state)
{
case 0:
starts_group = true;
/* fallthrough */
case 1:
case 2:
s390_sched_state++;
break;
case S390_SCHED_STATE_NORMAL:
starts_group = true;
s390_sched_state = 1;
break;
case S390_SCHED_STATE_CRACKED:
s390_sched_state = S390_SCHED_STATE_NORMAL;
break;
}
sched_state.side = sched_state.side ? 0 : 1;
sched_state.group_state = 0;
}
/* Longrunning and side bookkeeping. */
for (int i = 0; i < 2; i++)
{
fxd_longrunning[i] = MAX (0, fxd_longrunning[i] - 1);
fpd_longrunning[i] = MAX (0, fpd_longrunning[i] - 1);
}
unsigned latency = insn_default_latency (insn);
if (s390_is_longrunning (insn))
{
if (s390_is_fxd (insn))
fxd_longrunning[sched_state.side] = latency;
else
fpd_longrunning[sched_state.side] = latency;
}
if (s390_tune >= PROCESSOR_2964_Z13)
@ -14602,30 +14655,40 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
for (i = 0; i < units; i++, m <<= 1)
if (m & unit_mask)
last_scheduled_unit_distance[i] = 0;
else if (last_scheduled_unit_distance[i] < MAX_SCHED_MIX_DISTANCE)
last_scheduled_unit_distance[i]++;
last_scheduled_unit_distance[i][sched_state.side] = 0;
else if (last_scheduled_unit_distance[i][sched_state.side]
< MAX_SCHED_MIX_DISTANCE)
last_scheduled_unit_distance[i][sched_state.side]++;
}
/* If this insn started a new group, the side flipped. */
if (starts_group)
current_side = current_side ? 0 : 1;
for (int i = 0; i < 2; i++)
if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
|| (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0
|| (mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0
|| (mask & S390_SCHED_ATTR_MASK_ENDGROUP) != 0)
{
if (fxd_longrunning[i] >= 1)
fxd_longrunning[i] -= 1;
if (fpd_longrunning[i] >= 1)
fpd_longrunning[i] -= 1;
sched_state.group_state = 0;
ends_group = true;
}
unsigned latency = insn_default_latency (insn);
if (latency > LONGRUNNING_THRESHOLD)
else
{
if (get_attr_z13_unit_fxu (insn))
fxd_longrunning[current_side] = latency;
else
fpd_longrunning[current_side] = latency;
switch (sched_state.group_state)
{
case 0:
sched_state.group_state++;
break;
case 1:
sched_state.group_state++;
if (sched_state.group_of_two)
{
sched_state.group_state = 0;
ends_group = true;
}
break;
case 2:
sched_state.group_state++;
ends_group = true;
break;
}
}
if (verbose > 5)
@ -14654,7 +14717,7 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
fprintf (file, " %d", j);
fprintf (file, ")");
}
fprintf (file, " sched state: %d\n", s390_sched_state);
fprintf (file, " sched state: %d\n", sched_state.group_state);
if (s390_tune >= PROCESSOR_2964_Z13)
{
@ -14662,12 +14725,21 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
s390_get_unit_mask (insn, &units);
fprintf (file, ";;\t\tBACKEND: units unused for: ");
fprintf (file, ";;\t\tBACKEND: units on this side unused for: ");
for (j = 0; j < units; j++)
fprintf (file, "%d:%d ", j, last_scheduled_unit_distance[j]);
fprintf (file, "%d:%d ", j,
last_scheduled_unit_distance[j][sched_state.side]);
fprintf (file, "\n");
}
}
/* If this insn ended a group, the next will be on the other side. */
if (ends_group)
{
sched_state.group_state = 0;
sched_state.side = sched_state.side ? 0 : 1;
sched_state.group_of_two = false;
}
}
if (GET_CODE (PATTERN (insn)) != USE
@ -14682,13 +14754,10 @@ s390_sched_init (FILE *file ATTRIBUTE_UNUSED,
int verbose ATTRIBUTE_UNUSED,
int max_ready ATTRIBUTE_UNUSED)
{
last_scheduled_insn = NULL;
memset (last_scheduled_unit_distance, 0, MAX_SCHED_UNITS * sizeof (int));
/* If the next basic block is most likely entered via a fallthru edge
we keep the last sched state. Otherwise we start a new group.
The scheduler traverses basic blocks in "instruction stream" ordering
so if we see a fallthru edge here, s390_sched_state will be of its
so if we see a fallthru edge here, sched_state will be of its
source block.
current_sched_info->prev_head is the insn before the first insn of the
@ -14698,7 +14767,13 @@ s390_sched_init (FILE *file ATTRIBUTE_UNUSED,
? NEXT_INSN (current_sched_info->prev_head) : NULL;
basic_block bb = insn ? BLOCK_FOR_INSN (insn) : NULL;
if (s390_tune < PROCESSOR_2964_Z13 || !s390_bb_fallthru_entry_likely (bb))
s390_sched_state = 0;
{
last_scheduled_insn = NULL;
memset (last_scheduled_unit_distance, 0,
MAX_SCHED_UNITS * NUM_SIDES * sizeof (int));
sched_state.group_state = 0;
sched_state.group_of_two = false;
}
}
/* This target hook implementation for TARGET_LOOP_UNROLL_ADJUST calculates

View File

@ -44,7 +44,7 @@ enum processor_flags
/* This is necessary to avoid a warning about comparing different enum
types. */
#define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_2964_Z13 ? PROCESSOR_2964_Z13 : s390_tune ))
#define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_3906_Z14 ? PROCESSOR_3906_Z14 : s390_tune ))
/* These flags indicate that the generated code should run on a cpu
providing the respective hardware facility regardless of the

View File

@ -595,6 +595,9 @@
;; Pipeline description for z13
(include "2964.md")
;; Pipeline description for z14
(include "3906.md")
;; Predicates
(include "predicates.md")

View File

@ -1,3 +1,7 @@
2019-03-12 Robin Dapp <rdapp@linux.ibm.com>
* gcc.target/s390/memset-1.c: Adapt test case for new scheduling.
2019-03-12 Martin Liska <mliska@suse.cz>
* gfortran.dg/abstract_type_3.f03: Amend test-case scan

View File

@ -74,7 +74,7 @@ void
return __builtin_memset (s, c, 1029);
}
/* 2 stc 1 stcy 3 mvc - displacement overflow after the first */
/* 3 stc 3 mvc - displacement overflow after the first */
void
*memset10(void *s, int c)
{
@ -172,6 +172,6 @@ void
/* { dg-final { scan-assembler-times "mvi\\s" 1 } } */
/* { dg-final { scan-assembler-times "mvc\\s" 20 } } */
/* { dg-final { scan-assembler-times "xc\\s" 28 } } */
/* { dg-final { scan-assembler-times "stc\\s" 21 } } */
/* { dg-final { scan-assembler-times "stcy\\s" 1 } } */
/* { dg-final { scan-assembler-times "stc\\s" 22 } } */
/* { dg-final { scan-assembler-times "stcy\\s" 0 } } */
/* { dg-final { scan-assembler-times "pfd\\s" 2 } } */