]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: make modified Aux type for OpArgXXXX pass ssa/check
authorDavid Chase <drchase@google.com>
Mon, 1 Mar 2021 16:02:48 +0000 (11:02 -0500)
committerDavid Chase <drchase@google.com>
Wed, 3 Mar 2021 15:01:05 +0000 (15:01 +0000)
For #40724.

Change-Id: I7d1e76139d187cd15a6e0df9d19542b7200589f6
Reviewed-on: https://go-review.googlesource.com/c/go/+/297911
Trust: David Chase <drchase@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/ssa/check.go
src/cmd/compile/internal/ssa/gen/genericOps.go
src/cmd/compile/internal/ssa/op.go
src/cmd/compile/internal/ssa/opGen.go
src/cmd/compile/internal/ssa/value.go

index 9e4aa6cd79f27d7bb6fddc9d3bbef1e77c7dd09a..969fd96dbf573cf67483a1f740f5880fb5d8940e 100644 (file)
@@ -182,6 +182,12 @@ func checkFunc(f *Func) {
                                        f.Fatalf("value %v has Aux type %T, want *AuxCall", v, v.Aux)
                                }
                                canHaveAux = true
+                       case auxNameOffsetInt8:
+                               if _, ok := v.Aux.(*AuxNameOffset); !ok {
+                                       f.Fatalf("value %v has Aux type %T, want *AuxNameOffset", v, v.Aux)
+                               }
+                               canHaveAux = true
+                               canHaveAuxInt = true
                        case auxSym, auxTyp:
                                canHaveAux = true
                        case auxSymOff, auxSymValAndOff, auxTypSize:
index b730c436cf905c61570c8ca0b6a72f8e0e2da12e..ee85156a42887c1c11c22cca0c96fd2228f6379a 100644 (file)
@@ -336,8 +336,8 @@ var genericOps = []opData{
 
        // Like Arg, these are generic ops that survive lowering. AuxInt is a register index, and the actual output register for each index is defined by the architecture.
        // AuxInt = integer argument index (not a register number). ABI-specified spill loc obtained from function
-       {name: "ArgIntReg", aux: "Int8", zeroWidth: true},   // argument to the function in an int reg.
-       {name: "ArgFloatReg", aux: "Int8", zeroWidth: true}, // argument to the function in a float reg.
+       {name: "ArgIntReg", aux: "NameOffsetInt8", zeroWidth: true},   // argument to the function in an int reg.
+       {name: "ArgFloatReg", aux: "NameOffsetInt8", zeroWidth: true}, // argument to the function in a float reg.
 
        // The address of a variable.  arg0 is the base pointer.
        // If the variable is a global, the base pointer will be SB and
index f704848425fcddc41d2cca741fdfa178b5d7024c..0bc7b0ca0d9a517a9d3fe391743e9c99cdb3e529 100644 (file)
@@ -240,26 +240,27 @@ func OwnAuxCall(fn *obj.LSym, args []Param, results []Param, paramResultInfo *ab
 }
 
 const (
-       auxNone         auxType = iota
-       auxBool                 // auxInt is 0/1 for false/true
-       auxInt8                 // auxInt is an 8-bit integer
-       auxInt16                // auxInt is a 16-bit integer
-       auxInt32                // auxInt is a 32-bit integer
-       auxInt64                // auxInt is a 64-bit integer
-       auxInt128               // auxInt represents a 128-bit integer.  Always 0.
-       auxUInt8                // auxInt is an 8-bit unsigned integer
-       auxFloat32              // auxInt is a float32 (encoded with math.Float64bits)
-       auxFloat64              // auxInt is a float64 (encoded with math.Float64bits)
-       auxFlagConstant         // auxInt is a flagConstant
-       auxString               // aux is a string
-       auxSym                  // aux is a symbol (a *gc.Node for locals, an *obj.LSym for globals, or nil for none)
-       auxSymOff               // aux is a symbol, auxInt is an offset
-       auxSymValAndOff         // aux is a symbol, auxInt is a ValAndOff
-       auxTyp                  // aux is a type
-       auxTypSize              // aux is a type, auxInt is a size, must have Aux.(Type).Size() == AuxInt
-       auxCCop                 // aux is a ssa.Op that represents a flags-to-bool conversion (e.g. LessThan)
-       auxCall                 // aux is a *ssa.AuxCall
-       auxCallOff              // aux is a *ssa.AuxCall, AuxInt is int64 param (in+out) size
+       auxNone           auxType = iota
+       auxBool                   // auxInt is 0/1 for false/true
+       auxInt8                   // auxInt is an 8-bit integer
+       auxInt16                  // auxInt is a 16-bit integer
+       auxInt32                  // auxInt is a 32-bit integer
+       auxInt64                  // auxInt is a 64-bit integer
+       auxInt128                 // auxInt represents a 128-bit integer.  Always 0.
+       auxUInt8                  // auxInt is an 8-bit unsigned integer
+       auxFloat32                // auxInt is a float32 (encoded with math.Float64bits)
+       auxFloat64                // auxInt is a float64 (encoded with math.Float64bits)
+       auxFlagConstant           // auxInt is a flagConstant
+       auxNameOffsetInt8         // aux is a &struct{Name ir.Name, Offset int64}; auxInt is index in parameter registers array
+       auxString                 // aux is a string
+       auxSym                    // aux is a symbol (a *gc.Node for locals, an *obj.LSym for globals, or nil for none)
+       auxSymOff                 // aux is a symbol, auxInt is an offset
+       auxSymValAndOff           // aux is a symbol, auxInt is a ValAndOff
+       auxTyp                    // aux is a type
+       auxTypSize                // aux is a type, auxInt is a size, must have Aux.(Type).Size() == AuxInt
+       auxCCop                   // aux is a ssa.Op that represents a flags-to-bool conversion (e.g. LessThan)
+       auxCall                   // aux is a *ssa.AuxCall
+       auxCallOff                // aux is a *ssa.AuxCall, AuxInt is int64 param (in+out) size
 
        // architecture specific aux types
        auxARM64BitField     // aux is an arm64 bitfield lsb and width packed into auxInt
index a26eec680fdc47f4ea81a94e35df6ee098d7a0be..a9565ffe4bb11ec73ebe8d057b6fa8c28a1f86a2 100644 (file)
@@ -35445,14 +35445,14 @@ var opcodeTable = [...]opInfo{
        },
        {
                name:      "ArgIntReg",
-               auxType:   auxInt8,
+               auxType:   auxNameOffsetInt8,
                argLen:    0,
                zeroWidth: true,
                generic:   true,
        },
        {
                name:      "ArgFloatReg",
-               auxType:   auxInt8,
+               auxType:   auxNameOffsetInt8,
                argLen:    0,
                zeroWidth: true,
                generic:   true,
index 55e4b684c15464dcf3320b978fc60a46e1e8f448..127e4ce64136af282a0cfcd3c6c216bbafa694dd 100644 (file)
@@ -78,7 +78,7 @@ func (v *Value) String() string {
 }
 
 func (v *Value) AuxInt8() int8 {
-       if opcodeTable[v.Op].auxType != auxInt8 {
+       if opcodeTable[v.Op].auxType != auxInt8 && opcodeTable[v.Op].auxType != auxNameOffsetInt8 {
                v.Fatalf("op %s doesn't have an int8 aux field", v.Op)
        }
        return int8(v.AuxInt)