Skip to content
  1. May 14, 2010
  2. May 01, 2010
    • 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
  3. Mar 27, 2010
  4. Mar 24, 2010
  5. Mar 22, 2010
  6. Mar 20, 2010
  7. Mar 19, 2010
  8. Mar 15, 2010
    • Chris Lattner's avatar
      Completely rewrite tblgen's type inference mechanism, · cabe037b
      Chris Lattner authored
      changing the primary datastructure from being a 
      "std::vector<unsigned char>" to being a new TypeSet class
      that actually has (gasp) invariants!
      
      This changes more things than I remember, but one major
      innovation here is that it enforces that named input 
      values agree in type with their output values.
      
      This also eliminates code that transparently assumes (in 
      some cases) that SDNodeXForm input/output types are the
      same, because this is wrong in many case.
      
      This also eliminates a bug which caused a lot of ambiguous
      patterns to go undetected, where a register class would
      sometimes pick the first possible type, causing an
      ambiguous pattern to get arbitrary results.
      
      With all the recent target changes, this causes no 
      functionality change!
      
      llvm-svn: 98534
      cabe037b
  9. Feb 09, 2010
  10. Jan 15, 2010
  11. Jan 09, 2010
  12. Jan 04, 2010
  13. Sep 28, 2009
  14. Aug 11, 2009
  15. Jul 29, 2009
  16. Jul 15, 2009
  17. Jul 14, 2009
  18. Jul 11, 2009
  19. Jul 07, 2009
  20. Jul 03, 2009
  21. Jun 29, 2009
    • David Greene's avatar
      · f92ba97c
      David Greene authored
      Add more vector ValueTypes for AVX and other extended vector instruction
      sets.
      
      llvm-svn: 74427
      f92ba97c
  22. Jun 02, 2009
    • Dale Johannesen's avatar
      Revert 72707 and 72709, for the moment. · 5234d379
      Dale Johannesen authored
      llvm-svn: 72712
      5234d379
    • Dale Johannesen's avatar
      Make the implicit inputs and outputs of target-independent · 0b8ca792
      Dale Johannesen authored
      ADDC/ADDE use MVT::i1 (later, whatever it gets legalized to)
      instead of MVT::Flag.  Remove CARRY_FALSE in favor of 0; adjust
      all target-independent code to use this format.
      
      Most targets will still produce a Flag-setting target-dependent
      version when selection is done.  X86 is converted to use i32
      instead, which means TableGen needs to produce different code
      in xxxGenDAGISel.inc.  This keys off the new supportsHasI1 bit
      in xxxInstrInfo, currently set only for X86; in principle this
      is temporary and should go away when all other targets have
      been converted.  All relevant X86 instruction patterns are
      modified to represent setting and using EFLAGS explicitly.  The
      same can be done on other targets.
      
      The immediate behavior change is that an ADC/ADD pair are no
      longer tightly coupled in the X86 scheduler; they can be
      separated by instructions that don't clobber the flags (MOV).
      I will soon add some peephole optimizations based on using
      other instructions that set the flags to feed into ADC.
      
      llvm-svn: 72707
      0b8ca792
  23. Apr 16, 2009
    • Bob Wilson's avatar
      Fix PR3994: LLVMMatchType arguments do not refer to absolute return value · b8c370a8
      Bob Wilson authored
      and argument positions but only to the overloaded intrinsic parameters.
      Keep a separate list of these overloaded parameters in CodeGenTarget.cpp
      so they can be resolved easily.  Remove assertions from IntrinsicEmitter.cpp:
      they were harmless but confusing, and the assertions elsewhere in TableGen
      will catch any incorrect values.
      
      llvm-svn: 69316
      b8c370a8
  24. Apr 13, 2009
    • Dan Gohman's avatar
      Rename COPY_TO_SUBCLASS to COPY_TO_REGCLASS, and generalize · 6c142630
      Dan Gohman authored
      it accordingly. Thanks to Jakob Stoklund Olesen for pointing
      out how this might be useful.
      
      llvm-svn: 68986
      6c142630
    • Dan Gohman's avatar
      Add a new TargetInstrInfo MachineInstr opcode, COPY_TO_SUBCLASS. · 60a446ab
      Dan Gohman authored
      This will be used to replace things like X86's MOV32to32_.
      
      Enhance ScheduleDAGSDNodesEmit to be more flexible and robust
      in the presense of subregister superclasses and subclasses. It
      can now cope with the definition of a virtual register being in
      a subclass of a use.
      
      Re-introduce the code for recording register superreg classes and
      subreg classes. This is needed because when subreg extracts and
      inserts get coalesced away, the virtual registers are left in
      the correct subclass.
      
      llvm-svn: 68961
      60a446ab
  25. Feb 05, 2009
Loading