diff options
author | Keith Randall <khr@golang.org> | 2015-05-28 13:49:20 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2015-05-28 13:51:18 -0700 |
commit | 067e8dfd82163ddcbde248dbe5a1187a417e5d36 (patch) | |
tree | 7bfb46b901d03498c7739c92bec21d81d3a2c485 /src/cmd/compile/internal/ssa/TODO | |
parent | 247786c1745abc0c7185f7c15ca256edf68ed6d6 (diff) | |
parent | ccc037699e2966b7c79ba84c67471cef5e67a3b8 (diff) | |
download | go-067e8dfd82163ddcbde248dbe5a1187a417e5d36.tar.gz go-067e8dfd82163ddcbde248dbe5a1187a417e5d36.zip |
[dev.ssa] Merge remote-tracking branch 'origin/master' into mergebranch
Semi-regular merge of tip to dev.ssa.
Complicated a bit by the move of cmd/internal/* to cmd/compile/internal/*.
Change-Id: I1c66d3c29bb95cce4a53c5a3476373aa5245303d
Diffstat (limited to 'src/cmd/compile/internal/ssa/TODO')
-rw-r--r-- | src/cmd/compile/internal/ssa/TODO | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/TODO b/src/cmd/compile/internal/ssa/TODO new file mode 100644 index 0000000000..afb723ae4c --- /dev/null +++ b/src/cmd/compile/internal/ssa/TODO @@ -0,0 +1,47 @@ +This is a list of things that need to be worked on. It is by no means complete. + +Allocation +- Allocation of decls in stackalloc. Decls survive if they are + addrtaken or are too large for registerization. + +Scheduling + - Make sure loads are scheduled correctly with respect to stores. + Same for flag type values. We can't have more than one value of + mem or flag types live at once. + - Reduce register pressure. Schedule instructions which kill + variables first. + +Values + - Add a line number field. Figure out how to populate it and + maintain it during rewrites. + - Store *Type instead of Type? Keep an array of used Types in Func + and reference by id? Unify with the type ../gc so we just use a + pointer instead of an interface? + - Recycle dead values instead of using GC to do that. + - A lot of Aux fields are just int64. Add a separate AuxInt field? + If not that, then cache the interfaces that wrap int64s. + - OpStore uses 3 args. Increase the size of argstorage to 3? + +Opcodes + - Rename ops to prevent cross-arch conflicts. MOVQ -> MOVQamd64 (or + MOVQ6?). Other option: build opcode table in Config instead of globally. + - Remove asm string from opinfo, no longer needed. + - It's annoying to list the opcode both in the opcode list and an + opInfo map entry. Specify it one place and use go:generate to + produce both? + +Regalloc + - Make less arch-dependent + - Don't spill everything at every basic block boundary. + - Allow args and return values to be ssa-able. + - Handle 2-address instructions. + +Rewrites + - Strength reduction (both arch-indep and arch-dependent?) + - Code sequence for shifts >= wordsize + - Start another architecture (arm?) + +Common-Subexpression Elimination + - Make better decision about which value in an equivalence class we should + choose to replace other values in that class. + - Can we move control values out of their basic block? |