- Dec 05, 2008
-
-
Anton Korobeynikov authored
See PR3160 for details llvm-svn: 60604
-
Chris Lattner authored
llvm-svn: 60594
-
Chris Lattner authored
llvm-svn: 60588
-
- Dec 04, 2008
-
-
Devang Patel authored
This fixes many bugs. I will add more test cases in a separate check-in. Some day, the code that manipulates CFG and updates dom. info could use refactoring help. llvm-svn: 60554
-
Chris Lattner authored
llvm-svn: 60534
-
Chris Lattner authored
llvm-svn: 60514
-
- Dec 03, 2008
-
-
Dale Johannesen authored
llvm-svn: 60508
-
Dale Johannesen authored
llvm-svn: 60506
-
Chris Lattner authored
llvm-svn: 60501
-
Dale Johannesen authored
llvm-svn: 60494
-
Chris Lattner authored
1) have it fold "br undef", which does occur with surprising frequency as jump threading iterates. 2) teach j-t to delete dead blocks. This removes the successor edges, reducing the in-edges of other blocks, allowing recursive simplification. 3) Fold things like: br COND, BBX, BBY BBX: br COND, BBZ, BBW which also happens because jump threading iterates. llvm-svn: 60470
-
- Dec 02, 2008
-
-
Dale Johannesen authored
llvm-svn: 60442
-
Dale Johannesen authored
llvm-svn: 60431
-
Chris Lattner authored
straight-forward implementation. This does not require any extra alias analysis queries beyond what we already do for non-local loads. Some programs really really like load PRE. For example, SPASS triggers this ~1000 times, ~300 times in 255.vortex, and ~1500 times on 403.gcc. The biggest limitation to the implementation is that it does not split critical edges. This is a huge killer on many programs and should be addressed after the initial patch is enabled by default. The implementation of this should incidentally speed up rejection of non-local loads because it avoids creating the repl densemap in cases when it won't be used for fully redundant loads. This is currently disabled by default. Before I turn this on, I need to fix a couple of miscompilations in the testsuite, look at compile time performance numbers, and look at perf impact. This is pretty close to ready though. llvm-svn: 60408
-
Bill Wendling authored
llvm-svn: 60403
-
Bill Wendling authored
llvm-svn: 60402
-
Bill Wendling authored
llvm-svn: 60401
-
Bill Wendling authored
constant. If X is a constant, then this is folded elsewhere. - Added a note to Target/README.txt to indicate that we'd like to implement this when we're able. llvm-svn: 60399
-
Bill Wendling authored
llvm-svn: 60398
-
Bill Wendling authored
- No need to do a swap on a canonicalized pattern. No functionality change. llvm-svn: 60397
-
Chris Lattner authored
llvm-svn: 60395
-
Owen Anderson authored
a new value numbering set after splitting a critical edge. This increases the number of instances of PRE on 403.gcc from ~60 to ~570. llvm-svn: 60393
-
- Dec 01, 2008
-
-
Dale Johannesen authored
figuring out the base of the IV. This produces better code in the example. (Addresses use (IV) instead of (BASE,IV) - a significant improvement on low-register machines like x86). llvm-svn: 60374
-
Bill Wendling authored
llvm-svn: 60370
-
Bill Wendling authored
llvm-svn: 60369
-
Bill Wendling authored
integer is "minint". llvm-svn: 60366
-
Bill Wendling authored
don't have overlapping bits. llvm-svn: 60344
-
Bill Wendling authored
llvm-svn: 60343
-
Bill Wendling authored
llvm-svn: 60341
-
Bill Wendling authored
Move pattern check outside of the if-then statement. This prevents us from fiddling with constants unless we have to. llvm-svn: 60340
-
Chris Lattner authored
llvm-svn: 60339
-
Chris Lattner authored
that it isn't reallocated all the time. This is a tiny speedup for GVN: 3.90->3.88s llvm-svn: 60338
-
Chris Lattner authored
llvm-svn: 60337
-
Chris Lattner authored
instead of std::sort. This shrinks the release-asserts LSR.o file by 1100 bytes of code on my system. We should start using array_pod_sort where possible. llvm-svn: 60335
-
Chris Lattner authored
This is a lot cheaper and conceptually simpler. llvm-svn: 60332
-
Chris Lattner authored
DeadInsts ivar, just use it directly. llvm-svn: 60330
-
Chris Lattner authored
buggy rewrite, this notifies ScalarEvolution of a pending instruction about to be removed and then erases it, instead of erasing it then notifying. llvm-svn: 60329
-
Chris Lattner authored
xor in testcase (or is a substring). llvm-svn: 60328
-
Chris Lattner authored
new instructions it simplifies. Because we're threading jumps on edges with constants coming in from PHI's, we inherently are exposing a lot more constants to the new block. Folding them and deleting dead conditions allows the cost model in jump threading to be more accurate as it iterates. llvm-svn: 60327
-
Chris Lattner authored
instead of using FoldPHIArgBinOpIntoPHI. In addition to being more obvious, this also fixes a problem where instcombine wouldn't merge two phis that had different variable indices. This prevented instcombine from factoring big chunks of code in 403.gcc. For example: insn_cuid.exit: - %tmp336 = load i32** @uid_cuid, align 4 - %tmp337 = getelementptr %struct.rtx_def* %insn_addr.0.ph.i, i32 0, i32 3 - %tmp338 = bitcast [1 x %struct.rtunion]* %tmp337 to i32* - %tmp339 = load i32* %tmp338, align 4 - %tmp340 = getelementptr i32* %tmp336, i32 %tmp339 br label %bb62 bb61: - %tmp341 = load i32** @uid_cuid, align 4 - %tmp342 = getelementptr %struct.rtx_def* %insn, i32 0, i32 3 - %tmp343 = bitcast [1 x %struct.rtunion]* %tmp342 to i32* - %tmp344 = load i32* %tmp343, align 4 - %tmp345 = getelementptr i32* %tmp341, i32 %tmp344 br label %bb62 bb62: - %iftmp.62.0.in = phi i32* [ %tmp345, %bb61 ], [ %tmp340, %insn_cuid.exit ] + %insn.pn2 = phi %struct.rtx_def* [ %insn, %bb61 ], [ %insn_addr.0.ph.i, %insn_cuid.exit ] + %tmp344.pn.in.in = getelementptr %struct.rtx_def* %insn.pn2, i32 0, i32 3 + %tmp344.pn.in = bitcast [1 x %struct.rtunion]* %tmp344.pn.in.in to i32* + %tmp341.pn = load i32** @uid_cuid + %tmp344.pn = load i32* %tmp344.pn.in + %iftmp.62.0.in = getelementptr i32* %tmp341.pn, i32 %tmp344.pn %iftmp.62.0 = load i32* %iftmp.62.0.in llvm-svn: 60325
-