| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
Make references to Inits const everywhere. This is the final step
before making them unique.
llvm-svn: 136485
|
|
|
|
|
|
|
|
| |
to for it to be an an anon namespace and be in a header.
Eliminate some extraenous uses of tie.
llvm-svn: 135669
|
|
|
|
|
|
|
|
|
|
| |
the Operand.
- The actual values are from the MCOI::OperandType enum.
- Teach tblgen to read it from the instruction definition.
- This is a better implementation of the hacks in edis.
llvm-svn: 135197
|
|
|
|
|
|
| |
in multiple buildbots.
llvm-svn: 134936
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
So users of a CGI don't have to look up the value directly from the original
Record; just like the rest of the convenience values in the class.
llvm-svn: 134576
|
|
|
|
|
|
|
|
|
|
| |
For now this is distinct from isCodeGenOnly, as code-gen-only
instructions can (and often do) still have encoding information
associated with them. Once we've migrated all of them over to true
pseudo-instructions that are lowered to real instructions prior to
the printer/emitter, we can remove isCodeGenOnly and just use isPseudo.
llvm-svn: 134539
|
|
|
|
|
|
|
|
| |
operands are logically equivalent to existing registers, but happen to be printed specially. For example, an instruciton that prints d0[0] instead of s0.
Patch by Jim Grosbach.
llvm-svn: 133940
|
|
|
|
|
|
|
| |
TableGen had diagnostic printers sprinkled about in a few places. Pull them
together into a single location in Error.cpp.
llvm-svn: 133568
|
|
|
|
|
|
|
|
|
|
|
| |
Make the Elements vector private and expose an ArrayRef through
getOrder() instead. getOrder will eventually provide multiple
user-specified allocation orders.
Use the sorted member set for member and subclass tests. Clean up a lot
of ad hoc searches.
llvm-svn: 133040
|
|
|
|
|
|
|
| |
nothing more than a bitcast.
- Teach tablegen to automatically infer "Bitcast" property.
llvm-svn: 127667
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When an operand class is defined with MIOperandInfo set to a list of
suboperands, the AsmMatcher has so far required that operand to also define
a custom ParserMatchClass, and InstAlias patterns have not been able to
set the individual suboperands separately. This patch removes both of those
restrictions. If a "compound" operand does not override the default
ParserMatchClass, then the AsmMatcher will now parse its suboperands
separately. If an InstAlias operand has the same class as the corresponding
compound operand, then it will be handled as before; but if that check fails,
TableGen will now try to match up a sequence of InstAlias operands with the
corresponding suboperands.
llvm-svn: 124314
|
|
|
|
| |
llvm-svn: 124271
|
|
|
|
| |
llvm-svn: 124270
|
|
|
|
| |
llvm-svn: 123934
|
|
|
|
| |
llvm-svn: 123932
|
|
|
|
|
|
|
| |
There should be no functional change from this, but I think it's simpler this
way.
llvm-svn: 123931
|
|
|
|
|
|
|
|
| |
This is needed to allow an InstAlias for an instruction with an "OptionalDef"
result register (like ARM's cc_out) where you want to set the optional register
to reg0.
llvm-svn: 123490
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and xor. The 32-bit move immediates can be hoisted out of loops by machine
LICM but the isel hacks were preventing them.
Instead, let peephole optimization pass recognize registers that are defined by
immediates and the ARM target hook will fold the immediates in.
Other changes include 1) do not fold and / xor into cmp to isel TST / TEQ
instructions if there are multiple uses. This happens when the 'and' is live
out, machine sink would have sinked the computation and that ends up pessimizing
code. The peephole pass would recognize situations where the 'and' can be
toggled to define CPSR and eliminate the comparison anyway.
2) Move peephole pass to after machine LICM, sink, and CSE to avoid blocking
important optimizations.
rdar://8663787, rdar://8241368
llvm-svn: 119548
|
|
|
|
|
|
| |
Switch the ARM backend to use 'let' instead of 'set' with this change.
llvm-svn: 119120
|
|
|
|
|
|
|
|
| |
fixed physical registers. Start moving fp comparison
aliases to the .td file (which default to using %st1 if
nothing is specified).
llvm-svn: 118352
|
|
|
|
|
|
|
| |
add fixed immediate values. Move the aad and aam aliases to
use this, and document it.
llvm-svn: 118350
|
|
|
|
|
|
|
|
| |
result instruction operand numbering matched the result pattern.
Fixing this allows us to move the xchg/test aliases to the .td file.
llvm-svn: 118334
|
|
|
|
|
|
| |
from c++ hacks to proper .td InstAlias definitions. Change them!
llvm-svn: 118330
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
operand list instead of the operand list redundantly declared on the alias
or instruction.
With this change, we finally remove the ins/outs list on the alias. Before:
def : InstAlias<(outs GR16:$dst), (ins GR8 :$src),
"movsx $src, $dst",
(MOVSX16rr8W GR16:$dst, GR8:$src)>;
After:
def : InstAlias<"movsx $src, $dst",
(MOVSX16rr8W GR16:$dst, GR8:$src)>;
This also makes the alias mechanism more general and powerful, which will
be exploited in subsequent patches.
llvm-svn: 118329
|
|
|
|
|
|
|
|
|
|
| |
(someinst GR16:$foo, GR32:$foo)
Reimplement BuildAliasOperandReference to be correctly
based on the names of operands in the result pattern,
instead of on the instruction operand definitions.
llvm-svn: 118328
|
|
|
|
| |
llvm-svn: 118327
|
|
|
|
|
|
| |
file instead of the asmmatcher.
llvm-svn: 118324
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
aliases installed and working. They now work when the
matched pattern and the result instruction have exactly
the same operand list.
This is now enough for us to define proper aliases for
movzx and movsx, implementing rdar://8017633 and PR7459.
Note that we do not accept instructions like:
movzx 0(%rsp), %rsi
GAS accepts this instruction, but it doesn't make any
sense because we don't know the size of the memory
operand. It could be 8/16/32 bits.
llvm-svn: 117901
|
|
|
|
|
|
| |
todo: the result field.
llvm-svn: 117894
|
|
|
|
|
|
| |
CodeGenInstruction into its own helper class. No functionality change.
llvm-svn: 117893
|
|
|
|
| |
llvm-svn: 117892
|
|
|
|
|
|
| |
simplify CodeGenInstruction. No functionality change.
llvm-svn: 117891
|
|
|
|
|
|
|
|
| |
CodeGenInstruction::FlattenAsmStringVariants method. Use it
to simplify the code in AsmWriterInst, which now no longer
needs to worry about variants.
llvm-svn: 117886
|
|
|
|
|
|
|
|
| |
operand values. This is useful for operands which require additional trickery
to encode into the instruction. For example, the ARM shifted immediate and
shifted register operands.
llvm-svn: 116353
|
|
|
|
|
|
|
| |
try to match them by name first. If there is no by-name match, fall back to
assuming they are in order (this was the previous behavior).
llvm-svn: 116211
|
|
|
|
|
|
|
|
| |
instructions. After further
reflection, this isn't going to achieve the purpose I intended it for. Back to the drawing board!
llvm-svn: 114710
|
|
|
|
|
|
|
|
| |
conditional move.
Not intended functionality change, as nothing uses this yet.
llvm-svn: 114702
|
|
|
|
|
|
| |
useful after all.
llvm-svn: 110531
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
need the Compare flag after all.
--- Reverse-merging r109901 into '.':
U include/llvm/Target/TargetInstrDesc.h
U include/llvm/Target/Target.td
U utils/TableGen/InstrInfoEmitter.cpp
U utils/TableGen/CodeGenInstruction.cpp
U utils/TableGen/CodeGenInstruction.h
llvm-svn: 110424
|
|
|
|
|
|
|
| |
later to identify and possibly remove superfluous compare instructions -- those
that are testing for and setting a status flag that should already be set.
llvm-svn: 109901
|
|
|
|
| |
llvm-svn: 106470
|
|
|
|
|
|
|
|
|
| |
from two places in CodeGenDAGPatterns.cpp, and
use it in DAGISelMatcherGen.cpp instead of using
an incorrect predicate that happened to get lucky
on our current targets.
llvm-svn: 99726
|
|
|
|
| |
llvm-svn: 98879
|
|
|
|
| |
llvm-svn: 98870
|
|
|
|
|
|
| |
instruction. Instructions must use 'ins' and 'outs' now.
llvm-svn: 98868
|
|
|
|
|
|
| |
Add checking that the input/output operand list in spelled right.
llvm-svn: 98865
|
|
|
|
| |
llvm-svn: 97348
|
|
|
|
|
|
|
|
|
| |
for representing constraint info semantically instead of
as a c expression that will be blatted out to the .inc
file. Fix X86RecognizableInstr to use this instead of
parsing C code :).
llvm-svn: 95753
|
|
|
|
|
|
|
|
|
| |
- getToken is modeled after StringRef::split but it can split on multiple
separator chars and skips leading seperators.
- SplitString is a StringRef::split variant for more than 2 elements with the
same behaviour as getToken.
llvm-svn: 93161
|