- Jan 10, 2012
-
-
Rafael Espindola authored
llvm-svn: 147820
-
- Jan 09, 2012
-
-
Jakob Stoklund Olesen authored
The pass is prone to looping, and it is better to crash than loop forever, even in a -Asserts build. <rdar://problem/10660175> llvm-svn: 147806
-
Devang Patel authored
llvm-svn: 147805
-
Andrew Trick authored
After collecting chains, check if any should be materialized. If so, hide the chained IV users from the LSR solver. LSR will only solve for the head of the chain. GenerateIVChains will then materialize the chained IV users by computing the IV relative to its previous value in the chain. In theory, chained IV users could be exposed to LSR's solver. This would be considerably complicated to implement and I'm not aware of a case where we need it. In practice it's more important to intelligently prune the search space of nontrivial loops before running the solver, otherwise the solver is often forced to prune the most optimal solutions. Hiding the chained users does this well, so that LSR is more likely to find the best IV for the chain as a whole. llvm-svn: 147801
-
Andrew Trick authored
This collects a set of IV uses within the loop whose values can be computed relative to each other in a sequence. Following checkins will make use of this information. llvm-svn: 147797
-
Devang Patel authored
AsmParser holds info specific to target parser. AsmParserVariant holds info specific to asm variants supported by the target. llvm-svn: 147787
-
Andrew Trick authored
llvm-svn: 147785
-
Devang Patel authored
Patch by Joe Groff! llvm-svn: 147781
-
Benjamin Kramer authored
llvm-svn: 147779
-
Benjamin Kramer authored
This subsumes several other transforms while enabling us to catch more cases. llvm-svn: 147777
-
Chandler Carruth authored
this substraction will result in small negative numbers at worst which become very large positive numbers on assignment and are thus caught by the <=4 check on the next line. The >0 check clearly intended to catch these as negative numbers. Spotted by inspection, and impossible to trigger given the shift widths that can be used. llvm-svn: 147773
-
Craig Topper authored
Remove AVX hack in X86Subtarget. AVX/AVX2 are now treated as an SSE level. Predicate functions have been altered to maintain previous names and behavior. llvm-svn: 147770
-
Craig Topper authored
llvm-svn: 147769
-
Craig Topper authored
Reorder a bunch of patterns to put the AVX version first thus giving it priority over the SSE version. Another step towards trying to remove the AVX hack that disables SSE from X86Subtarget. llvm-svn: 147768
-
Craig Topper authored
Clean up patterns for MOVNT*. Not sure why there were floating point types on MOVNTPS and MOVNTDQ. And v4i64 was completely missing. llvm-svn: 147767
-
Craig Topper authored
Mark MOVNTI as being supported in SSE2 OR AVX mode. This instruction has no AVX equivalent so we should use the SSE version. llvm-svn: 147766
-
Craig Topper authored
Move SSE2 logical operations PAND/POR/PXOR/PANDN above SSE1 logical operations ANDPS/ORPS/XORPS/ANDNPS. This fixes a pattern ordering issue that meant that the SSE2 instructions could never be directly selected since the SSE1 patterns would always match first. This is largely moot with the ExeDepsFix pass, but I'm trying to audit for all such ordering issues. llvm-svn: 147765
-
Craig Topper authored
Change some places that were checking for AVX OR SSE1/2 to use hasXMM/hasXMMInt instead. Also fix one place that checked SSE3, but accidentally excluded AVX to use hasSSE3orAVX. This is a step towards removing the AVX hack from the X86Subtarget.h llvm-svn: 147764
-
Rafael Espindola authored
llvm-svn: 147763
-
Craig Topper authored
Don't disable MMX support when AVX is enabled. Fix predicates for MMX instructions that were added along with SSE instructions to check for AVX in addition to SSE level. llvm-svn: 147762
-
Craig Topper authored
llvm-svn: 147758
-
- Jan 08, 2012
-
-
Benjamin Kramer authored
We still save an instruction when just the "and" part is replaced. Also change the code to match comments more closely. llvm-svn: 147753
-
Evan Cheng authored
llvm-svn: 147752
-
Evan Cheng authored
safely proven not to have been clobbered. No small test case possible. llvm-svn: 147751
-
Benjamin Kramer authored
InstCombine: If we have a bit test and a sign test anded/ored together, merge the sign bit into the bit test. This is common in bit field code, e.g. checking if the first or the last bit of a bit field is set. llvm-svn: 147749
-
Victor Umansky authored
llvm-svn: 147748
-
Rafael Espindola authored
llvm-svn: 147745
-
- Jan 07, 2012
-
-
Rafael Espindola authored
the produce assembly when using CFI just a bit more readable. llvm-svn: 147743
-
Jakob Stoklund Olesen authored
Darwin doesn't do static, and ELF targets only support static. llvm-svn: 147740
-
Craig Topper authored
llvm-svn: 147739
-
Benjamin Kramer authored
llvm-svn: 147738
-
Craig Topper authored
llvm-svn: 147734
-
Craig Topper authored
llvm-svn: 147733
-
Craig Topper authored
Add some DAG combines for SUBC/SUBE. If nothing uses the carry/borrow out of subc, turn it into a sub. Turn (subc x, x) into 0 with no borrow. Turn (subc x, 0) into x with no borrow. Turn (subc -1, x) into (xor x, -1) with no borrow. Turn sube with no borrow in into subc. llvm-svn: 147728
-
Jakob Stoklund Olesen authored
Reserved registers don't have proper live ranges, their LiveInterval simply has a snippet of liveness for each def. Virtual registers with a single value that is a copy of a reserved register (typically %esp) can be coalesced with the reserved register if the live range doesn't overlap any reserved register defs. When coalescing with a reserved register, don't modify the reserved register live range. Just leave it as a bunch of dead defs. This eliminates quadratic coalescer behavior in i386 functions with many function calls. PR11699 llvm-svn: 147726
-
Jakob Stoklund Olesen authored
llvm-svn: 147725
-
Andrew Trick authored
This will be more important as we extend the LSR pass in ways that don't rely on the formula solver. In particular, we need it for constructing IV chains. llvm-svn: 147724
-
Jakob Stoklund Olesen authored
This enables basic local CSE, giving us 20% smaller code for consumer-typeset in -O0 builds. <rdar://problem/10658692> llvm-svn: 147720
-
Evan Cheng authored
up so branch folding pass can't use the scavenger. :-( This doesn't breaks anything currently. It just means targets which do not carefully update kill markers cannot run post-ra scheduler (not new, it has always been the case). We should fix this at some point since it's really hacky. llvm-svn: 147719
-
Andrew Trick authored
LoopSimplify may not run on some outer loops, e.g. because of indirect branches. SCEVExpander simply cannot handle outer loops with no preheaders. Fixes rdar://10655343 SCEVExpander segfault. llvm-svn: 147718
-