// $Id: DelocalizedCondBranchInstruction.java,v 1.10 1999/11/29 13:40:33 mpp Exp $

package IR2;

import java.util.*;

public class DelocalizedCondBranchInstruction 
  extends DelocalizedBranchInstruction {
  
  private DelocalizedRValue condition;
  
  public DelocalizedCondBranchInstruction(DelocalizedRValue cond, String lbl) {
    super(lbl);
    condition = cond;
  }

  public DelocalizedLValue destination() {
    return null;
  }
  public Enumeration lsources() {
    if (condition instanceof DelocalizedLValue) {
      return new ShortEnumeration(condition);
    } else {
      return new ShortEnumeration();
    }
  }


  public void generate_code(Codegen c){
    condition.load_into_reg(c, c.r(0));
    c.generate_bne(c.r(0), new DelocalizedLabelInstruction(this.label));    
  }
    
  public String toString() { 
    return "DeCondBranch(" + condition + ")->" + label;
  }


  /* Copy propagation */
  public boolean kills_copy(CopyInstruction copy) {
    return false;
  }
  public void substitute_copies(Hashtable map) {
    if (map.contains(condition))
      condition = (DelocalizedRValue) map.get(condition);
  }
  
}
