Skip to content
  • Jim Grosbach's avatar
    Many Thumb2 instructions can reference the full ARM register set (i.e., · d343166a
    Jim Grosbach authored
    have 4 bits per register in the operand encoding), but have undefined
    behavior when the operand value is 13 or 15 (SP and PC, respectively).
    The trivial coalescer in linear scan sometimes will merge a copy from
    SP into a subsequent instruction which uses the copy, and if that
    instruction cannot legally reference SP, we get bad code such as:
      mls r0,r9,r0,sp
    instead of:
      mov r2, sp
      mls r0, r9, r0, r2
    
    This patch adds a new register class for use by Thumb2 that excludes
    the problematic registers (SP and PC) and is used instead of GPR
    for those operands which cannot legally reference PC or SP. The
    trivial coalescer explicitly requires that the register class
    of the destination for the COPY instruction contain the source
    register for the COPY to be considered for coalescing. This prevents
    errant instructions like that above.
    
    PR7499
    
    llvm-svn: 109842
    d343166a
Loading