- Apr 22, 2008
-
-
Owen Anderson authored
llvm-svn: 50097
-
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
-
Evan Cheng authored
llvm-svn: 50095
-
Chris Lattner authored
llvm-svn: 50094
-
Chris Lattner authored
llvm-svn: 50093
-
Nick Lewycky authored
llvm-svn: 50088
-
Nick Lewycky authored
llvm-svn: 50087
-
Nick Lewycky authored
llvm-svn: 50086
-
Owen Anderson authored
llvm-svn: 50081
-
Chris Lattner authored
llvm-svn: 50080
-
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
-
Chris Lattner authored
llvm-svn: 50078
-
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
-
- Apr 21, 2008
-
-
Gabor Greif authored
fix some residual old API that fell thru the cracks of the conversion script, closes http://llvm.org/bugs/show_bug.cgi?id=2246 llvm-svn: 50062
-
Dan Gohman authored
empty ScheduleDAG. llvm-svn: 50054
-
Dan Gohman authored
llvm-svn: 50053
-
Dan Gohman authored
llvm-svn: 50051
-
Chris Lattner authored
llvm-svn: 50047
-
Duncan Sands authored
are returned by struct return. llvm-svn: 50038
-
Duncan Sands authored
by struct return. llvm-svn: 50037
-
Owen Anderson authored
llvm-svn: 50036
-
Owen Anderson authored
llvm-svn: 50035
-
Owen Anderson authored
and simplify code that was fallout from the separation of memcpyopt and gvn. llvm-svn: 50034
-
Duncan Sands authored
warning. llvm-svn: 50033
-
Chris Lattner authored
llvm-svn: 50032
-
Chris Lattner authored
llvm-svn: 50031
-
Chris Lattner authored
llvm-svn: 50029
-
Chris Lattner authored
llvm-svn: 50028
-
Chris Lattner authored
llvm-svn: 50027
-
Chris Lattner authored
and can significantly shrinkify some code, particularly from C++ land. llvm-svn: 50025
-
Chris Lattner authored
lost newlines between blocks. llvm-svn: 50024
-
Chris Lattner authored
fixes a crash in opt on 433.milc. llvm-svn: 50023
-
Chris Lattner authored
llvm-svn: 50022
-
Chris Lattner authored
as a global helper function. At the same type, switch it from taking a vector of predecessors to an arbitrary sequential input. This allows us to switch LoopSimplify to use a SmallVector for various temporary vectors that it passed into SplitBlockPredecessors. llvm-svn: 50020
-
Chris Lattner authored
nodes, removing a hack. llvm-svn: 50019
-
Chris Lattner authored
instead of doing it after every call. llvm-svn: 50018
-
Chris Lattner authored
llvm-svn: 50016
-
Chris Lattner authored
llvm-svn: 50015
-
Chris Lattner authored
llvm-svn: 50014
-
Nicolas Geoffray authored
llvm-svn: 50008
-