- 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
-
Ted Kremenek authored
llvm-svn: 50091
-
Ted Kremenek authored
llvm-svn: 50090
-
Ted Kremenek authored
llvm-svn: 50089
-
Nick Lewycky authored
llvm-svn: 50088
-
Nick Lewycky authored
llvm-svn: 50087
-
Nick Lewycky authored
llvm-svn: 50086
-
Nate Begeman authored
llvm-svn: 50085
-
Ted Kremenek authored
llvm-svn: 50084
-
Ted Kremenek authored
llvm-svn: 50083
-
Nate Begeman authored
llvm-svn: 50082
-
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
-
Fariborz Jahanian authored
derived class. llvm-svn: 50074
-
Ted Kremenek authored
llvm-svn: 50073
-
Ted Kremenek authored
llvm-svn: 50072
-
Ted Kremenek authored
llvm-svn: 50071
-
- Apr 21, 2008
-
-
Ted Kremenek authored
llvm-svn: 50066
-
Fariborz Jahanian authored
ivar of same name. Better diagnostics to bring home this point. llvm-svn: 50065
-
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
-
Fariborz Jahanian authored
More property semantics checking. First test case for ObjC2's property implementation. llvm-svn: 50057
-
Ted Kremenek authored
llvm-svn: 50056
-
Chris Lattner authored
llvm-svn: 50055
-
Dan Gohman authored
empty ScheduleDAG. llvm-svn: 50054
-
Dan Gohman authored
llvm-svn: 50053
-
Dan Gohman authored
llvm-svn: 50051
-
Fariborz Jahanian authored
Added iterators, methods to find property and categories. Use them in doing semantic analysis on property implementation declarations. Fixed typos. llvm-svn: 50050
-
Chris Lattner authored
llvm-svn: 50049
-
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
-