summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* Begin fleshing out an interface in TTI for modelling the costs ofChandler Carruth2013-01-224-66/+176
| | | | | | | | | | | | | | | | | | | | | | | | | | | generic function calls and intrinsics. This is somewhat overlapping with an existing intrinsic cost method, but that one seems targetted at vector intrinsics. I'll merge them or separate their names and use cases in a separate commit. This sinks the test of 'callIsSmall' down into TTI where targets can control it. The whole thing feels very hack-ish to me though. I've left a FIXME comment about the fundamental design problem this presents. It isn't yet clear to me what the users of this function *really* care about. I'll have to do more analysis to figure that out. Putting this here at least provides it access to proper analysis pass tools and other such. It also allows us to more cleanly implement the baseline cost interfaces in TTI. With this commit, it is now theoretically possible to simplify much of the inline cost analysis's handling of calls by calling through to this interface. That conversion will have to happen in subsequent commits as it requires more extensive restructuring of the inline cost analysis. The CodeMetrics class is now really only in the business of running over a block of code and aggregating the metrics on that block of code, with the actual cost evaluation done entirely in terms of TTI. llvm-svn: 173148
* Make APFloat constructor require explicit semantics.Tim Northover2013-01-2214-100/+129
| | | | | | | | | Previously we tried to infer it from the bit width size, with an added IsIEEE argument for the PPC/IEEE 128-bit case, which had a default value. This default value allowed bugs to creep in, where it was inappropriate. llvm-svn: 173138
* [MC/Mach-O] Load commands are supposed to 8-byte aligned on 64-bit.Daniel Dunbar2013-01-221-7/+8
| | | | llvm-svn: 173120
* Add a new method that adds the AttributeSet at the given index. No ↵Bill Wendling2013-01-221-8/+3
| | | | | | functional change. llvm-svn: 173109
* Add the attributes that are passed in instead of the ones we're merging into.Bill Wendling2013-01-221-2/+2
| | | | llvm-svn: 173108
* Use AttributeSet instead of Attribute to verify things.Bill Wendling2013-01-211-53/+52
| | | | llvm-svn: 173101
* Have AttributeSet::getRetAttributes() return an AttributeSet instead of ↵Bill Wendling2013-01-214-30/+47
| | | | | | | | | Attribute. This further restricts the use of the Attribute class to the Attribute family of classes. llvm-svn: 173098
* Make AttributeSet::getFnAttributes() return an AttributeSet instead of an ↵Bill Wendling2013-01-215-20/+45
| | | | | | | | | Attribute. This is more code to isolate the use of the Attribute class to that of just holding one attribute instead of a collection of attributes. llvm-svn: 173094
* Transform (sub 0, (zext bool to A)) to (sext bool to A) andPaul Redmond2013-01-211-0/+10
| | | | | | | | | (sub 0, (sext bool to A)) to (zext bool to A). Patch by Muhammad Ahmad Reviewed by Duncan Sands llvm-svn: 173093
* Fix some incorrectly named u10 / lu10 instructions.Richard Osborne2013-01-211-25/+12
| | | | llvm-svn: 173090
* Remove unused multiclass.Richard Osborne2013-01-211-12/+0
| | | | llvm-svn: 173087
* Add instruction encodings / disassembly support for u6 / lu6 instructions.Richard Osborne2013-01-212-59/+42
| | | | llvm-svn: 173086
* Add instruction encoding / disassembly support for ru6 / lru6 instructions.Richard Osborne2013-01-213-94/+97
| | | | llvm-svn: 173085
* Use correct format for the LDAWCP instruction (u6).Richard Osborne2013-01-211-7/+3
| | | | llvm-svn: 173083
* Fix a heinous inefficiency introduced in r149918, wherein reading each byte of aChris Lattner2013-01-211-9/+8
| | | | | | | | BLOB (i.e., large, performance intensive data) in a bitcode file was switched to invoking one virtual method call per byte read. Now we do one virtual call per BLOB. llvm-svn: 173065
* Introduce a new data structure, the SparseMultiSet, and changes to the MI ↵Michael Ilseman2013-01-211-45/+33
| | | | | | | | scheduler to use it. A SparseMultiSet adds multiset behavior to SparseSet, while retaining SparseSet's desirable properties. Essentially, SparseMultiSet provides multiset behavior by storing its dense data in doubly linked lists that are inlined into the dense vector. This allows it to provide good data locality as well as vector-like constant-time clear() and fast constant time find(), insert(), and erase(). It also allows SparseMultiSet to have a builtin recycler rather than keeping SparseSet's behavior of always swapping upon removal, which allows it to preserve more iterators. It's often a better alternative to a SparseSet of a growable container or vector-of-vector. llvm-svn: 173064
* wean Blob handling logic off of banging on NextChar directly. Instead, makeChris Lattner2013-01-211-10/+13
| | | | | | | it reason about the current bit position, which is always independent of the underlying cursors word size. llvm-svn: 173063
* rename "SkipToWord" to "SkipToFourByteBoundary" since a word is not always 4 ↵Chris Lattner2013-01-211-3/+3
| | | | | | bytes. llvm-svn: 173062
* Fix a comment. Induction vars dont need to start at zero.Nadav Rotem2013-01-211-1/+1
| | | | llvm-svn: 173061
* R600/SI: Use unnormalized coordinates for sampling with the RECT target.Tom Stellard2013-01-212-0/+13
| | | | | | | | | Patch by: Michel Dänzer Reviewed-by: Tom Stellard <thomas.stellard@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> llvm-svn: 173053
* R600/SI: Take target parameter for sample intrinsics.Tom Stellard2013-01-212-4/+4
| | | | | | | | | Patch by: Michel Dänzer Reviewed-by: Tom Stellard <thomas.stellard@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> llvm-svn: 173052
* R600/SI: Derive all sample intrinsics from a single class.Tom Stellard2013-01-211-3/+5
| | | | | | | | | Patch by: Michel Dänzer Reviewed-by: Tom Stellard <thomas.stellard@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> llvm-svn: 173051
* R600/SILowerControlFlow.cpp: Fix a warning. [-Wunused-variable]NAKAMURA Takumi2013-01-211-3/+2
| | | | llvm-svn: 173040
* Switch CodeMetrics itself over to use TTI to determine if an instructionChandler Carruth2013-01-215-88/+27
| | | | | | | | | | | | is free. The whole CodeMetrics API should probably be reworked more, but this is enough to allow deleting the duplicate code there for computing whether an instruction is free. All of the passes using this have been updated to pull in TTI and hand it to the CodeMetrics stuff. Further, a dead CodeMetrics API (analyzeFunction) is nuked for lack of users. llvm-svn: 173036
* Sink InlineCost.cpp into IPA -- it is now officially an interproceduralChandler Carruth2013-01-213-1/+1
| | | | | | | | | | analysis. How cute that it wasn't previously. ;] Part of this confusion stems from the flattened header file tree. Thanks to Benjamin for pointing out the goof on IRC, and we're considering un-flattening the headers, so speak now if that would bug you. llvm-svn: 173033
* Move the inline cost analysis's primary cost query to TTI instead of theChandler Carruth2013-01-211-4/+4
| | | | | | | | old CodeMetrics system. TTI has the specific advantage of being extensible and customizable by targets to reflect target-specific cost metrics. llvm-svn: 173032
* Now that the inline cost analysis is a pass, we can easily have itChandler Carruth2013-01-211-12/+20
| | | | | | | | | | | depend on and use other analyses (as long as they're either immutable passes or CGSCC passes of course -- nothing in the pass manager has been fixed here). Leverage this to thread TargetTransformInfo down through the inline cost analysis. No functionality changed here, this just threads things through. llvm-svn: 173031
* Make the inline cost a proper analysis pass. This remains essentiallyChandler Carruth2013-01-213-26/+57
| | | | | | | | | | | | | | | | a dynamic analysis done on each call to the routine. However, now it can use the standard pass infrastructure to reference other analyses, instead of a silly setter method. This will become more interesting as I teach it about more analysis passes. This updates the two inliner passes to use the inline cost analysis. Doing so highlights how utterly redundant these two passes are. Either we should find a cheaper way to do always inlining, or we should merge the two and just fiddle with the thresholds to get the desired behavior. I'm leaning increasingly toward the latter as it would also remove the Inliner sub-class split. llvm-svn: 173030
* Formatting and comment fixes to the always inliner.Chandler Carruth2013-01-211-25/+28
| | | | | | Formatting fixes brought to you by clang-format. llvm-svn: 173029
* Clean up the formatting and doxygen for the simple inliner a bit. NoChandler Carruth2013-01-211-18/+29
| | | | | | functionality changed. llvm-svn: 173028
* Use <0 checks in place of ==-1 because it results in simpler code.Craig Topper2013-01-211-3/+3
| | | | llvm-svn: 173010
* Use MVT instead of EVT in LowerVECTOR_SHUFFLEtoBlend.Craig Topper2013-01-211-6/+5
| | | | llvm-svn: 173009
* Remove trailing whitespace.Craig Topper2013-01-211-9/+9
| | | | llvm-svn: 173008
* Fix some 80 column violations.Craig Topper2013-01-211-7/+9
| | | | llvm-svn: 173006
* Make helper method static.Craig Topper2013-01-212-4/+2
| | | | llvm-svn: 173005
* Introduce a generic interface for querying an operation's expectedChandler Carruth2013-01-211-1/+122
| | | | | | | | | | | | | | | lowered cost. Currently, this is a direct port of the logic implementing isInstructionFree in CodeMetrics. The hope is that the interface can be improved (f.ex. supporting un-formed instruction queries) and the implementation abstracted so that as we have test cases and target knowledge we can expose increasingly accurate heuristics to clients. I'll start switching existing consumers over and kill off the routine in CodeMetrics in subsequent commits. llvm-svn: 172998
* Convert more EVT's to MVT's in the lowering methods.Craig Topper2013-01-201-23/+24
| | | | llvm-svn: 172995
* Capitalize lowerTRUNCATE so that it matches the other lower functions in ↵Craig Topper2013-01-202-3/+3
| | | | | | this file despite it not matching coding standards. llvm-svn: 172994
* Revert CostTable algorithm, will re-writeRenato Golin2013-01-202-111/+102
| | | | llvm-svn: 172992
* LoopVectorize: Fix a C++11 incompatibility.Benjamin Kramer2013-01-201-1/+1
| | | | llvm-svn: 172990
* Add instruction encodings / disassembly support for l2rus instructions.Richard Osborne2013-01-203-23/+81
| | | | llvm-svn: 172987
* Add instruction encodings / disassembly support for l3r instructions.Richard Osborne2013-01-203-56/+172
| | | | llvm-svn: 172986
* Add instruction encodings / disassembler support for 2rus instructions.Richard Osborne2013-01-203-23/+90
| | | | llvm-svn: 172985
* Add instruction encodings / disassembly support 3r instructions.Richard Osborne2013-01-203-85/+167
| | | | | | | | It is not possible to distinguish 3r instructions from 2r / rus instructions using only the fixed bits. Therefore if an instruction doesn't match the 2r / rus format try to decode it as a 3r instruction before returning Fail. llvm-svn: 172984
* Fix a build error.Nadav Rotem2013-01-201-2/+3
| | | | llvm-svn: 172971
* Make LowerVSETCC a static function and use MVT instead of EVT.Craig Topper2013-01-202-63/+65
| | | | llvm-svn: 172969
* Revert 172708.Nadav Rotem2013-01-203-40/+10
| | | | | | | | | The optimization handles esoteric cases but adds a lot of complexity both to the X86 backend and to other backends. This optimization disables an important canonicalization of chains of SEXT nodes and makes SEXT and ZEXT asymmetrical. Disabling the canonicalization of consecutive SEXT nodes into a single node disables other DAG optimizations that assume that there is only one SEXT node. The AVX mask optimizations is one example. Additionally this optimization does not update the cost model. llvm-svn: 172968
* LoopVectorizer: Implement a new heuristics for selecting the unroll factor.Nadav Rotem2013-01-201-22/+65
| | | | | | | We ignore the cpu frontend and focus on pipeline utilization. We do this because we don't have a good way to estimate the loop body size at the IR level. llvm-svn: 172964
* trivial micro-optimization: lazily call the virtual method instead of ↵Chris Lattner2013-01-201-1/+1
| | | | | | eagerly calling it. llvm-svn: 172953
* convert the bitstream reader itself and the IR .bc file parser to use the ↵Chris Lattner2013-01-202-248/+214
| | | | | | | | new advance() APIs, simplifying things and making a bunch of details more private to BitstreamCursor. llvm-svn: 172947
OpenPOWER on IntegriCloud