Skip to content
  1. Mar 10, 2014
  2. Mar 09, 2014
    • Craig Topper's avatar
    • Benjamin Kramer's avatar
      StackColoring: Use range-based for loops. · 24555e15
      Benjamin Kramer authored
      No functionality change.
      
      llvm-svn: 203415
      24555e15
    • Benjamin Kramer's avatar
      MachineModuleInfo: Turn nested std::pairs into a proper struct. · 2abfd6c7
      Benjamin Kramer authored
      llvm-svn: 203414
      2abfd6c7
    • Benjamin Kramer's avatar
      SimplifyCFG: Simplify the weight scaling algorithm. · 79da941f
      Benjamin Kramer authored
      No change in functionality.
      
      llvm-svn: 203413
      79da941f
    • Chandler Carruth's avatar
      [LCG] Simplify a bunch of the LCG code with range for loops and auto. · b9e2f8c4
      Chandler Carruth authored
      Still more work to be done here to leverage C++11, but this clears out
      the glaring issues.
      
      llvm-svn: 203395
      b9e2f8c4
    • Chandler Carruth's avatar
      [PM] Switch new pass manager from polymorphic_ptr to unique_ptr now that · c3f3da3d
      Chandler Carruth authored
      it is available. Also make the move semantics sufficiently correct to
      tolerate move-only passes, as the PassManagers *are* move-only passes.
      
      llvm-svn: 203391
      c3f3da3d
    • NAKAMURA Takumi's avatar
      Revert r203230, "CodeGenPrep: sink extends of illegal types into use block." · 1783e1e9
      NAKAMURA Takumi authored
      It choked i686 stage2.
      
      llvm-svn: 203386
      1783e1e9
    • Craig Topper's avatar
      De-virtualize some methods since they don't override anything. · f5e3b0b9
      Craig Topper authored
      llvm-svn: 203379
      f5e3b0b9
    • Craig Topper's avatar
    • David Majnemer's avatar
      IR: Change inalloca's grammar a bit · c4ab61cb
      David Majnemer authored
      The grammar for LLVM IR is not well specified in any document but seems
      to obey the following rules:
      
       - Attributes which have parenthesized arguments are never preceded by
         commas.  This form of attribute is the only one which ever has
         optional arguments.  However, not all of these attributes support
         optional arguments: 'thread_local' supports an optional argument but
         'addrspace' does not.  Interestingly, 'addrspace' is documented as
         being a "qualifier".  What constitutes a qualifier?  I cannot find a
         definition.
      
       - Some attributes use a space between the keyword and the value.
         Examples of this form are 'align' and 'section'.  These are always
         preceded by a comma.
      
       - Otherwise, the attribute has no argument.  These attributes do not
         have a preceding comma.
      
      Sometimes an attribute goes before the instruction, between the
      instruction and it's type, or after it's type.  'atomicrmw' has
      'volatile' between the instruction and the type while 'call' has 'tail'
      preceding the instruction.
      
      With all this in mind, it seems most consistent for 'inalloca' on an
      'inalloca' instruction to occur before between the instruction and the
      type.  Unlike the current formulation, there would be no preceding
      comma.  The combination 'alloca inalloca' doesn't look particularly
      appetizing, perhaps a better spelling of 'inalloca' is down the road.
      
      llvm-svn: 203376
      c4ab61cb
    • Ahmed Charles's avatar
      [C++11] Fix break due to MSVC bug. · 821b6666
      Ahmed Charles authored
      MSVC (2012, 2013, 2013 Nov CTP) fail on the following code:
      
      int main() {
        int arr[] = {1, 2};
        for (int i : arr)
          do {} while (0);
      }
      
      The fix is to put {} around the for loop. I've reported this to the MSVC
      team.
      
      llvm-svn: 203371
      821b6666
    • Ahmed Charles's avatar
      Fix build break. · 5d461ede
      Ahmed Charles authored
      llvm-svn: 203366
      5d461ede
    • Chandler Carruth's avatar
      [C++11] Add range based accessors for the Use-Def chain of a Value. · cdf47884
      Chandler Carruth authored
      This requires a number of steps.
      1) Move value_use_iterator into the Value class as an implementation
         detail
      2) Change it to actually be a *Use* iterator rather than a *User*
         iterator.
      3) Add an adaptor which is a User iterator that always looks through the
         Use to the User.
      4) Wrap these in Value::use_iterator and Value::user_iterator typedefs.
      5) Add the range adaptors as Value::uses() and Value::users().
      6) Update *all* of the callers to correctly distinguish between whether
         they wanted a use_iterator (and to explicitly dig out the User when
         needed), or a user_iterator which makes the Use itself totally
         opaque.
      
      Because #6 requires churning essentially everything that walked the
      Use-Def chains, I went ahead and added all of the range adaptors and
      switched them to range-based loops where appropriate. Also because the
      renaming requires at least churning every line of code, it didn't make
      any sense to split these up into multiple commits -- all of which would
      touch all of the same lies of code.
      
      The result is still not quite optimal. The Value::use_iterator is a nice
      regular iterator, but Value::user_iterator is an iterator over User*s
      rather than over the User objects themselves. As a consequence, it fits
      a bit awkwardly into the range-based world and it has the weird
      extra-dereferencing 'operator->' that so many of our iterators have.
      I think this could be fixed by providing something which transforms
      a range of T&s into a range of T*s, but that *can* be separated into
      another patch, and it isn't yet 100% clear whether this is the right
      move.
      
      However, this change gets us most of the benefit and cleans up
      a substantial amount of code around Use and User. =]
      
      llvm-svn: 203364
      cdf47884
  3. Mar 08, 2014
Loading