Commit ae26d57f authored by Keith Randall's avatar Keith Randall Committed by Keith Randall

cmd/compile: update SSA TODO file

Get rid of a bunch of stuff we've already done.

Change-Id: Ibae4be7535ddb58590a072a2390c5f3e948c2fd7
Reviewed-on: https://go-review.googlesource.com/109136Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 2083b5d6
This is a list of things that need to be worked on. It will hopefully This is a list of possible improvements to the SSA pass of the compiler.
be complete soon.
Correctness
-----------
- Debugging info (check & fix as much as we can)
Optimizations (better compiled code) Optimizations (better compiled code)
------------------------------------ ------------------------------------
- Reduce register pressure in scheduler - Reduce register pressure in scheduler
- More strength reduction: multiply -> shift/add combos (Worth doing?)
- Add a value range propagation pass (for bounds elim & bitwidth reduction)
- Make dead store pass inter-block - Make dead store pass inter-block
- If there are a lot of MOVQ $0, ..., then load - If there are a lot of MOVQ $0, ..., then load
0 into a register and use the register as the source instead. 0 into a register and use the register as the source instead.
- Allow arrays of length 1 (or longer, with all constant indexes?) to be SSAable. - Allow large structs to be SSAable (issue 24416)
- Allow arrays of length >1 to be SSAable
- If strings are being passed around without being interpreted (ptr - If strings are being passed around without being interpreted (ptr
and len fields being accessed) pass them in xmm registers? and len fields being accessed) pass them in xmm registers?
Same for interfaces? Same for interfaces?
- Non-constant rotate detection.
- Do 0 <= x && x < n with one unsigned compare
- nil-check removal in indexed load/store case:
lea (%rdx,%rax,1),%rcx
test %al,(%rcx) // nil check
mov (%rdx,%rax,1),%cl // load to same address
- any pointer generated by unsafe arithmetic must be non-nil? - any pointer generated by unsafe arithmetic must be non-nil?
(Of course that may not be true in general, but it is for all uses (Of course that may not be true in general, but it is for all uses
in the runtime, and we can play games with unsafe.) in the runtime, and we can play games with unsafe.)
...@@ -33,14 +21,4 @@ Optimizations (better compiler) ...@@ -33,14 +21,4 @@ Optimizations (better compiler)
Regalloc Regalloc
-------- --------
- Make less arch-dependent
- Handle 2-address instructions
- Make liveness analysis non-quadratic - Make liveness analysis non-quadratic
Future/other
------------
- Start another architecture (arm?)
- 64-bit ops on 32-bit machines
- Should we get rid of named types in favor of underlying types during SSA generation?
- Infrastructure for enabling/disabling/configuring passes
- Modify logging for at least pass=1, to be Warnl compatible
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment