type Value … // short form print. Just v#. func (v *Value) String() string { … } func (v *Value) AuxInt8() int8 { … } func (v *Value) AuxUInt8() uint8 { … } func (v *Value) AuxInt16() int16 { … } func (v *Value) AuxInt32() int32 { … } // AuxUnsigned returns v.AuxInt as an unsigned value for OpConst*. // v.AuxInt is always sign-extended to 64 bits, even if the // represented value is unsigned. This undoes that sign extension. func (v *Value) AuxUnsigned() uint64 { … } func (v *Value) AuxFloat() float64 { … } func (v *Value) AuxValAndOff() ValAndOff { … } func (v *Value) AuxArm64BitField() arm64BitField { … } // long form print. v# = opcode <type> [aux] args [: reg] (names) func (v *Value) LongString() string { … } func (v *Value) auxString() string { … } // If/when midstack inlining is enabled (-l=4), the compiler gets both larger and slower. // Not-inlining this method is a help (*Value.reset and *Block.NewValue0 are similar). // //go:noinline func (v *Value) AddArg(w *Value) { … } //go:noinline func (v *Value) AddArg2(w1, w2 *Value) { … } //go:noinline func (v *Value) AddArg3(w1, w2, w3 *Value) { … } //go:noinline func (v *Value) AddArg4(w1, w2, w3, w4 *Value) { … } //go:noinline func (v *Value) AddArg5(w1, w2, w3, w4, w5 *Value) { … } //go:noinline func (v *Value) AddArg6(w1, w2, w3, w4, w5, w6 *Value) { … } func (v *Value) AddArgs(a ...*Value) { … } func (v *Value) SetArg(i int, w *Value) { … } func (v *Value) SetArgs1(a *Value) { … } func (v *Value) SetArgs2(a, b *Value) { … } func (v *Value) SetArgs3(a, b, c *Value) { … } func (v *Value) resetArgs() { … } // reset is called from most rewrite rules. // Allowing it to be inlined increases the size // of cmd/compile by almost 10%, and slows it down. // //go:noinline func (v *Value) reset(op Op) { … } // invalidateRecursively marks a value as invalid (unused) // and after decrementing reference counts on its Args, // also recursively invalidates any of those whose use // count goes to zero. It returns whether any of the // invalidated values was marked with IsStmt. // // BEWARE of doing this *before* you've applied intended // updates to SSA. func (v *Value) invalidateRecursively() bool { … } // copyOf is called from rewrite rules. // It modifies v to be (Copy a). // //go:noinline func (v *Value) copyOf(a *Value) { … } // copyInto makes a new value identical to v and adds it to the end of b. // unlike copyIntoWithXPos this does not check for v.Pos being a statement. func (v *Value) copyInto(b *Block) *Value { … } // copyIntoWithXPos makes a new value identical to v and adds it to the end of b. // The supplied position is used as the position of the new value. // Because this is used for rematerialization, check for case that (rematerialized) // input to value with position 'pos' carried a statement mark, and that the supplied // position (of the instruction using the rematerialized value) is not marked, and // preserve that mark if its line matches the supplied position. func (v *Value) copyIntoWithXPos(b *Block, pos src.XPos) *Value { … } func (v *Value) Logf(msg string, args ...interface{ … } func (v *Value) Log() bool { … } func (v *Value) Fatalf(msg string, args ...interface{ … } // isGenericIntConst reports whether v is a generic integer constant. func (v *Value) isGenericIntConst() bool { … } // ResultReg returns the result register assigned to v, in cmd/internal/obj/$ARCH numbering. // It is similar to Reg and Reg0, except that it is usable interchangeably for all Value Ops. // If you know v.Op, using Reg or Reg0 (as appropriate) will be more efficient. func (v *Value) ResultReg() int16 { … } // Reg returns the register assigned to v, in cmd/internal/obj/$ARCH numbering. func (v *Value) Reg() int16 { … } // Reg0 returns the register assigned to the first output of v, in cmd/internal/obj/$ARCH numbering. func (v *Value) Reg0() int16 { … } // Reg1 returns the register assigned to the second output of v, in cmd/internal/obj/$ARCH numbering. func (v *Value) Reg1() int16 { … } // RegTmp returns the temporary register assigned to v, in cmd/internal/obj/$ARCH numbering. func (v *Value) RegTmp() int16 { … } func (v *Value) RegName() string { … } // MemoryArg returns the memory argument for the Value. // The returned value, if non-nil, will be memory-typed (or a tuple with a memory-typed second part). // Otherwise, nil is returned. func (v *Value) MemoryArg() *Value { … } // LackingPos indicates whether v is a value that is unlikely to have a correct // position assigned to it. Ignoring such values leads to more user-friendly positions // assigned to nearby values and the blocks containing them. func (v *Value) LackingPos() bool { … } // removeable reports whether the value v can be removed from the SSA graph entirely // if its use count drops to 0. func (v *Value) removeable() bool { … } // AutoVar returns a *Name and int64 representing the auto variable and offset within it // where v should be spilled. func AutoVar(v *Value) (*ir.Name, int64) { … } // CanSSA reports whether values of type t can be represented as a Value. func CanSSA(t *types.Type) bool { … }