Skip to content
  1. Mar 25, 2013
  2. Mar 24, 2013
  3. 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
  4. 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
  5. 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
  6. 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
  7. Mar 17, 2013
  8. 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
  9. Mar 15, 2013
  10. 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
  11. Mar 11, 2013
  12. Mar 02, 2013
  13. Feb 26, 2013
  14. Feb 14, 2013
  15. Feb 13, 2013
  16. Feb 12, 2013
  17. Feb 06, 2013
    • Jim Grosbach's avatar
      Allow targets to add custom asm operand matching logic. · 86c652a6
      Jim Grosbach authored
      For example, ARM has several instructions with a literal '#0' immediate in the syntax
      that's not represented as an actual operand. The asm matcher is expected a token
      operand, but the parser will have created an immediate operand. This is currently
      handled by dedicated per-instruction C++ munging of the ParsedAsmOperand list, but
      will be better handled by this hook.
      
      llvm-svn: 174487
      86c652a6
  18. Feb 05, 2013
    • Eli Bendersky's avatar
      Fix comments · 530a3bc5
      Eli Bendersky authored
      llvm-svn: 174390
      530a3bc5
    • Jack Carter's avatar
      This patch that sets the EmitAlias flag in td files · 9c1a027f
      Jack Carter authored
      and enables the instruction printer to print aliased 
      instructions. 
      
      Due to usage of RegisterOperands a change in common 
      code (utils/TableGen/AsmWriterEmitter.cpp) is required 
      to get the correct register value if it is a RegisterOperand.
      
      Contributer: Vladimir Medic
       
      llvm-svn: 174358
      9c1a027f
  19. Feb 01, 2013
  20. Jan 31, 2013
    • Jakob Stoklund Olesen's avatar
      Clarify intent. · 6b1eda0a
      Jakob Stoklund Olesen authored
      llvm-svn: 174068
      6b1eda0a
    • Tim Northover's avatar
      Add AArch64 as an experimental target. · e0e3aefd
      Tim Northover authored
      This patch adds support for AArch64 (ARM's 64-bit architecture) to
      LLVM in the "experimental" category. Currently, it won't be built
      unless requested explicitly.
      
      This initial commit should have support for:
          + Assembly of all scalar (i.e. non-NEON, non-Crypto) instructions
            (except the late addition CRC instructions).
          + CodeGen features required for C++03 and C99.
          + Compilation for the "small" memory model: code+static data <
            4GB.
          + Absolute and position-independent code.
          + GNU-style (i.e. "__thread") TLS.
          + Debugging information.
      
      The principal omission, currently, is performance tuning.
      
      This patch excludes the NEON support also reviewed due to an outbreak of
      batshit insanity in our legal department. That will be committed soon bringing
      the changes to precisely what has been approved.
      
      Further reviews would be gratefully received.
      
      llvm-svn: 174054
      e0e3aefd
  21. Jan 27, 2013
  22. Jan 16, 2013
    • Chad Rosier's avatar
      [ms-inline asm] Address the FIXME in AsmParser.cpp. · 7245033a
      Chad Rosier authored
      // FIXME: Constraints are hard coded to 'm', but we need an 'r'
      // constraint for addressof.  This needs to be cleaned up!
      
      Test cases are already in place.  Specifically,
      clang/test/CodeGen/ms-inline-asm.c t15(), t16(), and t24().
      
      llvm-svn: 172569
      7245033a
  23. Jan 11, 2013
  24. Jan 10, 2013
  25. Jan 09, 2013
    • Tim Northover's avatar
      Check whether MCInst operand isImm before calling getImm. · ab7689ec
      Tim Northover authored
      When processing possible aliases, TableGen assumes that if an operand *can* be
      an immediate, then it always *will* be. This is incorrect for the AArch64
      backend. This patch inserts a check in the generated code to make sure isImm is
      true first.
      
      llvm-svn: 171972
      ab7689ec
    • Andrew Trick's avatar
      MIsched: add an ILP window property to machine model. · 9f0b95f2
      Andrew Trick authored
      This was an experimental option, but needs to be defined
      per-target. e.g. PPC A2 needs to aggressively hide latency.
      
      I converted some in-order scheduling tests to A2. Hal is working on
      more test cases.
      
      llvm-svn: 171946
      9f0b95f2
  26. Jan 02, 2013
  27. Dec 26, 2012
  28. Dec 24, 2012
  29. Dec 22, 2012
  30. Dec 20, 2012
Loading