Home | History | Annotate | Download | only in ssa

Lines Matching refs:ft

108 	ft := &factsTable{}
109 ft.facts = make(map[pair]relation)
110 ft.stack = make([]fact, 4)
111 ft.limits = make(map[ID]limit)
112 ft.limitStack = make([]limitFact, 4)
113 return ft
118 func (ft *factsTable) get(v, w *Value, d domain) relation {
126 lim, ok := ft.limits[v.ID]
184 r, ok := ft.facts[p]
201 func (ft *factsTable) update(parent *Block, v, w *Value, d domain, r relation) {
208 oldR := ft.get(v, w, d)
209 ft.stack = append(ft.stack, fact{p, oldR})
210 ft.facts[p] = oldR & r
224 old, ok := ft.limits[v.ID]
301 ft.limitStack = append(ft.limitStack, limitFact{v.ID, old})
302 ft.limits[v.ID] = lim
310 func (ft *factsTable) isNonNegative(v *Value) bool {
314 l, has := ft.limits[v.ID]
320 func (ft *factsTable) checkpoint() {
321 ft.stack = append(ft.stack, checkpointFact)
322 ft.limitStack = append(ft.limitStack, checkpointBound)
328 func (ft *factsTable) restore() {
330 old := ft.stack[len(ft.stack)-1]
331 ft.stack = ft.stack[:len(ft.stack)-1]
336 delete(ft.facts, old.p)
338 ft.facts[old.p] = old.r
342 old := ft.limitStack[len(ft.limitStack)-1]
343 ft.limitStack = ft.limitStack[:len(ft.limitStack)-1]
348 delete(ft.limits, old.vid)
350 ft.limits[old.vid] = old.limit
475 ft := newFactsTable()
489 ft.checkpoint()
491 updateRestrictions(parent, ft, boolean, nil, c, lt|gt, branch)
495 updateRestrictions(parent, ft, tr.d, c.Args[0], c.Args[1], tr.r, branch)
511 succ := simplifyBlock(ft, node.block)
522 ft.restore()
551 func updateRestrictions(parent *Block, ft *factsTable, t domain, v, w *Value, r relation, branch branch) {
563 ft.update(parent, v, w, i, r)
568 // simplifyBlock simplifies block known the restrictions in ft.
570 func simplifyBlock(ft *factsTable, b *Block) branch {
592 lim, ok := ft.limits[x.ID]
614 m := ft.get(nil, b.Control, boolean)
655 m := ft.get(a0, a1, d)
683 if (c.Op == OpIsInBounds || c.Op == OpIsSliceInBounds) && ft.isNonNegative(c.Args[0]) {
684 m := ft.get(a0, a1, signed)