- Mar 27, 2012
-
-
Craig Topper authored
llvm-svn: 153502
-
Craig Topper authored
llvm-svn: 153500
-
Akira Hatanaka authored
MachinePointerInfo when getStore is called to create a node that stores an argument passed in register to the stack. Without this change, the post RA scheduler will fail to discover the dependencies between the stores instructions and the instructions that load from a structure passed by value. The link to the related discussion is here: http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-March/048055.html llvm-svn: 153499
-
Akira Hatanaka authored
llvm-svn: 153498
-
Akira Hatanaka authored
llvm-svn: 153497
-
Akira Hatanaka authored
set it in MipsMCCodeEmitter::getMachineOpValue. Assert in getMachineOpValue if MachineOperand MO is of an unexpected type. llvm-svn: 153494
-
Akira Hatanaka authored
offset applied to it. llvm-svn: 153493
-
Evan Cheng authored
register that's read by the preheader terminator. rdar://11095580 llvm-svn: 153492
-
Akira Hatanaka authored
cleared. No functionality change. llvm-svn: 153491
-
Lang Hames authored
copies being considered for removal. Make sure to track all of the copies, rather than just the most recent encountered, by holding a DenseSet instead of an unsigned in SrcMap. No test case - couldn't reduce something with a sane size. llvm-svn: 153487
-
Akira Hatanaka authored
llvm-svn: 153486
-
Evan Cheng authored
produces a 32-bit immediate which is consumed by the use. It tries to fold the immediate by breaking it into two parts and fold them into the immmediate fields of two uses. e.g movw r2, #40885 movt r3, #46540 add r0, r0, r3 => add.w r0, r0, #3019898880 add.w r0, r0, #30146560 ; However, this transformation is incorrect if the user produces a flag. e.g. movw r2, #40885 movt r3, #46540 adds r0, r0, r3 => add.w r0, r0, #3019898880 adds.w r0, r0, #30146560 Note the adds.w may not set the carry flag even if the original sequence would. rdar://11116189 llvm-svn: 153484
-
Lang Hames authored
llvm-svn: 153483
-
Andrew Trick authored
Fixes PR11882: NULL dereference in ComputeLoadConstantCompareExitLimit. llvm-svn: 153480
-
- Mar 26, 2012
-
-
Eric Christopher authored
backtrace locations. Testcase forthcoming, but I wanted to get some testing here. Should fix: PR12323 PR12314 rdar://11091100 llvm-svn: 153471
-
Nadav Rotem authored
153465 was incorrect. In this code we wanted to check that the pointer operand is of pointer type (and not vector type). llvm-svn: 153468
-
Sean Callanan authored
relocations. The algorithm is the same as that for x86_64. Scattered relocations, a feature present in i386 but not on x86_64, are not yet supported. llvm-svn: 153466
-
Nadav Rotem authored
llvm-svn: 153465
-
Andrew Trick authored
Fixes PR11950. llvm-svn: 153463
-
Andrew Trick authored
llvm-svn: 153462
-
Chris Lattner authored
llvm-svn: 153458
-
Eric Christopher authored
llvm-svn: 153456
-
Eric Christopher authored
llvm-svn: 153455
-
Chad Rosier authored
Original commit message: Use the new range metadata in computeMaskedBits and add a new optimization to instruction simplify that lets us remove an and when loading a boolean value. llvm-svn: 153452
-
Andrew Trick authored
Thanks Andrey. llvm-svn: 153451
-
Kostya Serebryany authored
[tsan] treat vtable pointer updates in a special way (requires tbaa); fix a bug (forgot to return true after instrumenting); make sure the tsan tests are run llvm-svn: 153448
-
Benjamin Kramer authored
llvm-svn: 153438
-
Douglas Gregor authored
llvm-svn: 153436
-
Anton Korobeynikov authored
Patch by Sylvestre Ledru! llvm-svn: 153435
-
Craig Topper authored
llvm-svn: 153429
-
Eric Christopher authored
llvm-svn: 153428
-
Rafael Espindola authored
instruction simplify that lets us remove an and when loding a boolean value. llvm-svn: 153423
-
Craig Topper authored
llvm-svn: 153422
-
Craig Topper authored
llvm-svn: 153421
-
- Mar 25, 2012
-
-
Chandler Carruth authored
constant-offsets of a common base using the generic GEP-walking logic I added for computing pointer differences in the same situation. llvm-svn: 153419
-
Chandler Carruth authored
inbounds GEPs. This isn't really necessary for simplifying pointer differences, but I'm planning to re-use the same code to simplify pointer comparisons where it is necessary. Since real code almost exclusively uses inbounds GEPs, it doesn't seem worth it to support the extra complexity of turning it on and off. If anyone would like that back, feel free to shout. Note that instcombine will still catch any of these patterns. llvm-svn: 153418
-
Craig Topper authored
llvm-svn: 153415
-
Chandler Carruth authored
aggressively. There are lots of dire warnings about this being expensive that seem to predate switching to the TrackingVH-based value remapper that is automatically updated on RAUW. This makes it easy to not just prune single-entry PHIs, but to fully simplify PHIs, and to recursively simplify the newly inlined code to propagate PHINode simplifications. This introduces a bit of a thorny problem though. We may end up simplifying a branch condition to a constant when we fold PHINodes, and we would like to nuke any dead blocks resulting from this so that time isn't wasted continually analyzing them, but this isn't easy. Deleting basic blocks *after* they are fully cloned and mapped into the new function currently requires manually updating the value map. The last piece of the simplification-during-inlining puzzle will require either switching to WeakVH mappings or some other piece of refactoring. I've left a FIXME in the testcase about this. llvm-svn: 153410
-
Chandler Carruth authored
to instead rely on much more generic and powerful instruction simplification in the function cloner (and thus inliner). This teaches the pruning function cloner to use instsimplify rather than just the constant folder to fold values during cloning. This can simplify a large number of things that constant folding alone cannot begin to touch. For example, it will realize that 'or' and 'and' instructions with certain constant operands actually become constants regardless of what their other operand is. It also can thread back through the caller to perform simplifications that are only possible by looking up a few levels. In particular, GEPs and pointer testing tend to fold much more heavily with this change. This should (in some cases) have a positive impact on compile times with optimizations on because the inliner itself will simply avoid cloning a great deal of code. It already attempted to prune proven-dead code, but now it will be use the stronger simplifications to prove more code dead. llvm-svn: 153403
-
Chandler Carruth authored
fire if anything ever invalidates the assumption of a terminator instruction being unchanged throughout the routine. I've convinced myself that the current definition of simplification precludes such a transformation, so I think getting some asserts coverage that we don't violate this agreement is sufficient to make this code safe for the foreseeable future. Comments to the contrary or other suggestions are of course welcome. =] The bots are now happy with this code though, so it appears the bug here has indeed been fixed. llvm-svn: 153401
-