aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.h
AgeCommit message (Collapse)AuthorFilesLines
2016-08-11Use the range variant of find instead of unpacking begin/endDavid Majnemer1-2/+1
If the result of the find is only used to compare against end(), just use is_contained instead. No functionality change is intended. llvm-svn: 278433
2016-07-15IR: Sort generic intrinsics before target specific onesJustin Bogner1-2/+2
This splits out the intrinsic table such that generic intrinsics come first and target specific intrinsics are grouped by target. From here we can find out which target an intrinsic is for or differentiate between generic and target intrinsics. The motivation here is to make it easier to move target specific intrinsic handling out of generic code. llvm-svn: 275575
2015-11-26[SelectionDAG] Add a SDTCisSameSizeAs type constraint that can be used to ↵Craig Topper1-1/+7
ensure vector widths match even if the element size and count don't. llvm-svn: 254138
2015-09-12Fix typos.Bruce Mitchener1-4/+4
Summary: This fixes a variety of typos in docs, code and headers. Subscribers: jholewinski, sanjoy, arsenm, llvm-commits Differential Revision: http://reviews.llvm.org/D12626 llvm-svn: 247495
2015-03-05[TableGen] Add support constraining a vector type in a pattern to have a ↵Craig Topper1-1/+15
specific element type and for constraining a vector type to have the same number of elements as another vector type. This is useful for AVX512 mask operations so we relate the mask type to the type of the other arguments. llvm-svn: 231356
2014-11-17Revert "Improve memory ownership/management in TableGen by unique_ptrifying ↵David Blaikie1-19/+13
TreePattern's Tree member." This reverts commit r222183. Broke on the MSVC buildbots due to MSVC not producing default move operations - I'd fix it immediately but just broke my build system a bit, so backing out until I have a chance to get everything going again. llvm-svn: 222187
2014-11-17Improve memory ownership/management in TableGen by unique_ptrifying ↵David Blaikie1-13/+19
TreePattern's Tree member. The next step is to actually use unique_ptr in TreePatternNode's Children vector. That will be more intrusive, and may not work, depending on exactly how these things are handled (I have a bad suspicion things are shared more than they should be, making this more DAG than tree - but if it's really a tree, unique_ptr should suffice) llvm-svn: 222183
2014-11-13Fix nested namespace with decltype to hopefully work with MSVCDavid Blaikie1-1/+2
Build failed here: http://lab.llvm.org:8011/builders/lld-x86_64-win7/builds/14629/steps/build_Lld/logs/stdio So I'm taking a shot in the dark that MSVC (whatever version that is) can't cope with nested name specifiers with a decltype prefix. llvm-svn: 221931
2014-11-13Use unique_ptr to handle ownership of TreePatterns in ↵David Blaikie1-7/+7
CodeGenDAGPatterns::PatternFragments We might be able to use unique_ptr to handle ownership of the TreePatternNodes too - looking into that next. llvm-svn: 221928
2014-11-11Make TreePattern::error use TwineMatt Arsenault1-1/+1
The underlying error function already uses a Twine, and most of the uses build up strings. llvm-svn: 221740
2014-08-13Canonicalize header guards into a common format.Benjamin Kramer1-2/+2
Add header guards to files that were missing guards. Remove #endif comments as they don't seem common in LLVM (we can easily add them back if we decide they're useful) Changes made by clang-tidy with minor tweaks. llvm-svn: 215558
2014-08-01TableGen: Allow AddedComplexity values to be negativeTom Stellard1-4/+4
This is useful for cases when stand-alone patterns are preferred to the patterns included in the instruction definitions. Instead of requiring that stand-alone patterns set a larger AddedComplexity value, which can be confusing to new developers, the allows us to reduce the complexity of the included patterns to achieve the same result. There will be test cases for this added to the R600 backend in a future commit. llvm-svn: 214466
2014-07-22Revert of r213521. This change introduced a non-hermetic test (depending on aRichard Smith1-4/+4
file not in the test/ area). Backing out now so that this test isn't part of the 3.5 branch. Original commit message: "TableGen: Allow AddedComplexity values to be negative [...]" llvm-svn: 213596
2014-07-21TableGen: Allow AddedComplexity values to be negativeTom Stellard1-4/+4
This is useful for cases when stand-alone patterns are preferred to the patterns included in the instruction definitions. Instead of requiring that stand-alone patterns set a larger AddedComplexity value, which can be confusing to new developers, the allows us to reduce the complexity of the included patterns to achieve the same result. llvm-svn: 213521
2014-05-20TableGen: permit non-leaf ComplexPattern usesTim Northover1-0/+13
This allows the results of a ComplexPattern check to be distributed to separate named Operands, instead of the current system where all results must apply (and match perfectly) with a single Operand. For example, if "some_addrmode" is a ComplexPattern producing two results, you can write: def : Pat<(load (some_addrmode GPR64:$base, imm:$offset)), (INST GPR64:$base, imm:$offset)>; This should allow neater instruction definitions in TableGen that don't put all possible aspects of addressing into a single operand, but are still usable with relatively simple C++ CodeGen idioms. llvm-svn: 209206
2014-04-16[C++11] More 'nullptr' conversion. In some cases just using a boolean check ↵Craig Topper1-8/+8
instead of comparing to nullptr. llvm-svn: 206356
2014-02-28Add an OutPatFrag TableGen classHal Finkel1-1/+1
Unfortunately, it is currently impossible to use a PatFrag as part of an output pattern (the part of the pattern that has instructions in it) in TableGen. Looking at the current implementation, this was clearly intended to work (there is already code in place to expand patterns in the output DAG), but is currently broken by the baked-in type-checking assumption and the order in which the pattern fragments are processed (output pattern fragments need to be processed after the instruction definitions are processed). Fixing this is fairly simple, but requires some way of differentiating output patterns from the existing input patterns. The simplest way to handle this seems to be to create a subclass of PatFrag, and so that's what I've done here. As a simple example, this allows us to write: def crnot : OutPatFrag<(ops node:$in), (CRNOR $in, $in)>; def : Pat<(not i1:$in), (crnot $in)>; which captures the core use case: handling of repeated subexpressions inside of complicated output patterns. This will be used by an upcoming commit to the PowerPC backend. llvm-svn: 202450
2014-01-28Improve handling of EnforceSmallerThan. Remove all types that are smaller ↵Craig Topper1-0/+4
from the larger set not just the smallest type from the smaller set. Ensure 'smaller' vectors have the same or fewer total bits. Similar for 'larger' vectors. llvm-svn: 200287
2013-10-28TableGen: Refactor DAG patterns to enable parsing one pattern at a time.Ahmed Bougacha1-1/+5
llvm-svn: 193526
2013-03-23Make all unnamed RegisterClass TreePatternNodes typed MVT::i32.Jakob Stoklund Olesen1-0/+1
A register class can appear as a leaf TreePatternNode with and without a name: (COPY_TO_REGCLASS GPR:$src, F8RC) In a named leaf node like GPR:$src, the register class provides type information for the named variable represented by the node. The TypeSet for such a node is the set of value types that the register class can represent. In an unnamed leaf node like F8RC above, the register class represents itself as a kind of immediate. Such a node has the type MVT::i32, we'll never create a virtual register representing it. This change makes it possible to remove the special handling of COPY_TO_REGCLASS in CodeGenDAGPatterns.cpp. llvm-svn: 177825
2013-03-18Extract a method.Jakob Stoklund Olesen1-0/+5
This computes the type of an instruction operand or result based on the records in the instruction's ins and outs lists. llvm-svn: 177244
2013-03-17Use ArrayRef<MVT::SimpleValueType> when possible.Jakob Stoklund Olesen1-1/+1
Not passing vector references around makes it possible to use SmallVector in most places. llvm-svn: 177235
2012-12-04Sort the #include lines for utils/...Chandler Carruth1-3/+3
I've tried to find main moudle headers where possible, but the TableGen stuff may warrant someone else looking at it. llvm-svn: 169251
2012-10-25Remove exception handling usage from tblgen.Joerg Sonnenberger1-14/+23
Most places can use PrintFatalError as the unwinding mechanism was not used for anything other than printing the error. The single exception was CodeGenDAGPatterns.cpp, where intermediate errors during type resolution were ignored to simplify incremental platform development. This use is replaced by an error flag in TreePattern and bailout earlier in various places if it is set. llvm-svn: 166712
2012-09-19Refactor Record* by-ID comparator to Record.hSean Silva1-13/+8
This is a generally useful utility; there's no reason to have it hidden in CodeGenDAGPatterns.cpp. Also, rename it to fit the other comparators in Record.h Review by Jakob. llvm-svn: 164189
2012-09-06Tablegen: Add OperandWithDefaultOps Operand typeTom Stellard1-2/+2
This Operand type takes a default argument, and is initialized to this value if it does not appear in a patter. llvm-svn: 163315
2012-08-28Check all patterns for missing instruction flags.Jakob Stoklund Olesen1-0/+1
Both single-instruction and multi-instruction patterns can be checked for missing mayLoad / mayStore, and hasSideEffects flags. llvm-svn: 162734
2012-02-05Convert assert(0) to llvm_unreachableCraig Topper1-6/+4
llvm-svn: 149814
2011-07-29Unconstify InitsDavid Greene1-9/+9
Remove const qualifiers from Init references, per Chris' request. llvm-svn: 136531
2011-07-29[AVX] Constify InitsDavid Greene1-9/+9
Make references to Inits const everywhere. This is the final step before making them unique. llvm-svn: 136485
2011-07-13struct Init -> class InitDavid Greene1-1/+1
Rename struct Init to class Init for consistency and in preparation for making Init a FoldingSetNode. llvm-svn: 135097
2011-07-11Revert r134921, 134917, 134908 and 134907. They're causing failuresEric Christopher1-10/+10
in multiple buildbots. llvm-svn: 134936
2011-07-11struct Init -> class Init.Evan Cheng1-1/+1
llvm-svn: 134917
2011-07-11[AVX] Make Inits FoldableDavid Greene1-9/+9
Manage Inits in a FoldingSet. This provides several benefits: - Memory for Inits is properly managed - Duplicate Inits are folded into Flyweights, saving memory - It enforces const-correctness, protecting against certain classes of bugs The above benefits allow Inits to be used in more contexts, which in turn provides more dynamism to TableGen. This enhanced capability will be used by the AVX code generator to a fold common patterns together. llvm-svn: 134907
2011-04-18Implement major new fastisel functionality: the matcher can now handle ↵Chris Lattner1-0/+11
immediates with value constraints on them (when defined as ImmLeaf's). This is particularly important for X86-64, where almost all reg/imm instructions take a i64immSExt32 immediate operand, which has a value constraint. Before this patch we ended up iseling the examples into such amazing code as: movabsq $7, %rax imulq %rax, %rdi movq %rdi, %rax ret now we produce: imulq $7, %rdi, %rax ret This dramatically shrinks the generated code at -O0 on x86-64. llvm-svn: 129691
2011-04-17now that predicates have a decent abstraction layer on them, introduce a new Chris Lattner1-1/+2
kind of predicate: one that is specific to imm nodes. The predicate function specified here just checks an int64_t directly instead of messing around with SDNode's. The virtue of this is that it means that fastisel and other things can reason about these predicates. llvm-svn: 129675
2011-04-17Rework our internal representation of node predicates to expose moreChris Lattner1-5/+48
structure and fix some fixmes. We now have a TreePredicateFn class that handles all of the decoding of these things. This is an internal cleanup that has no impact on the code generated by tblgen. llvm-svn: 129670
2011-01-24[AVX] Add type checking support for vector/subvector type constraints.David Greene1-1/+9
This will be used to check patterns referencing a forthcoming INSERT_SUBVECTOR SDNode. INSERT_SUBVECTOR in turn is very useful for matching to VINSERTF128 instructions and complements the already existing EXTRACT_SUBVECTOR SDNode. llvm-svn: 124145
2010-12-24Trailing whitespace.Jim Grosbach1-96/+96
llvm-svn: 122542
2010-12-07Add source Record* reference to PatternToMatch. Allows better diagnostics.Jim Grosbach1-2/+4
llvm-svn: 121196
2010-04-20stop computing InstImpInputs, it is deadChris Lattner1-1/+0
llvm-svn: 101881
2010-04-20DAGInstruction::ImpOperands is dead after my recent tblgen work, zap it.Chris Lattner1-11/+2
llvm-svn: 101880
2010-03-29print the complexity of the pattern being matched in theChris Lattner1-0/+4
comment in the generated table. llvm-svn: 99794
2010-03-28improve type checking of SDNode operand count. This rejects all casesChris Lattner1-0/+3
where an incorrect number of operands is provided to an sdnode instead of just a few cases. llvm-svn: 99761
2010-03-28eliminate a bunch of code duplication in ParseTreePatternChris Lattner1-2/+2
by rotating it. llvm-svn: 99746
2010-03-24add plumbing for handling multiple result nodes Chris Lattner1-1/+1
in some more places. llvm-svn: 99366
2010-03-24bring sanity to EnforceVectorEltTypeChris Lattner1-1/+1
llvm-svn: 99354
2010-03-19make getOperandNum a static function (since it's just used by Chris Lattner1-5/+0
ApplyTypeConstraint) and make it handle multiple result nodes. llvm-svn: 99003
2010-03-19major surgery on tblgen: generalize TreePatternNodeChris Lattner1-19/+42
to maintain a list of types (one for each result of the node) instead of a single type. There are liberal hacks added to emulate the old behavior in various situations, but they can start disolving now. llvm-svn: 98999
2010-03-19make FillWithPossibleTypes take a predicate to filter types so that Chris Lattner1-3/+6
we don't blow the smallvector as often. No functionality change. llvm-svn: 98968