Search Options

Results per page
Sort
Preferred Languages
Advance

Results 1 - 10 of 115 for Preds (0.04 sec)

  1. src/cmd/compile/internal/ssa/trim.go

    		// order, in which the predecessors edges are merged here.
    		p, i := b.Preds[0].b, b.Preds[0].i
    		s, j := b.Succs[0].b, b.Succs[0].i
    		ns := len(s.Preds)
    		p.Succs[i] = Edge{s, j}
    		s.Preds[j] = Edge{p, i}
    
    		for _, e := range b.Preds[1:] {
    			p, i := e.b, e.i
    			p.Succs[i] = Edge{s, len(s.Preds)}
    			s.Preds = append(s.Preds, Edge{p, i})
    		}
    
    		// Attempt to preserve a statement boundary
    		if bIsStmt {
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Fri Nov 18 17:59:44 UTC 2022
    - 4.2K bytes
    - Viewed (0)
  2. src/cmd/compile/internal/ssa/fuse_branchredirect.go

    					continue
    				}
    				b.removePred(k)
    				p.Succs[pk.i] = Edge{child, len(child.Preds)}
    				// Fix up Phi value in b to have one less argument.
    				for _, v := range b.Values {
    					if v.Op != OpPhi {
    						continue
    					}
    					b.removePhiArg(v, k)
    				}
    				// Fix up child to have one more predecessor.
    				child.Preds = append(child.Preds, Edge{p, pk.i})
    				ai := b.Succs[out].i
    				for _, v := range child.Values {
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Tue May 16 21:40:11 UTC 2023
    - 3.2K bytes
    - Viewed (0)
  3. src/cmd/compile/internal/ssa/critical.go

    			// block, then we need to remove the
    			// corresponding elements from the block
    			// predecessors and phi args
    			if reusedBlock {
    				// Add p->d edge
    				p.Succs[pi] = Edge{d, len(d.Preds)}
    				d.Preds = append(d.Preds, Edge{p, pi})
    
    				// Remove p as a predecessor from b.
    				b.removePred(i)
    
    				// Update corresponding phi args
    				b.removePhiArg(phi, i)
    
    				// splitting occasionally leads to a phi having
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Tue May 16 21:40:11 UTC 2023
    - 3.1K bytes
    - Viewed (0)
  4. src/cmd/compile/internal/ssa/fuse.go

    		if bx == c {
    			break
    		}
    		copyTo += len(bx.Values)
    	}
    	c.Values = t
    
    	// replace b->c edge with preds(b) -> c
    	c.predstorage[0] = Edge{}
    	if len(b.Preds) > len(b.predstorage) {
    		c.Preds = b.Preds
    	} else {
    		c.Preds = append(c.predstorage[:0], b.Preds...)
    	}
    	for i, e := range c.Preds {
    		p := e.b
    		p.Succs[e.i] = Edge{c, i}
    	}
    	f := b.Func
    	if f.Entry == b {
    		f.Entry = c
    	}
    
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Tue Oct 31 20:45:54 UTC 2023
    - 9K bytes
    - Viewed (0)
  5. src/cmd/compile/internal/ssa/shortcircuit.go

    	// in which the outbound paths from b merge,
    	// with no other preds joining them.
    	// In these cases, we can reconstruct what the value
    	// of any phi in b must be in the successor blocks.
    
    	if len(t.Preds) == 1 && len(t.Succs) == 1 &&
    		len(u.Preds) == 1 && len(u.Succs) == 1 &&
    		t.Succs[0].b == u.Succs[0].b && len(t.Succs[0].b.Preds) == 2 {
    		// p   q
    		//  \ /
    		//   b
    		//  / \
    		// t   u
    		//  \ /
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Mon Oct 03 17:47:02 UTC 2022
    - 12.6K bytes
    - Viewed (0)
  6. src/cmd/compile/internal/ssa/phiopt.go

    	for _, b := range f.Blocks {
    		if len(b.Preds) != 2 || len(b.Values) == 0 {
    			// TODO: handle more than 2 predecessors, e.g. a || b || c.
    			continue
    		}
    
    		pb0, b0 := b, b.Preds[0].b
    		for len(b0.Succs) == 1 && len(b0.Preds) == 1 {
    			pb0, b0 = b0, b0.Preds[0].b
    		}
    		if b0.Kind != BlockIf {
    			continue
    		}
    		pb1, b1 := b, b.Preds[1].b
    		for len(b1.Succs) == 1 && len(b1.Preds) == 1 {
    			pb1, b1 = b1, b1.Preds[0].b
    		}
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Mon Apr 11 16:34:30 UTC 2022
    - 8.1K bytes
    - Viewed (0)
  7. src/cmd/compile/internal/ssa/block.go

    // phi values by calling b.removePhiArg(v, i).
    func (b *Block) removePred(i int) {
    	n := len(b.Preds) - 1
    	if i != n {
    		e := b.Preds[n]
    		b.Preds[i] = e
    		// Update the other end of the edge we moved.
    		e.b.Succs[e.i].i = i
    	}
    	b.Preds[n] = Edge{}
    	b.Preds = b.Preds[:n]
    	b.Func.invalidateCFG()
    }
    
    // removeSucc removes the ith output edge from b.
    // It is the responsibility of the caller to remove
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Wed May 15 15:44:14 UTC 2024
    - 12.2K bytes
    - Viewed (0)
  8. src/cmd/compile/internal/ssa/check.go

    		if b.Func != f {
    			f.Fatalf("%s.Func=%s, want %s", b, b.Func.Name, f.Name)
    		}
    
    		for i, e := range b.Preds {
    			if se := e.b.Succs[e.i]; se.b != b || se.i != i {
    				f.Fatalf("block pred/succ not crosslinked correctly %d:%s %d:%s", i, b, se.i, se.b)
    			}
    		}
    		for i, e := range b.Succs {
    			if pe := e.b.Preds[e.i]; pe.b != b || pe.i != i {
    				f.Fatalf("block succ/pred not crosslinked correctly %d:%s %d:%s", i, b, pe.i, pe.b)
    			}
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Tue Apr 09 16:41:23 UTC 2024
    - 17.6K bytes
    - Viewed (0)
  9. src/cmd/compile/internal/ssa/flagalloc.go

    		b.Values = b.Values[:0]
    		// The current live flag value (the pre-flagalloc copy).
    		var flag *Value
    		if len(b.Preds) > 0 {
    			flag = end[b.Preds[0].b.ID]
    			// Note: the following condition depends on the lack of critical edges.
    			for _, e := range b.Preds[1:] {
    				p := e.b
    				if end[p.ID] != flag {
    					f.Fatalf("live flag in %s's predecessors not consistent", b)
    				}
    			}
    		}
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Mon Oct 31 21:41:20 UTC 2022
    - 6.7K bytes
    - Viewed (0)
  10. src/cmd/compile/internal/ssa/branchelim.go

    	f.invalidateCFG()
    	return true
    }
    
    // is this a BlockPlain with one predecessor?
    func isLeafPlain(b *Block) bool {
    	return b.Kind == BlockPlain && len(b.Preds) == 1
    }
    
    func clobberBlock(b *Block) {
    	b.Values = nil
    	b.Preds = nil
    	b.Succs = nil
    	b.Aux = nil
    	b.ResetControls()
    	b.Likely = BranchUnknown
    	b.Kind = BlockInvalid
    }
    
    Registered: Wed Jun 12 16:32:35 UTC 2024
    - Last Modified: Wed Nov 30 17:46:51 UTC 2022
    - 12.7K bytes
    - Viewed (0)
Back to top