Skip to content
  1. Jul 10, 2012
  2. Jul 09, 2012
  3. Jul 07, 2012
    • Andrew Trick's avatar
      I'm introducing a new machine model to simultaneously allow simple · 87255e34
      Andrew Trick authored
      subtarget CPU descriptions and support new features of
      MachineScheduler.
      
      MachineModel has three categories of data:
      1) Basic properties for coarse grained instruction cost model.
      2) Scheduler Read/Write resources for simple per-opcode and operand cost model (TBD).
      3) Instruction itineraties for detailed per-cycle reservation tables.
      
      These will all live side-by-side. Any subtarget can use any
      combination of them. Instruction itineraries will not change in the
      near term. In the long run, I expect them to only be relevant for
      in-order VLIW machines that have complex contraints and require a
      precise scheduling/bundling model. Once itineraries are only actively
      used by VLIW-ish targets, they could be replaced by something more
      appropriate for those targets.
      
      This tablegen backend rewrite sets things up for introducing
      MachineModel type #2: per opcode/operand cost model.
      
      llvm-svn: 159891
      87255e34
  4. Jul 06, 2012
  5. Jul 05, 2012
    • Chandler Carruth's avatar
      Optimize extendIntervalEndTo a tiny bit by saving one call through the · 10886764
      Chandler Carruth authored
      vector erase. No functionality changed.
      
      llvm-svn: 159746
      10886764
    • Chandler Carruth's avatar
      Finish fixing the MachineOperand hashing, providing a nice modern · 264854f9
      Chandler Carruth authored
      hash_value overload for MachineOperands. This addresses a FIXME
      sufficient for me to remove it, and cleans up the code nicely too.
      
      The important changes to the hashing logic:
      - TargetFlags are now included in all of the hashes. These were complete
        missed.
      - Register operands have their subregisters and whether they are a def
        included in the hash.
      - We now actually hash all of the operand types. Previously, many
        operand types were simply *dropped on the floor*. For example:
        - Floating point immediates
        - Large integer immediates (>64-bit)
        - External globals!
        - Register masks
        - Metadata operands
      - It removes the offset from the block-address hash; I'm a bit
        suspicious of this, but isIdenticalTo doesn't consider the offset for
        black addresses.
      
      Any patterns involving these entities could have triggered extreme
      slowdowns in MachineCSE or PHIElimination. Let me know if there are PRs
      you think might be closed now... I'm looking myself, but I may miss
      them.
      
      llvm-svn: 159743
      264854f9
    • Duncan Sands's avatar
      All cases are covered, no need for a default. This deals with the · 71dacd09
      Duncan Sands authored
      corresponding clang warning.
      
      llvm-svn: 159742
      71dacd09
    • Chandler Carruth's avatar
      The hash function for MI expressions, used by MachineCSE, is really · 1d5d2310
      Chandler Carruth authored
      broken. This patch fixes the superficial problems which lead to the
      intractably slow compile times reported in PR13225.
      
      The specific issue is that we were failing to include the *offset* of
      a global variable in the hash code. Oops. This would in turn cause all
      MIs which were only distinguishable due to operating on different
      offsets of a global variable to produce identical hash functions. In
      some of the test cases attached to the PR I saw hash table activity
      where there were O(1000) probes-per-lookup *on average*. A very few
      entries were responsible for most of these probes.
      
      There is still quite a bit more to do here. The ad-hoc layering of data
      in MachineOperands makes them *extremely* brittle to hash correctly.
      We're missing quite a few other cases, the only ones I've fixed here are
      the specific MO types which were allowed through the assert() in
      getOffset().
      
      llvm-svn: 159741
      1d5d2310
    • Duncan Sands's avatar
      Use the right kind of booleans: we were emitting 0/1 booleans, instead of 0/-1 · 0552a2ca
      Duncan Sands authored
      booleans.  Patch by James Benton.
      
      llvm-svn: 159739
      0552a2ca
    • Nick Lewycky's avatar
      Remove ParentMap. You can just ask the domnode for its parent. No functionality · 765c6993
      Nick Lewycky authored
      change.
      
      Move the "Not profitable, avoid CSE!" debug message next to where we fail the
      check for profitability and use a different message for avoiding CSE due to
      being in different register classes.
      
      llvm-svn: 159729
      765c6993
    • Jakob Stoklund Olesen's avatar
      Allow trailing physreg RegisterSDNode operands on non-variadic instructions. · c300ef0e
      Jakob Stoklund Olesen authored
      Also allow trailing register mask operands on non-variadic both
      MachineSDNodes and MachineInstrs.
      
      The extra physreg RegisterSDNode operands are added to the MI as
      <imp-use> operands. This makes it possible to have non-variadic call
      instructions.
      
      Call and return instructions really are non-variadic, the argument
      registers should only be used implicitly - they are not part of the
      encoding.
      
      llvm-svn: 159727
      c300ef0e
    • Jakob Stoklund Olesen's avatar
      Print SlotIndexes when available for -print-machineinstrs. · adb50a7a
      Jakob Stoklund Olesen authored
      llvm-svn: 159726
      adb50a7a
  6. Jul 04, 2012
  7. Jul 03, 2012
  8. Jul 02, 2012
  9. Jul 01, 2012
  10. Jun 30, 2012
  11. Jun 29, 2012
Loading