| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The ARM select instructions are just predicated moves. If the select is
the only use of an operand, the instruction defining the operand can be
predicated instead, saving one instruction and decreasing register
pressure.
This implementation can turn AND/ORR/EOR instructions into their
corresponding ANDCC/ORRCC/EORCC variants. Ideally, we should be able to
predicate any instruction, but we don't yet support predicated
instructions in SSA form.
llvm-svn: 161994
|
| |
|
|
|
|
| |
unaligned access. rdar://12091029
llvm-svn: 161962
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When predicating this instruction:
Rd = ADD Rn, Rm
We need an extra operand to represent the value given to Rd when the
predicate is false:
Rd = ADDCC Rfalse, Rn, Rm, pred
The Rd and Rfalse operands are different registers while in SSA form.
Rfalse is tied to Rd to make sure they get the same register during
register allocation.
Previously, Rd and Rn were tied, but that is not required.
Compare to MOVCC:
Rd = MOVCC Rfalse, Rtrue, pred
llvm-svn: 161955
|
| |
|
|
|
|
|
|
| |
reversed. This leads to wrong codegen for float-to-half conversion
intrinsics which are used to support storage-only fp16 type.
NEON variants of same instructions are fine.
llvm-svn: 161907
|
| |
|
|
| |
llvm-svn: 161906
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Refactor the TableGen'erated fixed length disassemblmer to use a
table-driven state machine rather than a massive set of nested
switch() statements.
As a result, the ARM Disassembler (ARMDisassembler.cpp) builds much more
quickly and generates a smaller end result. For a Release+Asserts build on
a 16GB 3.4GHz i7 iMac w/ SSD:
Time to compile at -O2 (averaged w/ hot caches):
Previous: 35.5s
New: 8.9s
TEXT size:
Previous: 447,251
New: 297,661
Builds in 25% of the time previously required and generates code 66% of
the size.
Execution time of the disassembler is only slightly slower (7% disassembling
10 million ARM instructions, 19.6s vs 21.0s). The new implementation has
not yet been tuned, however, so the performance should almost certainly
be recoverable should it become a concern.
llvm-svn: 161888
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It never does anything when running 'make check', and it get's in the
way of updating live intervals in 2-addr.
The hook was originally added to help form IT blocks in Thumb2 code
before register allocation, but the pass ordering has changed since
then, and we run if-conversion after register allocation now.
When the MI scheduler is enabled, there will be no less than two
schedulers between 2-addr and Thumb2ITBlockPass, so this hook is
unlikely to help anything.
llvm-svn: 161794
|
| |
|
|
|
|
|
|
| |
This change is to be enabled in clang.
rdar://9877866
llvm-svn: 161789
|
| |
|
|
|
|
|
|
| |
ISDNode has more than one user.
rdar://11876519
llvm-svn: 161775
|
| |
|
|
|
|
| |
Patch by Weiming Zhao.
llvm-svn: 161768
|
| |
|
|
|
|
|
|
| |
Previously, we used VLD1.32 in all cases, however there are both 16 and 64-bit
accesses being selected, so we need to use an appropriate width load in those
cases.
llvm-svn: 161748
|
| |
|
|
|
|
|
|
|
| |
architecture
It broke MultiSource/Applications/JM/ldecod/ldecod on armv7 thumb O0 g and armv7
thumb O3.
llvm-svn: 161736
|
| |
|
|
|
|
| |
getSimpleVT can be removed.
llvm-svn: 161735
|
| |
|
|
|
|
|
|
|
| |
This change is to be enabled in clang.
rdar://9877866
PR://13350
llvm-svn: 161693
|
| |
|
|
|
|
|
|
|
|
|
| |
the register info for getEncodingValue. This builds on the
small patch of yesterday to set HWEncoding in the register
file.
One (deprecated) use was turned into a hard number to avoid
needing register info in the old JIT.
llvm-svn: 161628
|
| |
|
|
|
|
|
|
|
|
|
| |
This patch corrects the definition of umlal/smlal instructions and adds support
for matching them to the ARM dag combiner.
Bug 12213
Patch by Yin Ma!
llvm-svn: 161581
|
| |
|
|
| |
llvm-svn: 161564
|
| |
|
|
|
|
|
| |
This replaces an existing subtarget hook on ARM and allows standard
CodeGen passes to potentially use the property.
llvm-svn: 161471
|
| |
|
|
| |
llvm-svn: 161469
|
| |
|
|
| |
llvm-svn: 161301
|
| |
|
|
|
|
|
|
|
| |
stuff
(this corresponds by spilling/reloading regs in DTriple / DQuad reg classes).
No testcase, found by inspection.
llvm-svn: 161300
|
| |
|
|
|
|
|
|
| |
classes, which
were missed for no reason. This fixes PR13377
llvm-svn: 161299
|
| |
|
|
|
|
|
|
|
|
| |
Fast isel doesn't currently have support for translating builtin function
calls to target instructions. For embedded environments where the library
functions are not available, this is a matter of correctness and not
just optimization. Most of this patch is just arranging to make the
TargetLibraryInfo available in fast isel. <rdar://problem/12008746>
llvm-svn: 161232
|
| |
|
|
| |
llvm-svn: 161230
|
| |
|
|
|
|
|
|
| |
but somehow managed to be dropped later.
Patch by Karel Gardas.
llvm-svn: 161226
|
| |
|
|
| |
llvm-svn: 161222
|
| |
|
|
| |
llvm-svn: 161220
|
| |
|
|
|
|
|
|
| |
Now that TableGen supports references to NAME w/o it being explicitly
referenced in the definition's own name, use that to simplify
assembly InstAlias definitions in multiclasses.
llvm-svn: 161218
|
| |
|
|
| |
llvm-svn: 161163
|
| |
|
|
|
|
| |
index issue.
llvm-svn: 161162
|
| |
|
|
| |
llvm-svn: 161161
|
| |
|
|
| |
llvm-svn: 161159
|
| |
|
|
| |
llvm-svn: 161134
|
| |
|
|
| |
llvm-svn: 161133
|
| |
|
|
| |
llvm-svn: 161132
|
| |
|
|
|
|
|
|
|
| |
where the other_half of the movt and movw relocation entries needs to get set
and only with the 16 bits of the other half.
rdar://10038370
llvm-svn: 160978
|
| |
|
|
|
|
|
|
|
| |
Before accessing a node as a ConstandSDNode, make sure it actually is one.
No testcase of non-trivial size.
rdar://11948669
llvm-svn: 160735
|
| |
|
|
| |
llvm-svn: 160621
|
| |
|
|
| |
llvm-svn: 160500
|
| |
|
|
|
|
| |
Based on Evan's suggestion without a commitable test.
llvm-svn: 160441
|
| |
|
|
| |
llvm-svn: 160440
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
intrinsics. The second instruction(s) to be handled are the vector versions
of count set bits (ctpop).
The changes here are to clang so that it generates a target independent
vector ctpop when it sees an ARM dependent vector bits set count. The changes
in llvm are to match the target independent vector ctpop and in
VMCore/AutoUpgrade.cpp to update any existing bc files containing ARM
dependent vector pop counts with target-independent ctpops. There are also
changes to an existing test case in llvm for ARM vector count instructions and
to a test for the bitcode upgrade.
<rdar://problem/11892519>
There is deliberately no test for the change to clang, as so far as I know, no
consensus has been reached regarding how to test neon instructions in clang;
q.v. <rdar://problem/8762292>
llvm-svn: 160410
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
intrinsics with target-indepdent intrinsics. The first instruction(s) to be
handled are the vector versions of count leading zeros (ctlz).
The changes here are to clang so that it generates a target independent
vector ctlz when it sees an ARM dependent vector ctlz. The changes in llvm
are to match the target independent vector ctlz and in VMCore/AutoUpgrade.cpp
to update any existing bc files containing ARM dependent vector ctlzs with
target-independent ctlzs. There are also changes to an existing test case in
llvm for ARM vector count instructions and a new test for the bitcode upgrade.
<rdar://problem/11831778>
There is deliberately no test for the change to clang, as so far as I know, no
consensus has been reached regarding how to test neon instructions in clang;
q.v. <rdar://problem/8762292>
llvm-svn: 160200
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Function argument registers are added to the call SDNode, but
InstrEmitter now knows how to make those operands implicit, and the call
instruction doesn't have to be variadic.
Explicit register operands should only be those that are encoded in the
instruction, implicit register operands are for extra dependencies like
call argument and return values.
llvm-svn: 160188
|
| |
|
|
| |
llvm-svn: 160093
|
| |
|
|
|
|
|
|
| |
It is safe if CPSR is killed or re-defined.
When we are done with the basic block, check whether CPSR is live-out.
Do not optimize away cmp if CPSR is live-out.
llvm-svn: 160090
|
| |
|
|
|
|
| |
single-precision resiters) (and do it properly this time!
llvm-svn: 159989
|
| |
|
|
|
|
|
|
|
| |
Some NEON instructions want to match against normal SDNodes for some
operand types and Intrinsics for others. For example, CTLZ. To enable this,
switch from explicitly requiring Intrinsic on the class templates to using
SDPatternOperator instead.
llvm-svn: 159974
|
| |
|
|
| |
llvm-svn: 159960
|
| |
|
|
| |
llvm-svn: 159948
|