Skip to content
  1. May 15, 2010
    • Evan Cheng's avatar
      Allow TargetLowering::getRegClassFor() to be called on illegal types. Also · 4cad68eb
      Evan Cheng authored
      allow target to override it in order to map register classes to illegal
      but synthesizable types. e.g. v4i64, v8i64 for ARM / NEON.
      
      llvm-svn: 103854
      4cad68eb
    • Evan Cheng's avatar
      Model 64-bit lane vld with REG_SEQUENCE. · 0cbd11df
      Evan Cheng authored
      llvm-svn: 103851
      0cbd11df
    • Evan Cheng's avatar
      Teach two-address pass to do some coalescing while eliminating REG_SEQUENCE · 8c2d062e
      Evan Cheng authored
      instructions.
      
      e.g.
      %reg1026<def> = VLDMQ %reg1025<kill>, 260, pred:14, pred:%reg0
      %reg1027<def> = EXTRACT_SUBREG %reg1026, 6
      %reg1028<def> = EXTRACT_SUBREG %reg1026<kill>, 5
      ...
      %reg1029<def> = REG_SEQUENCE %reg1028<kill>, 5, %reg1027<kill>, 6, %reg1028, 7, %reg1027, 8, %reg1028, 9, %reg1027, 10, %reg1030<kill>, 11, %reg1032<kill>, 12
      
      After REG_SEQUENCE is eliminated, we are left with:
      
      %reg1026<def> = VLDMQ %reg1025<kill>, 260, pred:14, pred:%reg0
      %reg1029:6<def> = EXTRACT_SUBREG %reg1026, 6
      %reg1029:5<def> = EXTRACT_SUBREG %reg1026<kill>, 5
      
      The regular coalescer will not be able to coalesce reg1026 and reg1029 because it doesn't
      know how to combine sub-register indices 5 and 6. Now 2-address pass will consult the
      target whether sub-registers 5 and 6 of reg1026 can be combined to into a larger
      sub-register (or combined to be reg1026 itself as is the case here). If it is possible, 
      it will be able to replace references of reg1026 with reg1029 + the larger sub-register
      index.
      
      llvm-svn: 103835
      8c2d062e
    • Evan Cheng's avatar
      Model VST*_UPD and VST*oddUPD pair with REG_SEQUENCE. · cb78e555
      Evan Cheng authored
      llvm-svn: 103833
      cb78e555
  2. May 14, 2010
  3. May 13, 2010
  4. May 12, 2010
    • Evan Cheng's avatar
      Remove a dead fixme. · 5aa20d6c
      Evan Cheng authored
      llvm-svn: 103642
      5aa20d6c
    • Rafael Espindola's avatar
      b69c7b76
    • Evan Cheng's avatar
      vst instructions are modeled as this: · a2ff4fc9
      Evan Cheng authored
      v1024 = REG_SEQUENCE ...
      v1025 = EXTRACT_SUBREG v1024, 5
      v1026 = EXTRACR_SUBREG v1024, 6
            = VSTxx <addr>, v1025, v1026
      
      The REG_SEQUENCE ensures the sources that feed into the VST instruction
      are getting the right register allocation so they form a large super-
      register. The extract_subreg will be coalesced away all would just work:
      v1024 = REG_SEQUENCE ...
            = VSTxx <addr>, v1024:5, v1024:6
      
      The problem is if the coalescer isn't run, the extract_subreg instructions
      would stick around and there is no assurance v1025 and v1026 will get the
      right registers.
      
      As a short term workaround, teach the NEON pre-allocation pass to transfer
      the sub-register indices over. An alternative would be do it 2addr pass
      when reg_sequence's are eliminated. But that *seems* wrong and require
      updating liveness information.
      
      Another alternative is to do this in the scheduler when the instructions are
      created. But that would mean somehow the scheduler this has to be done for
      correctness reason. That's yucky as well. So for now, we are leaving this
      in the target specific pass.
      
      llvm-svn: 103540
      a2ff4fc9
  5. May 11, 2010
  6. May 10, 2010
  7. May 07, 2010
  8. May 06, 2010
Loading