- Jan 24, 2013
-
-
Chandler Carruth authored
that can be specialized by targets. The goal here is not to be more aggressive, but to just be more accurate with very obvious cases. There are instructions which are known to be truly free and which were not being modeled as such in this code -- see the regression test which is distilled from an inner loop of zlib. Everywhere the TTI cost model is insufficiently conservative I've added explicit checks with FIXME comments to go add proper modelling of these cost factors. If this causes regressions, the likely solution is to make TTI even more conservative in its cost estimates, but test cases will help here. llvm-svn: 173342
-
Chandler Carruth authored
unfolded constant expressions rather than checking each one independently. llvm-svn: 173341
-
Chandler Carruth authored
a cost fuction that seems both a bit ad-hoc and also poorly suited to evaluating constant expressions. Notably, it is missing any support for trivial expressions such as 'inttoptr'. I could fix this routine, but it isn't clear to me all of the constraints its other users are operating under. The core protection that seems relevant here is avoiding the formation of a select instruction wich a further chain of select operations in a constant expression operand. Just explicitly encode that constraint. Also, update the comments and organization here to make it clear where this needs to go -- this should be driven off of real cost measurements which take into account the number of constants expressions and the depth of the constant expression tree. llvm-svn: 173340
-
Chandler Carruth authored
terms of cost rather than hoisting a single instruction. This does *not* change the cost model! We still set the cost threshold at 1 here, it's just that we track it by accumulating cost rather than by storing an instruction. The primary advantage is that we no longer leave no-op intrinsics in the basic block. For example, this will now move both debug info intrinsics and a single instruction, instead of only moving the instruction and leaving a basic block with nothing bug debug info intrinsics in it, and those intrinsics now no longer ordered correctly with the hoisted value. Instead, we now splice the entire conditional basic block's instruction sequence. This also places the code for checking the safety of hoisting next to the code computing the cost. Currently, the only observable side-effect of this change is that debug info intrinsics are no longer abandoned. I'm not sure how to craft a test case for this, and my real goal was the refactoring, but I'll talk to Dave or Eric about how to add a test case for this. llvm-svn: 173339
-
Kostya Serebryany authored
llvm-svn: 173338
-
Chandler Carruth authored
Previously, the code would scan the PHI nodes and build up a small setvector of candidate value pairs in phi nodes to go and rewrite. Once certain the rewrite could be performed, the code walks the set, and for each one re-scans the entire PHI node list looking for nodes to rewrite operands. Instead, scan the PHI nodes once to check for hazards, and then scan it a second time to rewrite the operands to selects. No set vector, and a max of two scans. The only downside is that we might form identical selects, but instcombine or anything else should fold those easily, and it seems unlikely to happen often. llvm-svn: 173337
-
Kostya Serebryany authored
llvm-svn: 173336
-
Kostya Serebryany authored
llvm-svn: 173335
-
Chandler Carruth authored
structure being analyzed. No functionality changed. llvm-svn: 173334
-
Alexander Potapenko authored
llvm-svn: 173333
-
Dmitry Vyukov authored
llvm-svn: 173332
-
Chandler Carruth authored
tests. No need to pay the high cost when we're never going to do anything. No functionality changed. llvm-svn: 173331
-
NAKAMURA Takumi authored
FIXME: PathV2::unique_file() is assumed to open the file with binary mode on win32. llvm-svn: 173330
-
Chandler Carruth authored
pretty in doxygen, adding some of the details actually present in a classic example where this matters (a loop from gzip and many other compression algorithms), and a cautionary note about the risks inherent in the transform. This has come up on the mailing lists recently, and I suspect folks reading this code could benefit from going and looking at the MI pass that can really deal with these issues. llvm-svn: 173329
-
Dmitry Vyukov authored
llvm-svn: 173328
-
Dmitry Vyukov authored
llvm-svn: 173327
-
NAKAMURA Takumi authored
llvm-svn: 173326
-
NAKAMURA Takumi authored
FIXME: Could they, unreachable(s), be removed? FIXME: I could prefer the coding standards... llvm-svn: 173325
-
NAKAMURA Takumi authored
...and fix a typo, s/#ifdef/#ifndef/ llvm-svn: 173324
-
NAKAMURA Takumi authored
llvm-svn: 173323
-
Craig Topper authored
llvm-svn: 173322
-
Richard Trieu authored
if the vector is not empty. This will ensure that calls to these functions will reference elements in the vector. llvm-svn: 173321
-
Reed Kotler authored
Allow Mips16 routines to call Mips32 routines that have abi requirements that either arguments or return values are passed in floating point registers. This handles only the pic case. We have not done non pic for Mips16 yet in any form. The libm functions are Mips32, so with this addition we have a complete Mips16 hard float implementation. We still are not able to complete mix Mip16 and Mips32 with hard float. That will be the next phase which will have several steps. For Mips32 to freely call Mips16 some stub functions must be created. llvm-svn: 173320
-
Nick Lewycky authored
llvm-svn: 173319
-
Andrew Trick authored
llvm-svn: 173318
-
Andrew Trick authored
Allow schedulers to order DAG edges by critical path. This makes DFS-based heuristics more stable and effective. llvm-svn: 173317
-
Michael J. Spencer authored
llvm-svn: 173316
-
Nick Lewycky authored
overloaded binary operators. llvm-svn: 173315
-
Nick Lewycky authored
functionality change! llvm-svn: 173314
-
Bill Wendling authored
llvm-svn: 173313
-
Bill Wendling authored
llvm-svn: 173311
-
Bill Wendling authored
This is a helper class for the AttributeSetImpl class. It holds a set of attributes that apply to a single element: function, return type, or parameter. These are uniqued. llvm-svn: 173310
-
Richard Smith authored
type of the string literal implicitly used for a raw user-defined literal call. No test; this has no semantic impact. llvm-svn: 173309
-
Jim Ingham authored
Check for NULL breakpoint option thread name & queue name before comparing their values to the new value. <rdar://problem/13065198> llvm-svn: 173308
-
Bill Wendling authored
Don't check lines beginning with '#', since they could contain a path with the unexpected word in them. llvm-svn: 173307
-
Bill Wendling authored
Don't check lines beginning with '#', since they could contain a path with the unexpected word in them. llvm-svn: 173306
-
Bill Wendling authored
The diagnostic is now a warning instead of an error. Also don't check lines beginning with '#', since they could contain a path with the unexpected word in them. llvm-svn: 173305
-
Bill Wendling authored
Push down the conversion of the alignment from the bit mask to a real number into the attribute implementation class. llvm-svn: 173304
-
- Jan 23, 2013
-
-
Douglas Gregor authored
llvm-svn: 173303
-
Bill Wendling authored
llvm-svn: 173302
-