- Oct 01, 2012
-
-
Chandler Carruth authored
llvm-svn: 164940
-
Chandler Carruth authored
alignment requirements of the new alloca. As one consequence which was reported as a bug by Duncan, we overaligned memcpy calls to ranges of allocas after they were rewritten to types with lower alignment requirements. Other consquences are possible, but I don't have any test cases for them. llvm-svn: 164937
-
Benjamin Kramer authored
Fixes PR13985. llvm-svn: 164934
-
Chandler Carruth authored
a pair of instructions, one for the used pointer and the second for the user. This simplifies the representation and also makes it more dense. This was noticed because of the miscompile in PR13926. In that case, we were running up against a fundamental "bad idea" in the speculation of PHI and select instructions: the speculation and rewriting are interleaved, which requires phi speculation to also perform load rewriting! This is bad, and causes us to miss opportunities to do (for example) vector rewriting only exposed after PHI speculation, etc etc. It also, in the old system, required us to insert *new* load uses into the current partition's use list, which would then be ignored during rewriting because we had already extracted an end iterator for the use list. The appending behavior (and much of the other oddities) stem from the strange de-duplication strategy in the PartitionUse builder. Amusingly, all this went without notice for so long because it could only be triggered by having *different* GEPs into the same partition of the same alloca, where both different GEPs were operands of a single PHI, and where the GEP which was not encountered first also had multiple uses within that same PHI node... Hence the insane steps required to reproduce. So, step one in fixing this fundamental bad idea is to make the PartitionUse actually contain a Use*, and to make the builder do proper deduplication instead of funky de-duplication. This is enough to remove the appending behavior, and fix the miscompile in PR13926, but there is more work to be done here. Subsequent commits will lift the speculation into its own visitor. It'll be a useful step toward potentially extracting all of the speculation logic into a generic utility transform. The existing PHI test case for repeated operands has been made more extreme to catch even these issues. This test case, run through the old pass, will exactly reproduce the miscompile from PR13926. ;] We were so close here! llvm-svn: 164925
-
- Sep 30, 2012
-
-
Duncan Sands authored
source of false positives due to globals being declared in a header with some kind of incomplete (small) type, but the actual definition being bigger. llvm-svn: 164912
-
Nadav Rotem authored
llvm-svn: 164911
-
Nadav Rotem authored
A DAGCombine optimization for merging consecutive stores. This optimization is not profitable in many cases because moden processos can store multiple values in parallel, and preparing the consecutive store requires some work. We only handle these cases: 1. Consecutive stores where the values and consecutive loads. For example: int a = p->a; int b = p->b; q->a = a; q->b = b; 2. Consecutive stores where the values are constants. Foe example: q->a = 4; q->b = 5; llvm-svn: 164910
-
- Sep 29, 2012
-
-
Bob Wilson authored
llvm-svn: 164899
-
Bob Wilson authored
llvm-svn: 164898
-
Chandler Carruth authored
alignment could lose it due to the alloca type moving down to a much smaller alignment guarantee. Now SROA will actively compute a proper alignment, factoring the target data, any explicit alignment, and the offset within the struct. This will in some cases lower the alignment requirements, but when we lower them below those of the type, we drop the alignment entirely to give freedom to the code generator to align it however is convenient. Thanks to Duncan for the lovely test case that pinned this down. =] llvm-svn: 164891
-
Duncan Sands authored
buildbots. Original commit message: A DAGCombine optimization for merging consecutive stores. This optimization is not profitable in many cases because moden processos can store multiple values in parallel, and preparing the consecutive store requires some work. We only handle these cases: 1. Consecutive stores where the values and consecutive loads. For example: int a = p->a; int b = p->b; q->a = a; q->b = b; 2. Consecutive stores where the values are constants. Foe example: q->a = 4; q->b = 5; llvm-svn: 164890
-
Nadav Rotem authored
A DAGCombine optimization for merging consecutive stores. This optimization is not profitable in many cases because moden processos can store multiple values in parallel, and preparing the consecutive store requires some work. We only handle these cases: 1. Consecutive stores where the values and consecutive loads. For example: int a = p->a; int b = p->b; q->a = a; q->b = b; 2. Consecutive stores where the values are constants. Foe example: q->a = 4; q->b = 5; llvm-svn: 164885
-
Evan Cheng authored
llvm-svn: 164867
-
-
- Sep 28, 2012
-
-
Akira Hatanaka authored
llvm-svn: 164849
-
Akira Hatanaka authored
llvm-svn: 164845
-
Manman Ren authored
llvm-svn: 164842
-
Akira Hatanaka authored
llvm-svn: 164840
-
Benjamin Kramer authored
CorrelatedPropagation: BasicBlock::removePredecessor can simplify PHI nodes. If the it's the condition of a SwitchInst, reload it. Fixes PR13972. llvm-svn: 164818
-
Benjamin Kramer authored
Fixes PR13968. llvm-svn: 164815
-
Nick Lewycky authored
llvm-svn: 164814
-
- Sep 27, 2012
-
-
Meador Inge authored
llvm-svn: 164800
-
Meador Inge authored
llvm-svn: 164799
-
Meador Inge authored
llvm-svn: 164798
-
Meador Inge authored
llvm-svn: 164797
-
Meador Inge authored
llvm-svn: 164796
-
Jakob Stoklund Olesen authored
The new coalescer is better at merging values into unused vector lanes, improving NEON code. llvm-svn: 164794
-
Akira Hatanaka authored
llvm-svn: 164787
-
Akira Hatanaka authored
llvm-svn: 164786
-
Benjamin Kramer authored
If the width is very large it gets truncated from uint64_t to uint32_t when passed to TD->fitsInLegalInteger. The truncated value can fit in a register. This manifested in massive memory usage or crashes (PR13946). llvm-svn: 164784
-
Jakob Stoklund Olesen authored
Fixes PR13943. llvm-svn: 164778
-
Sylvestre Ledru authored
Revert 'Fix a typo 'iff' => 'if''. iff is an abreviation of if and only if. See: http://en.wikipedia.org/wiki/If_and_only_if Commit 164767 llvm-svn: 164768
-
Sylvestre Ledru authored
llvm-svn: 164767
-
Nick Lewycky authored
llvm-svn: 164763
-
Jush Lu authored
This is a preliminary step towards ELF support; currently ARMFastISel hasn't been used for ELF object files yet. llvm-svn: 164759
-
Akira Hatanaka authored
llvm-svn: 164757
-
Akira Hatanaka authored
llvm-svn: 164754
-
Akira Hatanaka authored
llvm-svn: 164751
-
Akira Hatanaka authored
llvm-svn: 164750
-
Akira Hatanaka authored
llvm-svn: 164749
-