Skip to content
  1. Jun 15, 2013
  2. Jun 10, 2013
  3. Jun 09, 2013
  4. Jun 07, 2013
  5. Jun 06, 2013
  6. Jun 05, 2013
  7. Jun 01, 2013
  8. May 31, 2013
    • Ahmed Bougacha's avatar
      Add a way to define the bit range covered by a SubRegIndex. · f1ed334d
      Ahmed Bougacha authored
      NOTE: If this broke your out-of-tree backend, in *RegisterInfo.td, change
      the instances of SubRegIndex that have a comps template arg to use the
      ComposedSubRegIndex class instead.
      
      In TableGen land, this adds Size and Offset attributes to SubRegIndex,
      and the ComposedSubRegIndex class, for which the Size and Offset are
      computed by TableGen. This also adds an accessor in MCRegisterInfo, and
      Size/Offsets for the X86 and ARM subreg indices.
      
      llvm-svn: 183020
      f1ed334d
  9. May 28, 2013
    • Chad Rosier's avatar
      Remove the MCRegAliasIterator tables and compute the aliases dynamically. · 1bbbb312
      Chad Rosier authored
      The size reduction in the RegDiffLists are rather dramatic.  Here are a few
      size differences for MCTargetDesc.o files (before and after) in bytes:
      R600 - 36160B - 11184B - 69% reduction
      ARM - 28480B - 8368B - 71% reduction
      Mips - 816B - 576B - 29% reduction
      
      One side effect of dynamically computing the aliases is that the iterator does
      not guarantee that the entries are ordered or that duplicates have been removed.
      The documentation implies this is a safe assumption and I found no clients that
      requires these attributes (i.e., strict ordering and uniqueness).
      
      My local LNT tester results showed no execution-time failures or significant
      compile-time regressions (i.e., beyond what I would consider noise) for -O0g,
      -O2 and -O3 runs on x86_64 and i386 configurations.
      rdar://12906217
      
      llvm-svn: 182783
      1bbbb312
  10. May 22, 2013
    • Bill Schmidt's avatar
      Recognize ValueType operands in source patterns for fast-isel. · 9b703f9c
      Bill Schmidt authored
      Currently the fast-isel table generator recognizes registers, register
      classes, and immediates for source pattern operands.  ValueType
      operands are not recognized.  This is not a problem for existing
      targets with fast-isel support, but will not work for targets like
      PowerPC and SPARC that use types in source patterns.
      
      The proposed patch allows ValueType operands and treats them in the
      same manner as register classes.  There is no convenient way to map
      from a ValueType to a register class, but there's no need to do so.
      The table generator already requires that all types in the source
      pattern be identical, and we know the register class of the output
      operand already.  So we just assign that register class to any
      ValueType operands we encounter.
      
      No functional effect on existing targets.  Testing deferred until the
      PowerPC target implements fast-isel.
      
      llvm-svn: 182512
      9b703f9c
  11. May 16, 2013
  12. Apr 27, 2013
    • Ulrich Weigand's avatar
      · e037a492
      Ulrich Weigand authored
      Handle tied sub-operands in AsmMatcherEmitter
      
      The problem this patch addresses is the handling of register tie
      constraints in AsmMatcherEmitter, where one operand is tied to a
      sub-operand of another operand.  The typical scenario for this to
      happen is the tie between the "write-back" register of a pre-inc
      instruction, and the base register sub-operand of the memory address
      operand of that instruction.
      
      The current AsmMatcherEmitter code attempts to handle tied
      operands by emitting the operand as usual first, and emitting
      a CVT_Tied node when handling the second (tied) operand.  However,
      this really only works correctly if the tied operand does not
      have sub-operands (and isn't a sub-operand itself).  Under those
      circumstances, a wrong MC operand list is generated.
      
      In discussions with Jim Grosbach, it turned out that the MC operand
      list really ought not to contain tied operands in the first place;
      instead, it ought to consist of exactly those operands that are
      named in the AsmString.  However, getting there requires significant
      rework of (some) targets.
      
      This patch fixes the immediate problem, and at the same time makes
      one (small) step in the direction of the long-term solution, by
      implementing two changes:
      
      1. Restricts the AsmMatcherEmitter handling of tied operands to
         apply solely to simple operands (not complex operands or
         sub-operand of such).
      
      This means that at least we don't get silently corrupt MC operand
      lists as output.  However, if we do have tied sub-operands, they
      would now no longer be handled at all, except for:
      
      2. If we have an operand that does not occur in the AsmString,
         and also isn't handled as tied operand, simply emit a dummy
         MC operand (constant 0).
      
      This works as long as target code never attempts to access
      MC operands that do no not occur in the AsmString (and are
      not tied simple operands), which happens to be the case for
      all targets where this situation can occur (ARM and PowerPC).
      
      [ Note that this change means that many of the ARM custom
        converters are now superfluous, since the implement the
        same "hack" now performed already by common code. ]
      
      Longer term, we ought to fix targets to never access *any*
      MC operand that does not occur in the AsmString (including
      tied simple operands), and then finally completely remove
      all such operands from the MC operand list.
      
      Patch approved by Jim Grosbach.
      
      llvm-svn: 180677
      e037a492
  13. Apr 24, 2013
  14. Apr 19, 2013
  15. Apr 11, 2013
  16. Mar 29, 2013
  17. Mar 27, 2013
  18. Mar 26, 2013
  19. Mar 25, 2013
  20. Mar 24, 2013
  21. Mar 23, 2013
    • Jakob Stoklund Olesen's avatar
      Allow direct value types in pattern definitions. · d906b903
      Jakob Stoklund Olesen authored
      Just like register classes, value types can be used in two ways in
      patterns:
      
        (sext_inreg i32:$src, i16)
      
      In a named leaf node like i32:$src, the value type simply provides the
      type of the node directly. This simplifies type inference a lot compared
      to the current practice of specifiying types indirectly with register
      classes.
      
      As an unnamed leaf node, like i16 above, the value type represents
      itself as an MVT::Other immediate.
      
      llvm-svn: 177828
      d906b903
    • Jakob Stoklund Olesen's avatar
      Make all unnamed RegisterClass TreePatternNodes typed MVT::i32. · b5b9110b
      Jakob Stoklund Olesen authored
      A register class can appear as a leaf TreePatternNode with and without a
      name:
      
        (COPY_TO_REGCLASS GPR:$src, F8RC)
      
      In a named leaf node like GPR:$src, the register class provides type
      information for the named variable represented by the node. The TypeSet
      for such a node is the set of value types that the register class can
      represent.
      
      In an unnamed leaf node like F8RC above, the register class represents
      itself as a kind of immediate. Such a node has the type MVT::i32,
      we'll never create a virtual register representing it.
      
      This change makes it possible to remove the special handling of
      COPY_TO_REGCLASS in CodeGenDAGPatterns.cpp.
      
      llvm-svn: 177825
      b5b9110b
  22. Mar 22, 2013
    • Sean Silva's avatar
      Add TableGen ctags(1) emitter and helper script. · cdd21b33
      Sean Silva authored
      To use this in conjunction with exuberant ctags to generate a single
      combined tags file, run tblgen first and then
        $ ctags --append [...]
      
      Since some identifiers have corresponding definitions in C++ code,
      it can be useful (if using vim) to also use cscope, and
        :set cscopetagorder=1
      so that
        :tag X
      will preferentially select the tablegen symbol, while
        :cscope find g X
      will always find the C++ symbol.
      
      Patch by Kevin Schoedel!
      
      (a couple small formatting changes courtesy of clang-format)
      
      llvm-svn: 177682
      cdd21b33
  23. Mar 19, 2013
    • Ulrich Weigand's avatar
      Extend TableGen instruction selection matcher to improve handling · e618abd6
      Ulrich Weigand authored
      of complex instruction operands (e.g. address modes).
      
      Currently, if a Pat pattern creates an instruction that has a complex
      operand (i.e. one that consists of multiple sub-operands at the MI
      level), this operand must match a ComplexPattern DAG pattern with the
      correct number of output operands.
      
      This commit extends TableGen to alternatively allow match a complex
      operands against multiple separate operands at the DAG level.
      
      This allows using Pat patterns to match pre-increment nodes like
      pre_store (which must have separate operands at the DAG level) onto
      an instruction pattern that uses a multi-operand memory operand,
      like the following example on PowerPC (will be committed as a
      follow-on patch):
      
        def STWU  : DForm_1<37, (outs ptr_rc:$ea_res), (ins GPRC:$rS, memri:$dst),
                          "stwu $rS, $dst", LdStStoreUpd, []>,
                          RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
      
        def : Pat<(pre_store GPRC:$rS, ptr_rc:$ptrreg, iaddroff:$ptroff),
                  (STWU GPRC:$rS, iaddroff:$ptroff, ptr_rc:$ptrreg)>;
      
      Here, the pair of "ptroff" and "ptrreg" operands is matched onto the
      complex operand "dst" of class "memri" in the "STWU" instruction.
      
      Approved by Jakob Stoklund Olesen.
      
      llvm-svn: 177428
      e618abd6
  24. Mar 18, 2013
    • Andrew Trick's avatar
      TableGen fix for the new machine model. · e7bac5f5
      Andrew Trick authored
      Properly handle cases where a group of instructions have different
      SchedRW lists with the same itinerary class.
      This was supposed to work, but I left in an early break.
      
      llvm-svn: 177317
      e7bac5f5
    • Jakob Stoklund Olesen's avatar
      Extract a method. · 57a86508
      Jakob Stoklund Olesen authored
      This computes the type of an instruction operand or result based on the
      records in the instruction's ins and outs lists.
      
      llvm-svn: 177244
      57a86508
  25. Mar 17, 2013
  26. Mar 16, 2013
    • Andrew Trick's avatar
      Machine model. Allow mixed itinerary classes and SchedRW lists. · bf8a28dc
      Andrew Trick authored
      We always supported a mixture of the old itinerary model and new
      per-operand model, but it required a level of indirection to map
      itinerary classes to SchedRW lists. This was done for ARM A9.
      
      Now we want to define x86 SchedRW lists, with the goal of removing its
      itinerary classes, but still support the itineraries in the mean
      time. When I original developed the model, Atom did not have
      itineraries, so there was no reason to expect this requirement.
      
      llvm-svn: 177226
      bf8a28dc
  27. Mar 15, 2013
  28. Mar 14, 2013
    • Andrew Trick's avatar
      Fix r177112: Add ProcResGroup. · a5c747b0
      Andrew Trick authored
      This is the other half of r177122 that I meant to commit at the same time.
      
      llvm-svn: 177123
      a5c747b0
    • Andrew Trick's avatar
      MachineModel: Add a ProcResGroup class. · 4e67cba8
      Andrew Trick authored
      This allows abitrary groups of processor resources. Using something in
      a subset automatically counts againts the superset. Currently, this
      only works if the superset is also a ProcResGroup as opposed to a
      SuperUnit.
      
      This allows SandyBridge to be expressed naturally, which will be
      checked in shortly.
      
      def SBPort01 : ProcResGroup<[SBPort0, SBPort1]>;
      def SBPort15 : ProcResGroup<[SBPort1, SBPort5]>;
      def SBPort23  : ProcResGroup<[SBPort2, SBPort3]>;
      def SBPort015 : ProcResGroup<[SBPort0, SBPort1, SBPort5]>;
      
      llvm-svn: 177112
      4e67cba8
Loading