From: Keith Randall Date: Wed, 24 Feb 2016 21:08:00 +0000 (-0800) Subject: [dev.ssa] cmd/compile: update TODO X-Git-Tag: go1.7beta1~1623^2^2~23 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e173ab14345b1f205a8f14e25a81184752a9d43b;p=gostls13.git [dev.ssa] cmd/compile: update TODO Remove the stuff that's already done. Change-Id: I3b4fc827240d45dd051dc36897883532d8900a0c Reviewed-on: https://go-review.googlesource.com/19906 Reviewed-by: David Chase --- diff --git a/src/cmd/compile/internal/ssa/TODO b/src/cmd/compile/internal/ssa/TODO index 5e5cb4b865..91983476a2 100644 --- a/src/cmd/compile/internal/ssa/TODO +++ b/src/cmd/compile/internal/ssa/TODO @@ -14,11 +14,8 @@ Optimizations (better compiled code) ------------------------------------ - Reduce register pressure in scheduler - More strength reduction: multiply -> shift/add combos (Worth doing?) -- Strength reduction: constant divides -> multiply -- Expand current optimizations to all bit widths - Add a value range propagation pass (for bounds elim & bitwidth reduction) - Make dead store pass inter-block -- (x86) More combining address arithmetic into loads/stores - redundant CMP in sequences like this: SUBQ $8, AX CMP AX, $0 @@ -31,15 +28,6 @@ Optimizations (better compiled code) - If strings are being passed around without being interpreted (ptr and len feilds being accessed) pass them in xmm registers? Same for interfaces? -- boolean logic: movb/xorb$1/testb/jeq -> movb/testb/jne -- (ADDQconst (SUBQconst x)) and vice-versa -- store followed by load to same address -- (CMPconst [0] (AND x y)) -> (TEST x y) -- more (LOAD (ADDQ )) -> LOADIDX -- CMPL/SETEQ/TESTB/JEQ -> CMPL/JEQ - CMPL/SETGE/TESTB/JEQ -- blockEQ (CMP x x) -- better computing of &&/|| in non-if/for contexts - OpArrayIndex should take its index in AuxInt, not a full value. - remove FLAGS from REP instruction clobbers - (x86) Combine loads into other ops @@ -52,10 +40,8 @@ Optimizations (better compiled code) Optimizations (better compiler) ------------------------------- - Smaller Value.Type (int32 or ptr)? Get rid of types altogether? -- Recycle dead Values (and Blocks) explicitly instead of using GC - OpStore uses 3 args. Increase the size of Value.argstorage to 3? - Constant cache -- Reuseable slices (e.g. []int of size NumValues()) cached in Func - Handle signed division overflow and sign extension earlier - Implement 64 bit const division with high multiply, maybe in the frontend? - Add bit widths to complex ops