From: David Given Date: Wed, 22 May 2013 09:55:13 +0000 (+0100) Subject: Optimise direct access to globals, and incrementing and decrementing locals. X-Git-Tag: release-6-0-pre-5~10^2~50 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=9e556d8b7ba8f8eb8ff731677935189a0c52af7b;p=ack.git Optimise direct access to globals, and incrementing and decrementing locals. --HG-- branch : dtrg-videocore --- diff --git a/mach/vc4/ncg/table b/mach/vc4/ncg/table index c8dbcb77c..a82fc49fb 100644 --- a/mach/vc4/ncg/table +++ b/mach/vc4/ncg/table @@ -276,12 +276,10 @@ PATTERNS with GPRI GPRI yields %1 %2 -#if 0 pat stl lol $1==$2 /* Store then load local */ leaving dup QUAD stl $1 -#endif pat lal sti lal loi $1==$3 && $2==$4 /* Store then load local, of a different size */ leaving @@ -352,8 +350,8 @@ PATTERNS pat lal /* Load address of local */ uses REG gen - add %a, FP, {CONST, $1} - sub %a, GP + sub %a, FP, GP + add %a, {CONST, $1} yields %a pat lol inreg($1)>0 /* Load from local */ @@ -367,8 +365,8 @@ PATTERNS pat ldl /* Load double-word from local */ leaving - lal $1 - loi QUAD*2 + lol $1 + QUAD*0 + lol $1 + QUAD*1 pat stl inreg($1)>0 /* Store to local */ with CONST+GPRI @@ -383,8 +381,8 @@ PATTERNS pat sdl /* Store double-word to local */ leaving - lal $1 - sti QUAD*2 + stl $1 + QUAD*1 + stl $1 + QUAD*0 pat lil inreg($1)>0 /* Load from indirected local */ uses REG @@ -404,26 +402,36 @@ PATTERNS pat stl lol $1==$2 /* Save then load (generated by C compiler) */ leaving - dup 4 + dup QUAD stl $1 - pat zrl /* Zero local */ + pat zrl /* Zero local */ leaving loc 0 stl $1 - pat inl /* Increment local */ + pat inl inreg($1)>0 /* Increment local in register */ + kills regvar($1) + gen + add {GPRE, regvar($1)}, {CONST, 1} + + pat inl inreg($1)<=0 /* Increment local */ leaving lol $1 loc 1 - adi 4 + adi QUAD stl $1 - pat del /* Decrement local */ + pat del inreg($1)>0 /* Decrement local in register */ + kills regvar($1) + gen + sub {GPRE, regvar($1)}, {CONST, 1} + + pat del inreg($1)<=0 /* Decrement local */ leaving lol $1 loc 1 - sbi 4 + sbi QUAD stl $1 @@ -512,6 +520,11 @@ PATTERNS /* Loads and stores */ pat loi $1==BYTE /* Load byte indirect */ + with LABEL + uses REG + gen + ldb %a, %1 + yields %a with GPR uses reusing %1, REG gen @@ -523,51 +536,46 @@ PATTERNS ldb %a, {GPRGPR, %1.reg, GP} yields %a -#if 0 - pat loi loc loc cii $1==WORD && $2==WORD && $3==QUAD /* Load half-word indirect and sign extend */ - with GPR + pat loi loc loc cii $1==WORD && $2==WORD && $3==QUAD /* Load short indirect and sign extend */ + with LABEL uses REG gen - lha %a, {GPROFFSET, %1, 0} + ldhs %a, %1 yields %a - with SUM_RR + with GPRI uses reusing %1, REG gen - lhax %a, %1.reg1, %1.reg2 - yields %a - with SUM_RC - uses REG - gen - move {IND_RC_H_S, %1.reg, %1.off}, %a + add %a, %1, GP + ldhs %a, {GPROFFSET, %a, 0} yields %a - pat loi $1==WORD /* Load half-word indirect */ - with GPR + pat loi $1==WORD /* Load short indirect */ + with LABEL uses REG gen - lhz %a, {GPROFFSET, %1, 0} + ldh %a, %1 yields %a - with SUM_RR + with GPRI uses reusing %1, REG gen - lhzx %a, %1.reg1, %1.reg2 + add %a, %1, GP + ldh %a, {GPROFFSET, %a, 0} yields %a - with SUM_RC + + pat loi $1==QUAD /* Load quad indirect */ + with LABEL uses REG gen - move {IND_RC_H, %1.reg, %1.off}, %a + ld %a, %1 yields %a -#endif - - pat loi $1==QUAD /* Load quad indirect */ - with GPR + with GPRI uses reusing %1, REG gen add %a, %1, GP ld %a, {GPROFFSET, %a, 0} yields %a - pat loi /* Load arbitrary size */ + pat loi !nicesize($1) /* Load arbitrary size */ leaving loc $1 los QUAD @@ -579,6 +587,9 @@ PATTERNS bl {LABEL, ".los"} pat sti $1==BYTE /* Store byte indirect */ + with LABEL GPRI + gen + stb %2, %1 with GPR GPRI gen stb %2, {GPRGPR, %1, GP} @@ -587,15 +598,21 @@ PATTERNS stb %2, {GPRGPR, %1.reg, GP} pat sti $1==WORD /* Store half-word indirect */ - with GPR GPR - uses REG + with LABEL GPRI + gen + sth %2, %1 + with GPRI GPRI + uses reusing %1, REG gen add %a, %1, GP sth %2, {GPROFFSET, %a, 0} pat sti $1==QUAD /* Store quad indirect */ - with GPR GPR - uses REG + with LABEL GPRI + gen + st %2, %1 + with GPRI GPRI + uses reusing %1, REG gen add %a, %1, GP st %2, {GPROFFSET, %a, 0}