Versions in this module Expand all Collapse all v3 v3.2.0 Feb 1, 2026 v3.1.6 Jan 31, 2026 v3.1.5 Jan 31, 2026 v3.1.4 Jan 30, 2026 v3.1.3 Jan 30, 2026 v3.1.2 Jan 30, 2026 v3.1.1 Jan 30, 2026 v3.1.0 Jan 30, 2026 v3.0.0 Jan 29, 2026 Changes in this version + const MaxSCEVDepth + func AnalyzeSCEV(info *LoopInfo) + func CountLoops(loops []*Loop) int + type IVType int + const IVTypeBasic + const IVTypeDerived + const IVTypeGeometric + const IVTypePolynomial + const IVTypeUnknown + type InductionVariable struct + Phi *ssa.Phi + Start SCEV + Step SCEV + Type IVType + type Loop struct + Blocks map[*ssa.BasicBlock]bool + Children []*Loop + Exits []*ssa.BasicBlock + Header *ssa.BasicBlock + Inductions map[*ssa.Phi]*InductionVariable + Latch *ssa.BasicBlock + Parent *Loop + SCEVCache map[ssa.Value]SCEV + TripCount SCEV + func (l *Loop) String() string + type LoopInfo struct + Function *ssa.Function + LoopMap map[*ssa.BasicBlock]*Loop + Loops []*Loop + func DetectLoops(fn *ssa.Function) *LoopInfo + type Renamer func(ssa.Value) string + type SCEV interface + EvaluateAt func(k *big.Int, cache map[SCEV]*big.Int) *big.Int + IsLoopInvariant func(loop *Loop) bool + String func() string + StringWithRenamer func(r Renamer) string + func SCEVFromConst(c *ssa.Const) SCEV + func ToSCEV(v ssa.Value, loop *Loop) SCEV + type SCEVAddRec struct + Loop *Loop + Start SCEV + Step SCEV + func (s *SCEVAddRec) EvaluateAt(k *big.Int, cache map[SCEV]*big.Int) *big.Int + func (s *SCEVAddRec) IsLoopInvariant(loop *Loop) bool + func (s *SCEVAddRec) Name() string + func (s *SCEVAddRec) Parent() *ssa.Function + func (s *SCEVAddRec) Pos() token.Pos + func (s *SCEVAddRec) Referrers() *[]ssa.Instruction + func (s *SCEVAddRec) String() string + func (s *SCEVAddRec) StringWithRenamer(r Renamer) string + func (s *SCEVAddRec) Type() types.Type + type SCEVConstant struct + Value *big.Int + func (s *SCEVConstant) EvaluateAt(k *big.Int, cache map[SCEV]*big.Int) *big.Int + func (s *SCEVConstant) IsLoopInvariant(loop *Loop) bool + func (s *SCEVConstant) Name() string + func (s *SCEVConstant) Parent() *ssa.Function + func (s *SCEVConstant) Pos() token.Pos + func (s *SCEVConstant) Referrers() *[]ssa.Instruction + func (s *SCEVConstant) String() string + func (s *SCEVConstant) StringWithRenamer(r Renamer) string + func (s *SCEVConstant) Type() types.Type + type SCEVGenericExpr struct + Op token.Token + X SCEV + Y SCEV + func (s *SCEVGenericExpr) EvaluateAt(k *big.Int, cache map[SCEV]*big.Int) *big.Int + func (s *SCEVGenericExpr) IsLoopInvariant(loop *Loop) bool + func (s *SCEVGenericExpr) Name() string + func (s *SCEVGenericExpr) Parent() *ssa.Function + func (s *SCEVGenericExpr) Pos() token.Pos + func (s *SCEVGenericExpr) Referrers() *[]ssa.Instruction + func (s *SCEVGenericExpr) String() string + func (s *SCEVGenericExpr) StringWithRenamer(r Renamer) string + func (s *SCEVGenericExpr) Type() types.Type + type SCEVMax struct + X SCEV + Y SCEV + func (s *SCEVMax) EvaluateAt(k *big.Int, cache map[SCEV]*big.Int) *big.Int + func (s *SCEVMax) IsLoopInvariant(loop *Loop) bool + func (s *SCEVMax) Name() string + func (s *SCEVMax) Parent() *ssa.Function + func (s *SCEVMax) Pos() token.Pos + func (s *SCEVMax) Referrers() *[]ssa.Instruction + func (s *SCEVMax) String() string + func (s *SCEVMax) StringWithRenamer(r Renamer) string + func (s *SCEVMax) Type() types.Type + type SCEVUnknown struct + IsInvariant bool + Value ssa.Value + func (s *SCEVUnknown) EvaluateAt(k *big.Int, cache map[SCEV]*big.Int) *big.Int + func (s *SCEVUnknown) IsLoopInvariant(loop *Loop) bool + func (s *SCEVUnknown) Name() string + func (s *SCEVUnknown) Parent() *ssa.Function + func (s *SCEVUnknown) Pos() token.Pos + func (s *SCEVUnknown) Referrers() *[]ssa.Instruction + func (s *SCEVUnknown) String() string + func (s *SCEVUnknown) StringWithRenamer(r Renamer) string + func (s *SCEVUnknown) Type() types.Type