Skip to content
  1. Oct 21, 2011
    • Chandler Carruth's avatar
      Implement a block placement pass based on the branch probability and · 10281425
      Chandler Carruth authored
      block frequency analyses. This differs substantially from the existing
      block-placement pass in LLVM:
      
      1) It operates on the Machine-IR in the CodeGen layer. This exposes much
         more (and more precise) information and opportunities. Also, the
         results are more stable due to fewer transforms ocurring after the
         pass runs.
      2) It uses the generalized probability and frequency analyses. These can
         model static heuristics, code annotation derived heuristics as well
         as eventual profile loading. By basing the optimization on the
         analysis interface it can work from any (or a combination) of these
         inputs.
      3) It uses a more aggressive algorithm, both building chains from tho
         bottom up to maximize benefit, and using an SCC-based walk to layout
         chains of blocks in a profitable ordering without O(N^2) iterations
         which the old pass involves.
      
      The pass is currently gated behind a flag, and not enabled by default
      because it still needs to grow some important features. Most notably, it
      needs to support loop aligning and careful layout of loop structures
      much as done by hand currently in CodePlacementOpt. Once it supports
      these, and has sufficient testing and quality tuning, it should replace
      both of these passes.
      
      Thanks to Nick Lewycky and Richard Smith for help authoring & debugging
      this, and to Jakob, Andy, Eric, Jim, and probably a few others I'm
      forgetting for reviewing and answering all my questions. Writing
      a backend pass is *sooo* much better now than it used to be. =D
      
      llvm-svn: 142641
      10281425
    • Chandler Carruth's avatar
      Remove a now dead function, fixing -Wunused-function warnings from · 00115378
      Chandler Carruth authored
      Clang.
      
      llvm-svn: 142631
      00115378
    • Richard Smith's avatar
      Fix unused variable warning. · c842c2ff
      Richard Smith authored
      llvm-svn: 142630
      c842c2ff
    • Owen Anderson's avatar
  2. Oct 20, 2011
  3. Oct 19, 2011
    • Nadav Rotem's avatar
      Improve code generation for vselect on SSE2: · 8824472a
      Nadav Rotem authored
      When checking the availability of instructions using the TLI, a 'promoted'
      instruction IS available. It means that the value is bitcasted to another type
      for which there is an operation. The correct check for the availablity of an
      instruction is to check if it should be expanded.
      
      llvm-svn: 142542
      8824472a
    • Rafael Espindola's avatar
      Fix parsing of a line with only a # in it. · e0d09083
      Rafael Espindola authored
      llvm-svn: 142537
      e0d09083
    • James Molloy's avatar
      Use literal pool loads instead of MOVW/MOVT for materializing global addresses... · 2d768fd3
      James Molloy authored
      Use literal pool loads instead of MOVW/MOVT for materializing global addresses when optimizing for size.
      
      On spec/gcc, this caused a codesize improvement of ~1.9% for ARM mode and ~4.9% for Thumb(2) mode. This is
      codesize including literal pools.
      
      The pools themselves doubled in size for ARM mode and quintupled for Thumb mode, leaving suggestion that there
      is still perhaps redundancy in LLVM's use of constant pools that could be decreased by sharing entries.
      
      Fixes PR11087.
      
      llvm-svn: 142530
      2d768fd3
    • David Greene's avatar
      Implement Paste · 8e85b480
      David Greene authored
      Add a paste operator '#' to take two identifier-like strings and joint
      them.  Internally paste gets represented as a !strconcat() with any
      necessary casts to string added.
      
      This will be used to implement basic for loop functionality as in:
      
      for i = [0, 1, 2, 3, 4, 5, 6, 7] {
        def R#i : Register<...>
      }
      
      llvm-svn: 142525
      8e85b480
    • David Greene's avatar
      Process NAME · 8bf0d72f
      David Greene authored
      During multiclass def instantiation, replace NAME in any expressions
      with the value of the def or defm ID.
      
      llvm-svn: 142524
      8bf0d72f
    • David Greene's avatar
      Process Defm Prefix as Init · 5d5d88cc
      David Greene authored
      Parse and process a defm prefix as an Init expression.  This allows
      paste operations to create defm prefixes.
      
      llvm-svn: 142523
      5d5d88cc
    • David Greene's avatar
      Parse Def ID as Value · 2affd67b
      David Greene authored
      Allow def and defm IDs to be general values.  We need this for paste
      functionality.
      
      llvm-svn: 142522
      2affd67b
    • David Greene's avatar
      Don't Parse Object Body as a Name · b8a7c9d0
      David Greene authored
      Stop parsing a value if we are in name parsing mode and we see a left
      brace.  A left brace indicates the start of an object body when we are
      parsing a name.
      
      llvm-svn: 142521
      b8a7c9d0
    • David Greene's avatar
      Use Parse Mode · 232bd601
      David Greene authored
      Augment the value parser to respect the parse mode and not error if an
      ID doesn't map to an object and we are in name parsing mode.
      
      llvm-svn: 142520
      232bd601
    • David Greene's avatar
      Make ID Parsing More Flexible · d4263a6a
      David Greene authored
      Add a mode control to value and ID parsers.  The two modes are:
      
      - Parse a value.  Expect the parsed ID to map to an existing object.
      
      - Parse a name.  Expect the parsed ID to not map to any existing object.
      
      The first is used when parsing an identifier to be looked up, for
      example a record field or template argument.  The second is used for
      parsing declarations.  Paste functionality implies that declarations
      can contain arbitrary expressions so we need to be able to call into
      the general value parser to parse declarations with paste operators.
      So we need a way to parse a value-like thing without expecting that
      the result will map to some existing object.  This parse mode provides
      that.
      
      llvm-svn: 142519
      d4263a6a
    • David Greene's avatar
      Add NAME Member · d699161a
      David Greene authored
      Add a Value named "NAME" to each Record.  This will be set to the def or defm
      name when instantiating multiclasses.  This will replace the #NAME# processing
      hack once paste functionality is in place.
      
      llvm-svn: 142518
      d699161a
    • David Greene's avatar
      Fix Name Access · 7b6e6411
      David Greene authored
      Get the Record name as a string explicitly to avoid asserts.
      
      llvm-svn: 142517
      7b6e6411
    • David Greene's avatar
      Fix Name Access · 8eed9988
      David Greene authored
      Get the Record name as a string explicitly to avoid asserts.
      
      llvm-svn: 142516
      8eed9988
    • David Greene's avatar
      Fix Name Access · 07e055f9
      David Greene authored
      Get the Record name as a string explicitly to avoid asserts.
      
      llvm-svn: 142515
      07e055f9
    • David Greene's avatar
      Fix Name Access · 3a20f5a6
      David Greene authored
      Get the Record name by string explicitly to avoid potential asserts.
      
      llvm-svn: 142514
      3a20f5a6
    • David Greene's avatar
      Disambiguate Numbers and Identifiers · 5c9fa026
      David Greene authored
      Use lookahead to determine whether a number is really a number or is
      part of something forming an identifier.  This won't come into play
      until the paste operator is recognized as a unique token.
      
      llvm-svn: 142513
      5c9fa026
Loading