Skip to content
  1. Oct 24, 2008
  2. Oct 23, 2008
  3. Oct 22, 2008
    • Duncan Sands's avatar
      LegalizeTypes soft-float support for fpow. · 81781413
      Duncan Sands authored
      llvm-svn: 57973
      81781413
    • Duncan Sands's avatar
      Be nice to CellSPU: for this target getSetCCResultType · 578a68a9
      Duncan Sands authored
      may return i8, which can result in SELECT nodes for
      which the type of the condition is i8, but there are
      no patterns for select with i8 condition.  Tweak the
      LegalizeTypes logic to avoid this as much as possible.
      This isn't a real fix because it is still perfectly
      possible to end up with such select nodes - CellSPU
      needs to be fixed IMHO.
      
      llvm-svn: 57968
      578a68a9
    • Duncan Sands's avatar
      Port from LegalizeDAG the logic to only generate · 01a1c112
      Duncan Sands authored
      ADDC/ADDE/SUBC/SUBE if the target supports it.
      
      llvm-svn: 57967
      01a1c112
    • Duncan Sands's avatar
      Add some comments explaining the meaning of a boolean · a1a388ca
      Duncan Sands authored
      that is not of type MVT::i1 in SELECT and SETCC nodes.
      Relax the LegalizeTypes SELECT condition promotion
      sanity checks to allow other condition types than i1.
      
      llvm-svn: 57966
      a1a388ca
    • Duncan Sands's avatar
      Temporarily allow the operands of a BUILD_VECTOR · 4b6b5fcd
      Duncan Sands authored
      to have a different type to the vector element
      type.  This should be fairly harmless because in
      the past guys like this were being built all over
      the place (and were cleaned up when I added this
      check).  The reason for relaxing this check is
      that it helps LegalizeTypes legalize vector
      shuffles: the mask is a BUILD_VECTOR that it is
      *not always possible* to legalize while keeping it
      a BUILD_VECTOR (vector_shuffle requires the mask
      to be a BUILD_VECTOR, as opposed to a vector with
      the right vector type).  With this check it is even
      harder to legalize the mask - turning the check off
      means that LegalizeTypes manages to legalize almost
      all vector shuffles encountered in practice.  The
      correct solution is to change vector_shuffle to be a
      variadic node with the mask built into it as operands.
      While waiting for that change, this hack stops the
      problem with vector_shuffle from blocking the turning
      on of LegalizeTypes.
      
      llvm-svn: 57965
      4b6b5fcd
    • Daniel Dunbar's avatar
      Move Print*Pass to use raw_ostream. · 81b5fa56
      Daniel Dunbar authored
      llvm-svn: 57946
      81b5fa56
    • Daniel Dunbar's avatar
      Privatize PrintModulePass and PrintFunctionPass and add · 54d5b9ea
      Daniel Dunbar authored
      createPrintModulePass and createPrintFunctionPass.
       - So clients who compile w/o RTTI can use them.
      
      llvm-svn: 57933
      54d5b9ea
  4. Oct 21, 2008
    • Dale Johannesen's avatar
      Add an SSE2 algorithm for uint64->f64 conversion. · 28929589
      Dale Johannesen authored
      The same one Apple gcc uses, faster.  Also gets the
      extreme case in gcc.c-torture/execute/ieee/rbug.c
      correct which we weren't before; this is not
      sufficient to get the test to pass though, there
      is another bug.
      
      llvm-svn: 57926
      28929589
    • Dan Gohman's avatar
      Fix SelectionDAGBuild lowering of Select instructions to · 8b44b88e
      Dan Gohman authored
      handle first-class aggregate values. Also, fix a bug in
      the Ret handling for empty aggregates.
      
      llvm-svn: 57925
      8b44b88e
    • Dan Gohman's avatar
      Don't create TargetGlobalAddress nodes with offsets that don't fit · 269246b0
      Dan Gohman authored
      in the 32-bit signed offset field of addresses. Even though this
      may be intended, some linkers refuse to relocate code where the
      relocated address computation overflows.
      
      Also, fix the sign-extension of constant offsets to use the
      actual pointer size, rather than the size of the GlobalAddress
      node, which may be different, for example on x86-64 where MVT::i32
      is used when the address is being fit into the 32-bit displacement
      field.
      
      llvm-svn: 57885
      269246b0
    • Dan Gohman's avatar
      Optimized FCMP_OEQ and FCMP_UNE for x86. · 97d95d6d
      Dan Gohman authored
      Where previously LLVM might emit code like this:
      
              ucomisd %xmm1, %xmm0
              setne   %al
              setp    %cl
              orb     %al, %cl
              jne     .LBB4_2
      
      it now emits this:
      
              ucomisd %xmm1, %xmm0
              jne     .LBB4_2
              jp      .LBB4_2
      
      It has fewer instructions and uses fewer registers, but it does
      have more branches. And in the case that this code is followed by
      a non-fallthrough edge, it may be followed by a jmp instruction,
      resulting in three branch instructions in sequence. Some effort
      is made to avoid this situation.
      
      To achieve this, X86ISelLowering.cpp now recognizes FCMP_OEQ and
      FCMP_UNE in lowered form, and replace them with code that emits
      two branches, except in the case where it would require converting
      a fall-through edge to an explicit branch.
      
      Also, X86InstrInfo.cpp's branch analysis and transform code now
      knows now to handle blocks with multiple conditional branches. It
      uses loops instead of having fixed checks for up to two
      instructions. It can now analyze and transform code generated
      from FCMP_OEQ and FCMP_UNE.
      
      llvm-svn: 57873
      97d95d6d
    • Dan Gohman's avatar
      When the coalescer is doing rematerializing, have it remove · c835458d
      Dan Gohman authored
      the copy instruction from the instruction list before asking the
      target to create the new instruction. This gets the old instruction
      out of the way so that it doesn't interfere with the target's
      rematerialization code. In the case of x86, this helps it find
      more cases where EFLAGS is not live.
      
      Also, in the X86InstrInfo.cpp, teach isSafeToClobberEFLAGS to check
      to see if it reached the end of the block after scanning each
      instruction, instead of just before. This lets it notice when the
      end of the block is only two instructions away, without doing any
      additional scanning.
      
      These changes allow rematerialization to clobber EFLAGS in more
      cases, for example using xor instead of mov to set the return value
      to zero in the included testcase.
      
      llvm-svn: 57872
      c835458d
    • Dan Gohman's avatar
      Make the NaN test come second, heuristically assuming · 97d3f6cf
      Dan Gohman authored
      that NaNs are less common.
      
      llvm-svn: 57871
      97d3f6cf
    • Oscar Fuentes's avatar
      CMake: updated lib/CodeGen/CMakeLists.txt · 0e12e5b1
      Oscar Fuentes authored
      llvm-svn: 57869
      0e12e5b1
    • Chris Lattner's avatar
      Fix gcc.c-torture/compile/920520-1.c by inserting bitconverts · 4396e0d2
      Chris Lattner authored
      for strange asm conditions earlier.  In this case, we have a
      double being passed in an integer reg class.  Convert to like
      sized integer register so that we allocate the right number 
      for the class (two i32's for the f64 in this case).
      
      llvm-svn: 57862
      4396e0d2
  5. Oct 20, 2008
  6. Oct 19, 2008
  7. Oct 18, 2008
Loading