Skip to content
  • Jakob Stoklund Olesen's avatar
    Allow <undef> flags on def operands as well as uses. · 10f2de32
    Jakob Stoklund Olesen authored
    The <undef> flag says that a MachineOperand doesn't read its register,
    or doesn't depend on the previous value of its register.
    
    A full register def never depends on the previous register value.  A
    partial register def may depend on the previous value if it is intended
    to update part of a register.
    
    For example:
    
      %vreg10:dsub_0<def,undef> = COPY %vreg1
      %vreg10:dsub_1<def> = COPY %vreg2
    
    The first copy instruction defines the full %vreg10 register with the
    bits not covered by dsub_0 defined as <undef>.  It is not considered a
    read of %vreg10.
    
    The second copy modifies part of %vreg10 while preserving the rest.  It
    has an implicit read of %vreg10.
    
    This patch adds a MachineOperand::readsReg() method to determine if an
    operand reads its register.
    
    Previously, this was modelled by adding a full-register <imp-def>
    operand to the instruction.  This approach makes it possible to
    determine directly from a MachineOperand if it reads its register.  No
    scanning of MI operands is required.
    
    llvm-svn: 141124
    10f2de32
Loading