Skip to content
  1. Nov 18, 2010
    • Chris Lattner's avatar
      finish a thought. · 1e37bbaf
      Chris Lattner authored
      llvm-svn: 119690
      1e37bbaf
    • Chris Lattner's avatar
      rearrange some code, splitting memcpy/memcpy optimization · 7e9b2ea3
      Chris Lattner authored
      out of processMemCpy into its own function.
      
      llvm-svn: 119687
      7e9b2ea3
    • Chris Lattner's avatar
      allow eliminating an alloca that is just copied from an constant global · ac570131
      Chris Lattner authored
      if it is passed as a byval argument.  The byval argument will just be a
      read, so it is safe to read from the original global instead.  This allows
      us to promote away the %agg.tmp alloca in PR8582
      
      llvm-svn: 119686
      ac570131
    • Chris Lattner's avatar
      enhance the "alloca is just a memcpy from constant global" · f183d5c4
      Chris Lattner authored
      to ignore calls that obviously can't modify the alloca
      because they are readonly/readnone.
      
      llvm-svn: 119683
      f183d5c4
    • Chris Lattner's avatar
      fix a small oversight in the "eliminate memcpy from constant global" · 7aeae25c
      Chris Lattner authored
      optimization.  If the alloca that is "memcpy'd from constant" also has
      a memcpy from *it*, ignore it: it is a load.  We now optimize the testcase to:
      
      define void @test2() {
        %B = alloca %T
        %a = bitcast %T* @G to i8*
        %b = bitcast %T* %B to i8*
        call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %a, i64 124, i32 4, i1 false)
        call void @bar(i8* %b)
        ret void
      }
      
      previously we would generate:
      
      define void @test() {
        %B = alloca %T
        %b = bitcast %T* %B to i8*
        %G.0 = getelementptr inbounds %T* @G, i32 0, i32 0
        %tmp3 = load i8* %G.0, align 4
        %G.1 = getelementptr inbounds %T* @G, i32 0, i32 1
        %G.15 = bitcast [123 x i8]* %G.1 to i8*
        %1 = bitcast [123 x i8]* %G.1 to i984*
        %srcval = load i984* %1, align 1
        %B.0 = getelementptr inbounds %T* %B, i32 0, i32 0
        store i8 %tmp3, i8* %B.0, align 4
        %B.1 = getelementptr inbounds %T* %B, i32 0, i32 1
        %B.12 = bitcast [123 x i8]* %B.1 to i8*
        %2 = bitcast [123 x i8]* %B.1 to i984*
        store i984 %srcval, i984* %2, align 1
        call void @bar(i8* %b)
        ret void
      }
      
      llvm-svn: 119682
      7aeae25c
  2. Nov 17, 2010
  3. Nov 16, 2010
  4. Nov 14, 2010
  5. Nov 13, 2010
    • Duncan Sands's avatar
      Generalize the reassociation transform in SimplifyCommutative (now renamed to · 641baf16
      Duncan Sands authored
      SimplifyAssociativeOrCommutative) "(A op C1) op C2" -> "A op (C1 op C2)",
      which previously was only done if C1 and C2 were constants, to occur whenever
      "C1 op C2" simplifies (a la InstructionSimplify).  Since the simplifying operand
      combination can no longer be assumed to be the right-hand terms, consider all of
      the possible permutations.  When compiling "gcc as one big file", transform 2
      (i.e. using right-hand operands) fires about 4000 times but it has to be said
      that most of the time the simplifying operands are both constants.  Transforms
      3, 4 and 5 each fired once.  Transform 6, which is an existing transform that
      I didn't change, never fired.  With this change, the testcase is now optimized
      perfectly with one run of instcombine (previously it required instcombine +
      reassociate + instcombine, and it may just have been luck that this worked).
      
      llvm-svn: 119002
      641baf16
  6. Nov 12, 2010
    • Duncan Sands's avatar
      Have GVN simplify instructions as it goes. For example, consider · 246b71c5
      Duncan Sands authored
      "%z = %x and %y".  If GVN can prove that %y equals %x, then it turns
      this into "%z = %x and %x".  With the new code, %z will be replaced
      with %x everywhere (and then deleted).  Previously %z would be value
      numbered too, which is a waste of time.  Also, while a clever value
      numbering algorithm would give %z the same value number as %x, our
      current one doesn't do so (at least I don't think it does).  The new
      logic has an essentially equivalent effect to what you would get if
      %z was given the same value number as %x, i.e. it should make value
      numbering smarter.  While there, get hold of target data once at the
      start rather than a gazillion times all over the place.
      
      llvm-svn: 118923
      246b71c5
    • Dan Gohman's avatar
      Enhance DSE to handle the case where a free call makes more than · d4b7fff2
      Dan Gohman authored
      one store dead. This is especially noticeable in
      SingleSource/Benchmarks/Shootout/objinst.
      
      llvm-svn: 118875
      d4b7fff2
  7. Nov 11, 2010
  8. Nov 10, 2010
  9. Nov 09, 2010
  10. Nov 08, 2010
  11. Nov 03, 2010
Loading