1
2
3
4
5 package ssacompile
6
7 import (
8 "cmd/compile/internal/ssa"
9 "cmd/compile/internal/ssa/ssaop"
10 )
11
12
13 func lower(f *ssa.Func) {
14
15 applyRewrite(f, f.Config.LowerBlock, f.Config.LowerValue, ssa.RemoveDeadValues)
16 }
17
18
19 func lateLower(f *ssa.Func) {
20
21 if f.Config.LateLowerValue != nil {
22 applyRewrite(f, f.Config.LateLowerBlock, f.Config.LateLowerValue, ssa.RemoveDeadValues)
23 }
24 }
25
26
27 func checkLower(f *ssa.Func) {
28
29
30
31 for _, b := range f.Blocks {
32 for _, v := range b.Values {
33 if !ssaop.OpcodeTable[v.Op].Generic {
34 continue
35 }
36 switch v.Op {
37 case ssaop.OpSP, ssaop.OpSPanchored, ssaop.OpSB, ssaop.OpInitMem, ssaop.OpArg, ssaop.OpArgIntReg, ssaop.OpArgFloatReg, ssaop.OpPhi, ssaop.OpVarDef, ssaop.OpVarLive, ssaop.OpKeepAlive, ssaop.OpSelect0, ssaop.OpSelect1, ssaop.OpSelectN, ssaop.OpConvert, ssaop.OpInlMark, ssaop.OpWBend:
38 continue
39 case ssaop.OpMakeResult:
40 if b.Controls[0] == v {
41 continue
42 }
43 case ssaop.OpGetG:
44 if f.Config.HasGReg {
45
46 continue
47 }
48 }
49 s := "not lowered: " + v.String() + ", " + v.Op.String() + " " + v.Type.SimpleString()
50
51 for _, a := range v.Args {
52 s += " " + a.Type.SimpleString()
53 }
54 f.Fatalf("%s", s)
55 }
56 }
57 }
58
View as plain text