harpoon.IR.Assem
Class InstrMOVE

java.lang.Object
  extended by harpoon.IR.Assem.Instr
      extended by harpoon.IR.Assem.InstrMOVE
All Implemented Interfaces:
HCodeElement, CFGraphable<Instr,InstrEdge>, UseDefable, Graph.Node<Instr,InstrEdge>

public class InstrMOVE
extends Instr

InstrMOVE represents a copying of a set of source Temps to a set of destination Temps. This instruction is being specialized to allow for easier detection of MOVEs which could guide optimizations (either in eliminating the MOVE in question or in choosing which register a given Temp would be best assigned to. Note that InstrMOVEs at the lowest level represents the movement of data from register to register, not to memory (use InstrMEM for that). However, prior to register allocation it is legal for InstrMOVEs to have non-register Temps as their source or destination; the instruction will simply be replaced later in the compilation with either a new backend legal InstrMOVE or InstrMEM.

Version:
$Id: InstrMOVE.java,v 1.4 2002/04/10 03:04:29 cananian Exp $
Author:
Felix S. Klock II <pnkfelix@mit.edu>

Field Summary
 
Fields inherited from class harpoon.IR.Assem.Instr
arrayFactory, canFallThrough, next, prev
 
Constructor Summary
InstrMOVE(InstrFactory inf, HCodeElement codeSrc, String assem, Temp[] dst, Temp[] tempSrc)
          Creates a InstrMOVE.
 
Method Summary
 void accept(InstrVisitor v)
          Accept a visitor
 Instr cloneMutateAssem(InstrFactory inf, String newAssem)
          Clones this, mutating the assembly string.
 boolean isMove()
          Returns true if this is a Move.
 Instr rename(InstrFactory inf, TempMap defMap, TempMap useMap)
          Create a new Instr identical to the receiver, but with all Temps renamed according to the given mappings.
 
Methods inherited from class harpoon.IR.Assem.Instr
cloneMutateAssem, def, defC, edgeC, edges, getAssem, getEntry, getExit, getFactory, getGroups, getID, getInstrFor, getLineNumber, getNext, getPrev, getSourceFile, getTargets, hashCode, hasModifiableTargets, hasMultiplePredecessors, insertAt, insertInstrsAt, isDirective, isDummy, isJump, isLabel, isPred, isSucc, layout, map, map, map, pred, predC, remove, rename, rename, replace, replaceInstrList, setGroup, succ, succC, toString, use, useC
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

InstrMOVE

public InstrMOVE(InstrFactory inf,
                 HCodeElement codeSrc,
                 String assem,
                 Temp[] dst,
                 Temp[] tempSrc)
Creates a InstrMOVE.

Method Detail

accept

public void accept(InstrVisitor v)
Accept a visitor

Overrides:
accept in class Instr

rename

public Instr rename(InstrFactory inf,
                    TempMap defMap,
                    TempMap useMap)
Description copied from class: Instr
Create a new Instr identical to the receiver, but with all Temps renamed according to the given mappings. The new Instr will have no edges, and will come from the specified InstrFactory. FSK: I don't think this "no edges" part of the specification holds anymore (it was written before we revised the control-flow representation in the Instrs...

Overrides:
rename in class Instr

cloneMutateAssem

public Instr cloneMutateAssem(InstrFactory inf,
                              String newAssem)
Description copied from class: Instr
Clones this, mutating the assembly string.
requires: newAssem != null
effects: Returns a new Instr object with the same compiler-visible high level properties as this (use/def, isMove, etc), but instead of having the assembly-string of this, it has newAssem as its assembly string. The generated instr will not have a a place in the instruction layout; it is the responsiblity of the caller to subsequently call Instr.replace to swap this and the returned Instr.

Overrides:
cloneMutateAssem in class Instr

isMove

public boolean isMove()
Description copied from class: Instr
Returns true if this is a Move.
effects: Returns true if the only effect of executing this instruction is to copy a set of source Temps to a set of destination Temps.

Overrides:
isMove in class Instr