Skip to content
  1. Jul 03, 2010
  2. Jun 26, 2010
  3. Jun 24, 2010
  4. Jun 19, 2010
  5. Jun 16, 2010
    • Jakob Stoklund Olesen's avatar
      Allow a register to be redefined multiple times in a basic block. · 207cd4bb
      Jakob Stoklund Olesen authored
      LiveVariableAnalysis was a bit picky about a register only being redefined once,
      but that really isn't necessary.
      
      Here is an example of chained INSERT_SUBREGs that we can handle now:
      
      68      %reg1040<def> = INSERT_SUBREG %reg1040, %reg1028<kill>, 14
                      register: %reg1040 +[70,134:0)
      76      %reg1040<def> = INSERT_SUBREG %reg1040, %reg1029<kill>, 13
                      register: %reg1040 replace range with [70,78:1) RESULT: %reg1040,0.000000e+00 = [70,78:1)[78,134:0)  0@78-(134) 1@70-(78)
      84      %reg1040<def> = INSERT_SUBREG %reg1040, %reg1030<kill>, 12
                      register: %reg1040 replace range with [78,86:2) RESULT: %reg1040,0.000000e+00 = [70,78:1)[78,86:2)[86,134:0)  0@86-(134) 1@70-(78) 2@78-(86)
      92      %reg1040<def> = INSERT_SUBREG %reg1040, %reg1031<kill>, 11
                      register: %reg1040 replace range with [86,94:3) RESULT: %reg1040,0.000000e+00 = [70,78:1)[78,86:2)[86,94:3)[94,134:0)  0@94-(134) 1@70-(78) 2@78-(86) 3@86-(94)
      
      rdar://problem/8096390
      
      llvm-svn: 106152
      207cd4bb
  6. Jun 03, 2010
  7. May 21, 2010
  8. May 20, 2010
  9. May 17, 2010
  10. May 15, 2010
  11. May 10, 2010
  12. May 05, 2010
    • Evan Cheng's avatar
      Teach liveintervalanalysis about virtual registers which are defined by... · 38d9a6f8
      Evan Cheng authored
      Teach liveintervalanalysis about virtual registers which are defined by reg_sequence instructions that are formed by registers defined by distinct instructions. e.g.
      80      %reg1041:6<def> = VSHRNv4i16 %reg1034<kill>, 12, pred:14, pred:%reg0
      . . .
      120     %reg1041:5<def> = VSHRNv4i16 %reg1039<kill>, 12, pred:14, pred:%reg0
      
      llvm-svn: 103102
      38d9a6f8
  13. May 04, 2010
    • Evan Cheng's avatar
      Teach PHI elimination to remove REG_SEQUENCE instructions and update... · 4c908f41
      Evan Cheng authored
      Teach PHI elimination to remove REG_SEQUENCE instructions and update references of the source operands with references of the destination with subreg indices. e.g.
      %reg1029<def>, %reg1030<def> = VLD1q16 %reg1024<kill>, ...
      %reg1031<def> = REG_SEQUENCE %reg1029<kill>, 5, %reg1030<kill>, 6
      =>
      %reg1031:5<def>, %reg1031:6<def> = VLD1q16 %reg1024<kill>, ...
      
      PHI elimination now does more than phi elimination. It is really a de-SSA pass.
      
      llvm-svn: 103039
      4c908f41
  14. May 03, 2010
  15. Apr 29, 2010
  16. Apr 26, 2010
  17. Apr 13, 2010
  18. Apr 08, 2010
  19. Mar 30, 2010
  20. Mar 24, 2010
    • Bob Wilson's avatar
      Revert Edwin's change that is breaking MultiSource/Applications/ClamAV/clamscan. · 4d87012e
      Bob Wilson authored
      --- Reverse-merging r99400 into '.':
      D    test/CodeGen/Generic/2010-03-24-liveintervalleak.ll
      U    lib/CodeGen/LiveIntervalAnalysis.cpp
      
      llvm-svn: 99419
      4d87012e
    • Torok Edwin's avatar
      Fix memory leak in liveintervals: the destructor for VNInfos must be called, · 4bbfdd41
      Torok Edwin authored
      otherwise the SmallVector it contains doesn't free its memory.
      In most cases LiveIntervalAnalysis could get away by not calling the destructor,
      because VNInfos are bumpptr-allocated, and smallvectors usually don't grow.
      However when the SmallVector does grow it always leaks.
      
      This is the valgrind shown leak from the original testcase:
      ==8206== 18,304 bytes in 151 blocks are definitely lost in loss record 164 of 164
      ==8206==    at 0x4A079C7: operator new(unsigned long) (vg_replace_malloc.c:220)
      ==8206==    by 0x4DB7A7E: llvm::SmallVectorBase::grow_pod(unsigned long, unsigned long) (in /home/edwin/clam/git/builds/defaul
      t/libclamav/.libs/libclamav.so.6.1.0)
      ==8206==    by 0x4F90382: llvm::VNInfo::addKill(llvm::SlotIndex) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libcl
      amav.so.6.1.0)
      ==8206==    by 0x5126B5C: llvm::LiveIntervals::handleVirtualRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::M
      achineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int, llvm::LiveInterval&) (in /home/edwin/clam/git/builds/defau
      lt/libclamav/.libs/libclamav.so.6.1.0)
      ==8206==    by 0x512725E: llvm::LiveIntervals::handleRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineI
      nstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav
      .so.6.1.0)
      ==8206==    by 0x51278A8: llvm::LiveIntervals::computeIntervals() (in /home/edwin/clam/git/builds/default/libclamav/.libs/libc
      lamav.so.6.1.0)
      ==8206==    by 0x5127CB4: llvm::LiveIntervals::runOnMachineFunction(llvm::MachineFunction&) (in /home/edwin/clam/git/builds/de
      fault/libclamav/.libs/libclamav.so.6.1.0)
      ==8206==    by 0x4DAE935: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclama
      v/.libs/libclamav.so.6.1.0)
      ==8206==    by 0x4DAEB10: llvm::FunctionPassManagerImpl::run(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclama
      v/.libs/libclamav.so.6.1.0)
      ==8206==    by 0x4DAED3D: llvm::FunctionPassManager::run(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclamav/.l
      ibs/libclamav.so.6.1.0)
      ==8206==    by 0x4D8BE8E: llvm::JIT::runJITOnFunctionUnlocked(llvm::Function*, llvm::MutexGuard const&) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav.so.6.1.0)
      ==8206==    by 0x4D8CA72: llvm::JIT::getPointerToFunction(llvm::Function*) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav.so.6.1.0)
      
      llvm-svn: 99400
      4bbfdd41
  21. Mar 16, 2010
  22. Mar 11, 2010
    • Evan Cheng's avatar
      The check for coalescing a virtual register to a physical register, e.g. · 8c4df816
      Evan Cheng authored
      cl = EXTRACT_SUBREG reg1024, 1, is overly conservative. It should check
      for overlaps of vr's live interval with the super registers of the
      physical register (ECX in this case) and let JoinIntervals() handle checking
      the coalescing feasibility against the physical register (cl in this case).
      
      llvm-svn: 98251
      8c4df816
  23. Mar 10, 2010
Loading