Skip to content
  1. May 23, 2013
  2. May 05, 2013
  3. Apr 11, 2013
    • Hal Finkel's avatar
      Manually remove successors in if conversion when CopyAndPredicateBlock is used · 95081bff
      Hal Finkel authored
      In the simple and triangle if-conversion cases, when CopyAndPredicateBlock is
      used because the to-be-predicated block has other predecessors, we need to
      explicitly remove the old copied block from the successors list. Normally if
      conversion relies on TII->AnalyzeBranch combined with BB->CorrectExtraCFGEdges
      to cleanup the successors list, but if the predicated block contained an
      un-analyzable branch (such as a now-predicated return), then this will fail.
      
      These extra successors were causing a problem on PPC because it was causing
      later passes (such as PPCEarlyReturm) to leave dead return-only basic blocks in
      the code.
      
      llvm-svn: 179227
      95081bff
  4. Jan 25, 2013
  5. Jan 11, 2013
  6. Dec 20, 2012
  7. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  8. Aug 22, 2012
  9. Jun 08, 2012
  10. Jun 02, 2012
    • Jakob Stoklund Olesen's avatar
      Switch all register list clients to the new MC*Iterator interface. · 54038d79
      Jakob Stoklund Olesen authored
      No functional change intended.
      
      Sorry for the churn. The iterator classes are supposed to help avoid
      giant commits like this one in the future. The TableGen-produced
      register lists are getting quite large, and it may be necessary to
      change the table representation.
      
      This makes it possible to do so without changing all clients (again).
      
      llvm-svn: 157854
      54038d79
  11. May 30, 2012
  12. Mar 05, 2012
  13. Feb 08, 2012
    • Andrew Trick's avatar
      Codegen pass definition cleanup. No functionality. · 1fa5bcbe
      Andrew Trick authored
      Moving toward a uniform style of pass definition to allow easier target configuration.
      Globally declare Pass ID.
      Globally declare pass initializer.
      Use INITIALIZE_PASS consistently.
      Add a call to the initializer from CodeGen.cpp.
      Remove redundant "createPass" functions and "getPassName" methods.
      
      While cleaning up declarations, cleaned up comments (sorry for large diff).
      
      llvm-svn: 150100
      1fa5bcbe
  14. Feb 05, 2012
  15. Dec 19, 2011
    • Evan Cheng's avatar
      Add a if-conversion optimization that allows 'true' side of a diamond to be · 4266a793
      Evan Cheng authored
      unpredicated. That is, turn
       subeq  r0, r1, #1
       addne  r0, r1, #1                                                                                                                                                                                                     
      into
       sub    r0, r1, #1
       addne  r0, r1, #1
      
      For targets where conditional instructions are always executed, this may be
      beneficial. It may remove pseudo anti-dependency in out-of-order execution
      CPUs. e.g.
       op    r1, ...
       str   r1, [r10]        ; end-of-life of r1 as div result
       cmp   r0, #65
       movne r1, #44  ; raw dependency on previous r1
       moveq r1, #12
      
      If movne is unpredicated, then
       op    r1, ...
       str   r1, [r10]
       cmp   r0, #65
       mov   r1, #44  ; r1 written unconditionally
       moveq r1, #12
      
      Both mov and moveq are no longer depdendent on the first instruction. This gives
      the out-of-order execution engine more freedom to reorder them.
      
      This has passed entire LLVM test suite. But it has not been enabled for any ARM
      variant pending more performance evaluation.
      
      rdar://8951196
      
      llvm-svn: 146914
      4266a793
  16. Dec 07, 2011
    • Evan Cheng's avatar
      Add bundle aware API for querying instruction properties and switch the code · 7f8e563a
      Evan Cheng authored
      generator to it. For non-bundle instructions, these behave exactly the same
      as the MC layer API.
      
      For properties like mayLoad / mayStore, look into the bundle and if any of the
      bundled instructions has the property it would return true.
      For properties like isPredicable, only return true if *all* of the bundled
      instructions have the property.
      For properties like canFoldAsLoad, isCompare, conservatively return false for
      bundles.
      
      llvm-svn: 146026
      7f8e563a
  17. Nov 05, 2011
  18. Aug 04, 2011
  19. Jul 22, 2011
  20. Jul 10, 2011
  21. Jun 29, 2011
  22. Jun 28, 2011
  23. May 12, 2011
  24. May 11, 2011
  25. Apr 27, 2011
  26. Nov 06, 2010
  27. Nov 03, 2010
    • Evan Cheng's avatar
      Two sets of changes. Sorry they are intermingled. · debf9c50
      Evan Cheng authored
      1. Fix pre-ra scheduler so it doesn't try to push instructions above calls to
         "optimize for latency". Call instructions don't have the right latency and
         this is more likely to use introduce spills.
      2. Fix if-converter cost function. For ARM, it should use instruction latencies,
         not # of micro-ops since multi-latency instructions is completely executed
         even when the predicate is false. Also, some instruction will be "slower"
         when they are predicated due to the register def becoming implicit input.
         rdar://8598427
      
      llvm-svn: 118135
      debf9c50
  28. Oct 26, 2010
    • Bob Wilson's avatar
      When the "true" and "false" blocks of a diamond if-conversion are the same, · e1961fe2
      Bob Wilson authored
      do not double-count the duplicate instructions by counting once from the
      beginning and again from the end.  Keep track of where the duplicates from
      the beginning ended and don't go past that point when counting duplicates
      at the end.  Radar 8589805.
      
      This change causes one of the MC/ARM/simple-fp-encoding tests to produce
      different (better!) code without the vmovne instruction being tested.
      I changed the test to produce vmovne and vmoveq instructions but moving
      between register files in the opposite direction.  That's not quite the same
      but predicated versions of those instructions weren't being tested before,
      so at least the test coverage is not any worse, just different.
      
      llvm-svn: 117333
      e1961fe2
    • Bob Wilson's avatar
      Change if-conversion to keep track of the extra cost due to microcoded · efd360c5
      Bob Wilson authored
      instructions separately from the count of non-predicated instructions.  The
      instruction count is used in places to determine how many instructions to
      copy, predicate, etc. and things get confused if that count includes the
      extra cost for microcoded ops.
      
      llvm-svn: 117332
      efd360c5
  29. Oct 19, 2010
    • Owen Anderson's avatar
      Get rid of static constructors for pass registration. Instead, every pass... · 6c18d1aa
      Owen Anderson authored
      Get rid of static constructors for pass registration.  Instead, every pass exposes an initializeMyPassFunction(), which
      must be called in the pass's constructor.  This function uses static dependency declarations to recursively initialize
      the pass's dependencies.
      
      Clients that only create passes through the createFooPass() APIs will require no changes.  Clients that want to use the
      CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
      before parsing commandline arguments.
      
      I have tested this with all standard configurations of clang and llvm-gcc on Darwin.  It is possible that there are problems
      with the static dependencies that will only be visible with non-standard options.  If you encounter any crash in pass
      registration/creation, please send the testcase to me directly.
      
      llvm-svn: 116820
      6c18d1aa
  30. Oct 12, 2010
  31. Oct 08, 2010
  32. Oct 02, 2010
  33. Sep 30, 2010
Loading