Skip to content
  1. Jul 12, 2012
  2. Jul 11, 2012
  3. Jul 10, 2012
    • Chandler Carruth's avatar
      Fix a bug where I didn't test for an empty range before inspecting the · 77d94001
      Chandler Carruth authored
      back of it.
      
      I don't have anything even remotely close to a test case for this. It
      only broke two build bots, both of them doing bootstrap builds, one of
      them a dragonegg bootstrap. It doesn't break for me when I bootstrap
      either. It doesn't reproduce every time or on many machines during the
      bootstrap. Many thanks to Duncan Sands who got the exact command (and
      stage of the bootstrap) which failed on the dragonegg bootstrap and
      managed to get it to trigger under valgrind with debug symbols. The fix
      was then found by inspection.
      
      llvm-svn: 159993
      77d94001
    • Nadav Rotem's avatar
      · d908ddc1
      Nadav Rotem authored
      Improve the loading of load-anyext vectors by allowing the codegen to load
      multiple scalars and insert them into a vector. Next, we shuffle the elements
      into the correct places, as before.
      Also fix a small dagcombine bug in SimplifyBinOpWithSameOpcodeHands, when the
      migration of bitcasts happened too late in the SelectionDAG process.
      
      llvm-svn: 159991
      d908ddc1
    • Chandler Carruth's avatar
      Add an efficient merge operation to LiveInterval and use it to avoid · e18614dd
      Chandler Carruth authored
      quadratic behavior when performing pathological merges. Fixes the core
      element of PR12652.
      
      There is only one user of addRangeFrom left: join. I'm hoping to
      refactor further in a future patch and have join use this merge
      operation as well.
      
      llvm-svn: 159982
      e18614dd
    • Chandler Carruth's avatar
      Teach LiveIntervals how to verify themselves and start using it in some · ac766b9b
      Chandler Carruth authored
      of the trick merge routines. This adds a layer of testing that was
      necessary when implementing more efficient (and complex) merge logic for
      this datastructure.
      
      No functionality changed here.
      
      llvm-svn: 159981
      ac766b9b
  4. Jul 09, 2012
  5. 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
  6. Jul 06, 2012
  7. 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
  8. Jul 04, 2012
  9. Jul 03, 2012
  10. Jul 02, 2012
Loading