Skip to content
  • Evan Cheng's avatar
    Add a pseudo instruction REG_SEQUENCE that takes a list of registers and · 66561537
    Evan Cheng authored
    sub-register indices and outputs a single super register which is formed from
    a consecutive sequence of registers.
    
    This is used as register allocation / coalescing aid and it is useful to
    represent instructions that output register pairs / quads. For example,
    v1024, v1025 = vload <address>
    where v1024 and v1025 forms a register pair.
    
    This really should be modelled as
    v1024<3>, v1025<4> = vload <address>
    but it would violate SSA property before register allocation is done.
    
    Currently we use insert_subreg to form the super register:
    v1026 = implicit_def
    v1027 - insert_subreg v1026, v1024, 3
    v1028 = insert_subreg v1027, v1025, 4
    ...
          = use v1024
          = use v1028
    
    But this adds pseudo live interval overlap between v1024 and v1025.
    
    We can now modeled it as
    v1024, v1025 = vload <address>
    v1026 = REG_SEQUENCE v1024, 3, v1025, 4
    ...
          = use v1024
          = use v1026
    
    After coalescing, it will be
    v1026<3>, v1025<4> = vload <address>
    ...
          = use v1026<3>
          = use v1026
    
    llvm-svn: 102815
    66561537
Loading