Skip to content
  1. Jan 10, 2012
  2. Dec 22, 2011
  3. 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
  4. Dec 06, 2011
    • Evan Cheng's avatar
      First chunk of MachineInstr bundle support. · 2a81dd4a
      Evan Cheng authored
      1. Added opcode BUNDLE
      2. Taught MachineInstr class to deal with bundled MIs
      3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs
      4. Taught MachineBasicBlock methods about bundled MIs
      
      llvm-svn: 145975
      2a81dd4a
  5. Nov 16, 2011
  6. Oct 26, 2011
  7. Oct 20, 2011
  8. Oct 17, 2011
  9. Oct 13, 2011
  10. Oct 12, 2011
    • Evan Cheng's avatar
      Disable machine LICM speculation check (for profitability) until I have time... · b35afcaa
      Evan Cheng authored
      Disable machine LICM speculation check (for profitability) until I have time to investigate the regressions.
      
      llvm-svn: 141813
      b35afcaa
    • Bill Wendling's avatar
      Expand the check for a landing pad so that it looks at the basic block's · 918cea2c
      Bill Wendling authored
      containing loop's header to see if that's a landing pad. If it is, then we don't
      want to hoist instructions out of the loop and above the header.
      
      llvm-svn: 141767
      918cea2c
    • Evan Cheng's avatar
      Fix r141744. · af138954
      Evan Cheng authored
      1. The speculation check may not have been performed if the BB hasn't had a load
         LICM candidate.
      2. If the candidate would be CSE'ed, then go ahead and speculatively LICM the
         instruction even if it's in high register pressure situation.
      
      llvm-svn: 141747
      af138954
    • Evan Cheng's avatar
      Refine r141689 with a tri-state variable. · f192ca07
      Evan Cheng authored
      Also teach MachineLICM to avoid "speculation" when register pressure is high.
      
      llvm-svn: 141744
      f192ca07
    • Bill Wendling's avatar
      N.B. This is with the new EH scheme: · 579ff6c3
      Bill Wendling authored
      The blocks with invokes have branches to the dispatch block, because that more
      correctly models the behavior of the CFG. The dispatch of course has edges to
      the landing pads. Those landing pads could contain invokes, which then have
      branches back to the dispatch. This creates a loop. The machine LICM pass looks
      at this loop and thinks it can hoist elements out of it. But because the
      dispatch is an alternate entry point into the program, the hoisted instructions
      won't be executed.
      
      I wasn't able to get a testcase which was small and could reproduce all of the
      time. The function_try_block.cpp in llvm-test was where this showed up.
      
      llvm-svn: 141726
      579ff6c3
  11. Oct 11, 2011
  12. Oct 10, 2011
  13. Sep 01, 2011
  14. Jun 29, 2011
  15. Jun 28, 2011
  16. Jun 27, 2011
  17. Apr 11, 2011
  18. Mar 07, 2011
  19. Jan 20, 2011
    • Evan Cheng's avatar
      Sorry, several patches in one. · b8b0ad80
      Evan Cheng authored
      TargetInstrInfo:
      Change produceSameValue() to take MachineRegisterInfo as an optional argument.
      When in SSA form, targets can use it to make more aggressive equality analysis.
      
      Machine LICM:
      1. Eliminate isLoadFromConstantMemory, use MI.isInvariantLoad instead.
      2. Fix a bug which prevent CSE of instructions which are not re-materializable.
      3. Use improved form of produceSameValue.
      
      ARM:
      1. Teach ARM produceSameValue to look pass some PIC labels.
      2. Look for operands from different loads of different constant pool entries
         which have same values.
      3. Re-implement PIC GA materialization using movw + movt. Combine the pair with
         a "add pc" or "ldr [pc]" to form pseudo instructions. This makes it possible
         to re-materialize the instruction, allow machine LICM to hoist the set of
         instructions out of the loop and make it possible to CSE them. It's a bit
         hacky, but it significantly improve code quality.
      4. Some minor bug fixes as well.
      
      With the fixes, using movw + movt to materialize GAs significantly outperform the
      load from constantpool method. 186.crafty and 255.vortex improved > 20%, 254.gap
      and 176.gcc ~10%.
      
      llvm-svn: 123905
      b8b0ad80
  20. Jan 10, 2011
  21. Nov 11, 2010
  22. Nov 02, 2010
  23. Oct 26, 2010
  24. Oct 21, 2010
    • Evan Cheng's avatar
      More accurate estimate / tracking of register pressure. · 87066f06
      Evan Cheng authored
      - Initial register pressure in the loop should be all the live defs into the
        loop. Not just those from loop preheader which is often empty.
      - When an instruction is hoisted, update register pressure from loop preheader
        to the original BB.
      - Treat only use of a virtual register as kill since the code is still SSA.
      
      llvm-svn: 116956
      87066f06
  25. Oct 20, 2010
  26. Oct 19, 2010
    • Evan Cheng's avatar
      Re-enable register pressure aware machine licm with fixes. Hoist() may have · 63c7608c
      Evan Cheng authored
      erased the instruction during LICM so UpdateRegPressureAfter() should not
      reference it afterwards.
      
      llvm-svn: 116845
      63c7608c
    • 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
    • Daniel Dunbar's avatar
      Revert r116781 "- Add a hook for target to determine whether an instruction def · 418204e5
      Daniel Dunbar authored
      is", which breaks some nightly tests.
      
      llvm-svn: 116816
      418204e5
    • Andrew Trick's avatar
      Fix for machine licm assert: RCCost <= RegPressure[RCId] · 2006bbef
      Andrew Trick authored
      in MultiSource/Benchmarks/VersaBench/beamformer/beamformer.
      SmallSet.insert returns true if the element is inserted.
      
      llvm-svn: 116790
      2006bbef
    • Evan Cheng's avatar
      - Add a hook for target to determine whether an instruction def is · 8249dfe6
      Evan Cheng authored
        "long latency" enough to hoist even if it may increase spilling. Reloading
        a value from spill slot is often cheaper than performing an expensive
        computation in the loop. For X86, that means machine LICM will hoist
        SQRT, DIV, etc. ARM will be somewhat aggressive with VFP and NEON
        instructions.
      - Enable register pressure aware machine LICM by default.
      
      llvm-svn: 116781
      8249dfe6
  27. Oct 16, 2010
Loading