- Oct 01, 2010
-
-
Dale Johannesen authored
The x86_mmx type is used for MMX intrinsics, parameters and return values where these use MMX registers, and is also supported in load, store, and bitcast. Only the above operations generate MMX instructions, and optimizations do not operate on or produce MMX intrinsics. MMX-sized vectors <2 x i32> etc. are lowered to XMM or split into smaller pieces. Optimizations may occur on these forms and the result casted back to x86_mmx, provided the result feeds into a previous existing x86_mmx operation. The point of all this is prevent optimizations from introducing MMX operations, which is unsafe due to the EMMS problem. llvm-svn: 115243
-
- Sep 30, 2010
-
-
Owen Anderson authored
We do want to allow LoadPRE to perform LICM-like transformations: we already consider PHI nodes to be negligible for code size (making this transform code size neutral), and it allows us to hoist values out of loops, which is always a good thing. llvm-svn: 115205
-
Jakob Stoklund Olesen authored
The bug that broke i386 linux has been fixed in r115191. llvm-svn: 115204
-
Benjamin Kramer authored
Tighten up prototype verification of strchr and strrchr to avoid a crash in the very unlikely case that someone passes an integer > i64 to strchr. llvm-svn: 115144
-
Benjamin Kramer authored
llvm-svn: 115116
-
Benjamin Kramer authored
llvm-svn: 115111
-
Benjamin Kramer authored
llvm-svn: 115095
-
- Sep 29, 2010
-
-
Benjamin Kramer authored
llvm-svn: 115091
-
Owen Anderson authored
Fix PR8247: JumpThreading can cause a block to become unreachable while still having predecessor, if it is part of a self-loop. Because of this, we cannot use the Simplify* APIs, as they can assert-fail on unreachable code. Since it's not easy to determine if a given threading will cause a block to become unreachable, simply defer simplifying simplification to later InstCombine and/or DCE passes. llvm-svn: 115082
-
Owen Anderson authored
llvm-svn: 115053
-
Oscar Fuentes authored
llvm-svn: 114999
-
- Sep 28, 2010
-
-
Owen Anderson authored
register pressure and thus excess spills, which we don't currently recover from well. This should be re-evaluated in the future if our ability to generate good spills/splits improves. Partial fix for <rdar://problem/7635585>. llvm-svn: 114919
-
- Sep 27, 2010
-
-
Jakob Stoklund Olesen authored
This reverts revision 114633. It was breaking llvm-gcc-i386-linux-selfhost. It seems there is a downstream bug that is exposed by -cgp-critical-edge-splitting=0. When that bug is fixed, this patch can go back in. Note that the changes to tailcallfp2.ll are not reverted. They were good are required. llvm-svn: 114859
-
Dan Gohman authored
llvm-svn: 114841
-
- Sep 25, 2010
-
-
Owen Anderson authored
LoadPRE was not properly checking that the load it was PRE'ing post-dominated the block it was being hoisted to. Splitting critical edges at the merge point only addressed part of the issue; it is also possible for non-post-domination to occur when the path from the load to the merge has branches in it. Unfortunately, full anticipation analysis is time-consuming, so for now approximate it. This is strictly more conservative than real anticipation, so we will miss some cases that real PRE would allow, but we also no longer insert loads into paths where they didn't exist before. :-) This is a very slight net positive on SPEC for me (0.5% on average). Most of the benchmarks are largely unaffected, but when it pays off it pays off decently: 181.mcf improves by 4.5% on my machine. llvm-svn: 114785
-
Eric Christopher authored
of the source, not the original alignment since it may no longer be valid. Fixes rdar://8400094 llvm-svn: 114781
-
- Sep 23, 2010
-
-
Evan Cheng authored
break critical edges on demand. llvm-svn: 114633
-
- Sep 22, 2010
-
-
Bob Wilson authored
truncates are free only in the case where the extended type is legal but the load type is not. If both types are illegal, such as when they are too big, the load may not be legalized into an extended load. llvm-svn: 114568
-
- Sep 21, 2010
-
-
Bob Wilson authored
load when the type of the load is not legal, even if truncates are not free. The load is going to be legalized to an extending load anyway. llvm-svn: 114488
-
Bob Wilson authored
llvm-svn: 114487
-
- Sep 18, 2010
-
-
Gabor Greif authored
llvm-svn: 114278
-
Gabor Greif authored
llvm-svn: 114277
-
- Sep 16, 2010
-
-
Owen Anderson authored
to optimize unreachable blocks. llvm-svn: 114105
-
Dale Johannesen authored
walking the asm arguments once and stashing their Values. This is wrong because the same memory location can be in the list twice, and if the first one has a sunkaddr substituted, the stashed value for the second one will be wrong (use-after-free). PR 8154. llvm-svn: 114104
-
- Sep 14, 2010
-
-
Owen Anderson authored
on by default and has received significant testing. llvm-svn: 113852
-
Chris Lattner authored
deleted. Fix this by doing the copyValue's before we delete stuff! The testcase only repros the problem on my system with valgrind. llvm-svn: 113820
-
Michael J. Spencer authored
This reverts commit r113632 Conflicts: cmake/modules/AddLLVM.cmake llvm-svn: 113819
-
- Sep 13, 2010
-
-
Eric Christopher authored
llvm-svn: 113769
-
John Thompson authored
llvm-svn: 113766
-
- Sep 11, 2010
-
-
Gabor Greif authored
llvm-svn: 113647
-
- Sep 10, 2010
-
-
Michael J. Spencer authored
llvm-svn: 113632
-
Owen Anderson authored
Lower the unrolling theshold to 150. Empirical tests indicate that this is a sweet spot in the performance per code size increase curve. llvm-svn: 113595
-
- Sep 09, 2010
-
-
Owen Anderson authored
not unrolling loops that contain calls that would be better off getting inlined. This mostly comes up when an interleaved devirtualization pass has devirtualized a call which the inliner will inline on a future pass. Thus, rather than blocking all loops containing calls, add a metric for "inline candidate calls" and block loops containing those instead. llvm-svn: 113535
-
Owen Anderson authored
Revert r113439, which relaxed the requirement that loops containing calls cannot be unrolled. After some discussion, there seems to be a better way to achieve the same effect. llvm-svn: 113528
-
Owen Anderson authored
llvm-svn: 113527
-
Owen Anderson authored
llvm-svn: 113526
-
Owen Anderson authored
Next step is to recalculate the threshold values given this new heuristic. llvm-svn: 113525
-
Owen Anderson authored
Relax the "don't unroll loops containing calls" rule. Instead, when a loop contains a call, lower the unrolling threshold to the optimize-for-size threshold. Basically, for loops containing calls, unrolling can still be profitable as long as the loop is REALLY small. llvm-svn: 113439
-
- Sep 08, 2010
-
-
Owen Anderson authored
The threshold value of 50 is arbitrary, and I chose it simply by analogy to the inlining thresholds, where the baseline unrolling threshold is slightly smaller than the baseline inlining threshold. This could undoubtedly use some tuning. llvm-svn: 113306
-
- Sep 06, 2010
-
-
Chris Lattner authored
llvm-svn: 113146
-