Skip to content
  1. Jan 06, 2011
  2. Jan 05, 2011
  3. Jan 04, 2011
  4. Jan 03, 2011
  5. Jan 02, 2011
    • Chris Lattner's avatar
      split dom frontier handling stuff out to its own DominanceFrontier header, · bf0aa927
      Chris Lattner authored
      so that Dominators.h is *just* domtree.  Also prune #includes a bit.
      
      llvm-svn: 122714
      bf0aa927
    • Benjamin Kramer's avatar
      Try to reuse the value when lowering memset. · 25e6e06e
      Benjamin Kramer authored
      This allows us to compile:
        void test(char *s, int a) {
          __builtin_memset(s, a, 15);
        }
      into 1 mul + 3 stores instead of 3 muls + 3 stores.
      
      llvm-svn: 122710
      25e6e06e
    • Benjamin Kramer's avatar
      Lower the i8 extension in memset to a multiply instead of a potentially long... · 2fdea4c8
      Benjamin Kramer authored
      Lower the i8 extension in memset to a multiply instead of a potentially long series of shifts and ors.
      
      We could implement a DAGCombine to turn x * 0x0101 back into logic operations
      on targets that doesn't support the multiply or it is slow (p4) if someone cares
      enough.
      
      Example code:
        void test(char *s, int a) {
            __builtin_memset(s, a, 4);
        }
      before:
        _test:                                  ## @test
          movzbl  8(%esp), %eax
          movl  %eax, %ecx
          shll  $8, %ecx
          orl %eax, %ecx
          movl  %ecx, %eax
          shll  $16, %eax
          orl %ecx, %eax
          movl  4(%esp), %ecx
          movl  %eax, 4(%ecx)
          movl  %eax, (%ecx)
          ret
      after:
        _test:                                  ## @test
          movzbl  8(%esp), %eax
          imull $16843009, %eax, %eax   ## imm = 0x1010101
          movl  4(%esp), %ecx
          movl  %eax, 4(%ecx)
          movl  %eax, (%ecx)
          ret
      
      llvm-svn: 122707
      2fdea4c8
  6. Dec 30, 2010
  7. Dec 29, 2010
  8. Dec 28, 2010
  9. Dec 27, 2010
    • Cameron Zwarich's avatar
      Change an assertion to assert what the code actually relies upon. · 5e5cfbe8
      Cameron Zwarich authored
      llvm-svn: 122586
      5e5cfbe8
    • Cameron Zwarich's avatar
      Land a first cut at StrongPHIElimination. There are only 5 new test failures · 25d046ce
      Cameron Zwarich authored
      when running without the verifier, and I have not yet checked them to see if
      the new results are still correct. There are more verifier failures, but they
      all seem to be additional occurrences of verifier failures that occur with the
      existing PHIElimination pass. There are a few obvious issues with the code:
      
      1) It doesn't properly update the register equivalence classes during copy
      insertion, and instead recomputes them before merging live intervals and
      renaming registers. I wanted to keep this first patch simple for debugging
      purposes, but it shouldn't be very hard to do this.
      
      2) It doesn't mix the renaming and live interval merging with the copy insertion
      process, which leads to a lot of virtual register churn. Virtual registers and
      live intervals are created, only to later be merged into others. The code should
      be smarter and only create a new virtual register if there is no existing
      register in the same congruence class.
      
      3) In one place the code uses a DenseMap per basic block, which is unnecessary
      heap allocation. There should be an inline storage version of DenseMap.
      
      I did a quick compile-time test of running llc on 403.gcc with and without
      StrongPHIElimination. It is slightly slower with StrongPHIElimination, because
      the small decrease in the coalescer runtime can't beat the increase in phi
      elimination runtime. Perhaps fixing the above performance issues will narrow
      the gap.
      
      I also haven't yet run any tests of the quality of the generated code.
      
      llvm-svn: 122582
      25d046ce
    • Cameron Zwarich's avatar
      Add knowledge of phi-def and phi-kill valnos to MachineVerifier's predecessor · b95bfe16
      Cameron Zwarich authored
      valno verification. The "Different value live out of predecessor" check is
      incorrect in the case of phi-def valnos, so just skip that check for phi-def
      valnos and instead check that all of the valnos for predecessors have phi-kill.
      Fixes PR8863.
      
      llvm-svn: 122581
      b95bfe16
  10. Dec 24, 2010
    • Andrew Trick's avatar
      Minor cleanup related to my latest scheduler changes. · 5ce945ca
      Andrew Trick authored
      llvm-svn: 122545
      5ce945ca
    • Andrew Trick's avatar
      Fix a few cases where the scheduler is not checking for phys reg copies. The... · c9405669
      Andrew Trick authored
      Fix a few cases where the scheduler is not checking for phys reg copies. The scheduling node may have a NULL DAG node, yuck.
      
      llvm-svn: 122544
      c9405669
    • Andrew Trick's avatar
      Various bits of framework needed for precise machine-level selection · 10ffc2b6
      Andrew Trick authored
      DAG scheduling during isel. Most new functionality is currently
      guarded by -enable-sched-cycles and -enable-sched-hazard.
      
      Added InstrItineraryData::IssueWidth field, currently derived from
      ARM itineraries, but could be initialized differently on other targets.
      
      Added ScheduleHazardRecognizer::MaxLookAhead to indicate whether it is
      active, and if so how many cycles of state it holds.
      
      Added SchedulingPriorityQueue::HasReadyFilter to allowing gating entry
      into the scheduler's available queue.
      
      ScoreboardHazardRecognizer now accesses the ScheduleDAG in order to
      get information about it's SUnits, provides RecedeCycle for bottom-up
      scheduling, correctly computes scoreboard depth, tracks IssueCount, and
      considers potential stall cycles when checking for hazards.
      
      ScheduleDAGRRList now models machine cycles and hazards (under
      flags). It tracks MinAvailableCycle, drives the hazard recognizer and
      priority queue's ready filter, manages a new PendingQueue, properly
      accounts for stall cycles, etc.
      
      llvm-svn: 122541
      10ffc2b6
    • Andrew Trick's avatar
      whitespace · c416ba61
      Andrew Trick authored
      llvm-svn: 122539
      c416ba61
    • Cameron Zwarich's avatar
      Simplify a check for implicit defs and remove a FIXME. · ab434079
      Cameron Zwarich authored
      llvm-svn: 122537
      ab434079
  11. Dec 23, 2010
Loading