Skip to content
  1. Apr 22, 2008
    • Owen Anderson's avatar
      Move MemCpyOpt after GVN. · 7432cbd0
      Owen Anderson authored
      llvm-svn: 50097
      7432cbd0
    • Chris Lattner's avatar
      Teach jump threading to thread through blocks like: · 3df4c15d
      Chris Lattner authored
        br (and X, phi(Y, Z, false)), label L1, label L2
      
      This triggers once on 252.eon and 6 times on 176.gcc.  Blocks 
      in question often look like this:
      
      bb262:		; preds = %bb261, %bb248
      	%iftmp.251.0 = phi i1 [ true, %bb261 ], [ false, %bb248 ]		; <i1> [#uses=4]
      	%tmp270 = icmp eq %struct.rtx_def* %tmp.0.i, null		; <i1> [#uses=1]
      	%bothcond = or i1 %iftmp.251.0, %tmp270		; <i1> [#uses=1]
      	br i1 %bothcond, label %bb288, label %bb273
      
      In this case, it is clear that it doesn't matter if tmp.0.i is null when coming from bb261.  When coming from bb248, it is all that matters.
      
      
      Another random example:
      
      check_asm_operands.exit:		; preds = %check_asm_operands.exit.thr_comm, %bb30.i, %bb12.i, %bb6.i413
      	%tmp.0.i420 = phi i1 [ true, %bb6.i413 ], [ true, %bb12.i ], [ true, %bb30.i ], [ false, %check_asm_operands.exit.thr_comm ; <i1> [#uses=1]
      	call void @llvm.stackrestore( i8* %savedstack ) nounwind 
      	%tmp4389 = icmp eq i32 %added_sets_1.0, 0		; <i1> [#uses=1]
      	%tmp4394 = icmp eq i32 %added_sets_2.0, 0		; <i1> [#uses=1]
      	%bothcond80 = and i1 %tmp4389, %tmp4394		; <i1> [#uses=1]
      	%bothcond81 = and i1 %bothcond80, %tmp.0.i420		; <i1> [#uses=1]
      	br i1 %bothcond81, label %bb4398, label %bb4397
      
      Here is the case from 252.eon:
      
      bb290.i.i:		; preds = %bb23.i57.i.i, %bb8.i39.i.i, %bb100.i.i, %bb100.i.i, %bb85.i.i110
      	%myEOF.1.i.i = phi i1 [ true, %bb100.i.i ], [ true, %bb100.i.i ], [ true, %bb85.i.i110 ], [ true, %bb8.i39.i.i ], [ false, %bb23.i57.i.i ]		; <i1> [#uses=2]
      	%i.4.i.i = phi i32 [ %i.1.i.i, %bb85.i.i110 ], [ %i.0.i.i, %bb100.i.i ], [ %i.0.i.i, %bb100.i.i ], [ %i.3.i.i, %bb8.i39.i.i ], [ %i.3.i.i, %bb23.i57.i.i ]		; <i32> [#uses=3]
      	%tmp292.i.i = load i8* %tmp16.i.i100, align 1		; <i8> [#uses=1]
      	%tmp293.not.i.i = icmp ne i8 %tmp292.i.i, 0		; <i1> [#uses=1]
      	%bothcond.i.i = and i1 %tmp293.not.i.i, %myEOF.1.i.i		; <i1> [#uses=1]
      	br i1 %bothcond.i.i, label %bb202.i.i, label %bb301.i.i
        Factoring out 3 common predecessors.
      
      On the path from any blocks other than bb23.i57.i.i, the load and compare 
      are dead.
      
      llvm-svn: 50096
      3df4c15d
    • Evan Cheng's avatar
      Added command line option -no-lazy to disable JIT lazy compilation. · 0422bef7
      Evan Cheng authored
      llvm-svn: 50095
      0422bef7
    • Chris Lattner's avatar
      refactor some code, no functionality change. · e369c35a
      Chris Lattner authored
      llvm-svn: 50094
      e369c35a
    • Chris Lattner's avatar
      add a basic testcase. · 3cc28ce1
      Chris Lattner authored
      llvm-svn: 50093
      3cc28ce1
    • Nick Lewycky's avatar
      Whoops! Undo r50087, unbreak the build. · 0a7b12bb
      Nick Lewycky authored
      llvm-svn: 50088
      0a7b12bb
    • Nick Lewycky's avatar
      Reverse r47989. Part of removing 'unwinds to' support. · fb6c3499
      Nick Lewycky authored
      llvm-svn: 50087
      fb6c3499
    • Nick Lewycky's avatar
      cd922453
    • Owen Anderson's avatar
      Add MemCpyOpt to LTO. · a5030c30
      Owen Anderson authored
      llvm-svn: 50081
      a5030c30
    • Chris Lattner's avatar
      remove dead code. · 8fb13cbe
      Chris Lattner authored
      llvm-svn: 50080
      8fb13cbe
    • Chris Lattner's avatar
      optimize "p != gep p, ..." better. This allows us to compile · c3a43935
      Chris Lattner authored
      getelementptr-seteq.ll into:
      
      define i1 @test(i64 %X, %S* %P) {
      	%C = icmp eq i64 %X, -1		; <i1> [#uses=1]
      	ret i1 %C
      }
      
      instead of:
      
      define i1 @test(i64 %X, %S* %P) {
      	%A.idx.mask = and i64 %X, 4611686018427387903		; <i64> [#uses=1]
      	%C = icmp eq i64 %A.idx.mask, 4611686018427387903		; <i1> [#uses=1]
      	ret i1 %C
      }
      
      And fixes the second half of PR2235.  This speeds up the insertion sort
      case by 45%, from 1.12s to 0.77s.  In practice, this will significantly
      speed up for loops structured like:
      
      for (double *P = Base + N; P != Base; --P)
        ...
      
      Which happens frequently for C++ iterators.
      
      llvm-svn: 50079
      c3a43935
    • Chris Lattner's avatar
      more fallout from Nicholas' asmprinter patch. · ff834c0c
      Chris Lattner authored
      llvm-svn: 50078
      ff834c0c
    • Dan Gohman's avatar
      Implement an x86-64 ABI detail of passing structs by hidden first · f166d2d0
      Dan Gohman authored
      argument. The x86-64 ABI requires the incoming value of %rdi to
      be copied to %rax on exit from a function that is returning a
      large C struct.
      
      Also, add a README-X86-64 entry detailing the missed optimization
      opportunity and proposing an alternative approach.
      
      llvm-svn: 50075
      f166d2d0
  2. Apr 21, 2008
Loading