Skip to content
  1. Aug 08, 2012
  2. Aug 07, 2012
  3. Aug 04, 2012
  4. Aug 03, 2012
    • Bob Wilson's avatar
      Try to reduce the compile time impact of r161232. · 871701c6
      Bob Wilson authored
      The previous change caused fast isel to not attempt handling any calls to
      builtin functions.  That included things like "printf" and caused some
      noticable regressions in compile time.  I wanted to avoid having fast isel
      keep a separate list of functions that had to be kept in sync with what the
      code in SelectionDAGBuilder.cpp was handling.  I've resolved that here by
      moving the list into TargetLibraryInfo.  This is somewhat redundant in
      SelectionDAGBuilder but it will ensure that we keep things consistent.
      
      llvm-svn: 161263
      871701c6
    • Bob Wilson's avatar
      Fix memcmp code-gen to honor -fno-builtin. · fa59485b
      Bob Wilson authored
      I noticed that SelectionDAGBuilder::visitCall was missing a check for memcmp
      in TargetLibraryInfo, so that it would use custom code for memcmp calls even
      with -fno-builtin.  I also had to add a new -disable-simplify-libcalls option
      to llc so that I could write a test for this.
      
      llvm-svn: 161262
      fa59485b
    • Jakob Stoklund Olesen's avatar
      Completely eliminate VNInfo flags. · daae19f7
      Jakob Stoklund Olesen authored
      The 'unused' state of a value number can be represented as an invalid
      def SlotIndex. This also exposed code that shouldn't have been looking
      at unused value VNInfos.
      
      llvm-svn: 161258
      daae19f7
    • Jakob Stoklund Olesen's avatar
      Fix a couple of loops that were processing unused value numbers. · 21809385
      Jakob Stoklund Olesen authored
      Unused VNInfos should be left alone. Their def SlotIndex doesn't point
      to anything.
      
      llvm-svn: 161257
      21809385
    • Matt Beaumont-Gay's avatar
      Silence unused variable warning in -asserts build · aaba08d5
      Matt Beaumont-Gay authored
      llvm-svn: 161256
      aaba08d5
    • Jakob Stoklund Olesen's avatar
      Eliminate the VNInfo::hasPHIKill() flag. · 9f565e19
      Jakob Stoklund Olesen authored
      The only real user of the flag was removeCopyByCommutingDef(), and it
      has been switched to LiveIntervals::hasPHIKill().
      
      All the code changed by this patch was only concerned with computing and
      propagating the flag.
      
      llvm-svn: 161255
      9f565e19
    • Jakob Stoklund Olesen's avatar
      Make the hasPHIKills flag a computed property. · 06d6a536
      Jakob Stoklund Olesen authored
      The VNInfo::HAS_PHI_KILL is only half supported. We precompute it in
      LiveIntervalAnalysis, but it isn't properly updated by live range
      splitting and functions like shrinkToUses().
      
      It is only used in one place: RegisterCoalescer::removeCopyByCommutingDef().
      
      This patch changes that function to use a new LiveIntervals::hasPHIKill()
      function that computes the flag for a given value number.
      
      llvm-svn: 161254
      06d6a536
    • Jakob Stoklund Olesen's avatar
      Delete dead function. · 19c45966
      Jakob Stoklund Olesen authored
      llvm-svn: 161242
      19c45966
    • Jakob Stoklund Olesen's avatar
      Don't delete dead code in TwoAddressInstructionPass. · 47ac20d4
      Jakob Stoklund Olesen authored
      This functionality was added before we started running
      DeadMachineInstructionElim on all targets. It serves no purpose now.
      
      llvm-svn: 161241
      47ac20d4
    • Bob Wilson's avatar
      Fall back to selection DAG isel for calls to builtin functions. · 3e6fa462
      Bob Wilson authored
      Fast isel doesn't currently have support for translating builtin function
      calls to target instructions.  For embedded environments where the library
      functions are not available, this is a matter of correctness and not
      just optimization.  Most of this patch is just arranging to make the
      TargetLibraryInfo available in fast isel.  <rdar://problem/12008746>
      
      llvm-svn: 161232
      3e6fa462
  5. Aug 02, 2012
    • Manman Ren's avatar
      X86 Peephole: fold loads to the source register operand if possible. · ba8122cc
      Manman Ren authored
      Add more comments and use early returns to reduce nesting in isLoadFoldable.
      Also disable folding for V_SET0 to avoid introducing a const pool entry and
      a const pool load.
      
      rdar://10554090 and rdar://11873276
      
      llvm-svn: 161207
      ba8122cc
    • Jakob Stoklund Olesen's avatar
      Compute the critical path length through a trace. · 5d30630e
      Jakob Stoklund Olesen authored
      Whenever both instruction depths and instruction heights are known in a
      block, it is possible to compute the length of the critical path as
      max(depth+height) over the instructions in the block.
      
      The stored live-in lists make it possible to accurately compute the
      length of a critical path that bypasses the current (small) block.
      
      llvm-svn: 161197
      5d30630e
    • Jakob Stoklund Olesen's avatar
      Verify regunit intervals along with virtreg intervals. · 637c4675
      Jakob Stoklund Olesen authored
      Don't cause regunit intervals to be computed just to verify them. Only
      check the already cached intervals.
      
      llvm-svn: 161183
      637c4675
    • Jakob Stoklund Olesen's avatar
      Avoid creating dangling physreg live ranges during DCE. · 374071dd
      Jakob Stoklund Olesen authored
      LiveRangeEdit::eliminateDeadDefs() can delete a dead instruction that
      reads unreserved physregs. This would leave the corresponding regunit
      live interval dangling because we don't have shrinkToUses() for physical
      registers.
      
      Fix this problem by turning the instruction into a KILL instead of
      deleting it. This happens in a landing pad in
      test/CodeGen/X86/2012-05-19-CoalescerCrash.ll:
      
        %vreg27<def,dead> = COPY %EDX<kill>; GR32:%vreg27
      
      becomes:
      
        KILL %EDX<kill>
      
      An upcoming fix to the machine verifier will catch problems like this by
      verifying regunit live intervals.
      
      This fixes PR13498. I am not including the test case from the PR since
      we already have one exposing the problem once the verifier is fixed.
      
      llvm-svn: 161182
      374071dd
    • Jakob Stoklund Olesen's avatar
      Add report() functions that take a LiveInterval argument. · bde5dc5e
      Jakob Stoklund Olesen authored
      llvm-svn: 161178
      bde5dc5e
    • Manman Ren's avatar
      X86 Peephole: fold loads to the source register operand if possible. · 5759d012
      Manman Ren authored
      Machine CSE and other optimizations can remove instructions so folding
      is possible at peephole while not possible at ISel.
      
      This patch is a rework of r160919 and was tested on clang self-host on my local
      machine.
      
      rdar://10554090 and rdar://11873276
      
      llvm-svn: 161152
      5759d012
    • Jakob Stoklund Olesen's avatar
      Extract some methods from verifyLiveIntervals. · e736b97e
      Jakob Stoklund Olesen authored
      No functional change.
      
      llvm-svn: 161149
      e736b97e
    • Jakob Stoklund Olesen's avatar
      Also verify RegUnit intervals at uses. · a766b474
      Jakob Stoklund Olesen authored
      llvm-svn: 161147
      a766b474
    • Jakob Stoklund Olesen's avatar
      Compute instruction heights through a trace. · 2db6b653
      Jakob Stoklund Olesen authored
      The height on an instruction is the minimum number of cycles from the
      instruction is issued to the end of the trace. Heights are computed for
      all instructions in and below the trace center block.
      
      The method for computing heights is different from the depth
      computation. As we visit instructions in the trace bottom-up, heights of
      used instructions are pushed upwards. This way, we avoid scanning long
      use lists, looking for uses in the current trace.
      
      At each basic block boundary, a list of live-in registers and their
      minimum heights is saved in the trace block info. These live-in lists
      are used when restarting depth computations on a trace that
      converges with an already computed trace. They will also be used to
      accurately compute the critical path length.
      
      llvm-svn: 161138
      2db6b653
  6. Aug 01, 2012
Loading