Skip to content
  1. Mar 02, 2011
  2. Feb 10, 2011
  3. Jan 10, 2011
  4. Jan 09, 2011
  5. Jan 08, 2011
    • Evan Cheng's avatar
      Do not model all INLINEASM instructions as having unmodelled side effects. · 6eb516db
      Evan Cheng authored
      Instead encode llvm IR level property "HasSideEffects" in an operand (shared
      with IsAlignStack). Added MachineInstrs::hasUnmodeledSideEffects() to check
      the operand when the instruction is an INLINEASM.
      
      This allows memory instructions to be moved around INLINEASM instructions.
      
      llvm-svn: 123044
      6eb516db
  6. Dec 19, 2010
  7. Dec 17, 2010
  8. Dec 14, 2010
    • Evan Cheng's avatar
      Fix a minor bug in two-address pass. It was missing a commute opportunity. · 19dc77ce
      Evan Cheng authored
      regB = move RCX
      regA = op regB, regC
      RAX  = move regA
      where both regB and regC are killed. If regB is constrainted to non-compatible
      physical registers but regC is not constrainted at all, then it's better to
      commute the instruction.
             movl    %edi, %eax
             shlq    $32, %rcx
             leaq    (%rcx,%rax), %rax
      =>
             movl    %edi, %eax
             shlq    $32, %rcx
             orq     %rcx, %rax
      rdar://8762995
      
      llvm-svn: 121793
      19dc77ce
  9. Oct 21, 2010
  10. Oct 19, 2010
    • 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
  11. Oct 12, 2010
  12. Oct 08, 2010
  13. Aug 23, 2010
  14. Aug 09, 2010
  15. Aug 06, 2010
  16. Jul 16, 2010
  17. Jul 11, 2010
  18. Jul 10, 2010
  19. Jul 08, 2010
  20. Jul 07, 2010
  21. Jul 03, 2010
  22. Jul 02, 2010
    • Evan Cheng's avatar
      - Two-address pass should not assume unfolding is always successful. · 0ce84486
      Evan Cheng authored
      - X86 unfolding should check if the instructions being unfolded has memoperands.
        If there is no memoperands, then it must assume conservative alignment. If this
        would introduce an expensive sse unaligned load / store, then unfoldMemoryOperand
        etc. should not unfold the instruction.
      
      llvm-svn: 107509
      0ce84486
  23. Jun 22, 2010
  24. Jun 19, 2010
  25. Jun 15, 2010
  26. Jun 09, 2010
  27. Jun 08, 2010
  28. Jun 04, 2010
    • Bob Wilson's avatar
      Add some missing checks in TwoAddressInstructionPass::CoalesceExtSubRegs. · a733daf1
      Bob Wilson authored
      Check that all the instructions are in the same basic block, that the
      EXTRACT_SUBREGs write to the same subregs that are being extracted, and that
      the source and destination registers are in the same regclass.  Some of
      these constraints can be relaxed with a bit more work.  Jakob suggested
      that the loop that checks for subregs when NewSubIdx != 0 should use the
      "nodbg" iterator, so I made that change here, too.
      
      llvm-svn: 105437
      a733daf1
  29. Jun 03, 2010
    • Jakob Stoklund Olesen's avatar
      Slightly change the meaning of the reMaterialize target hook when the original · a8ad9774
      Jakob Stoklund Olesen authored
      instruction defines subregisters.
      
      Any existing subreg indices on the original instruction are preserved or
      composed with the new subreg index.
      
      Also substitute multiple operands mentioning the original register by using the
      new MachineInstr::substituteRegister() function. This is necessary because there
      will soon be <imp-def> operands added to non read-modify-write partial
      definitions. This instruction:
      
        %reg1234:foo = FLAP %reg1234<imp-def>
      
      will reMaterialize(%reg3333, bar) like this:
      
        %reg3333:bar-foo = FLAP %reg333:bar<imp-def>
      
      Finally, replace the TargetRegisterInfo pointer argument with a reference to
      indicate that it cannot be NULL.
      
      llvm-svn: 105358
      a8ad9774
  30. Jun 02, 2010
Loading