| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
| |
*** Bad machine code: Explicit definition marked as use ***
- function: test_cos
- basic block: BB#0 L.entry (0x7ff2a2024fd0)
- instruction: VSETLNi32 %D11, %D11<undef>, %R0, 0, pred:14, pred:%noreg, %Q5<imp-use,kill>, %Q5<imp-def>
- operand 0: %D11
llvm-svn: 162247
|
| |
|
|
|
|
|
| |
The test case ARM/2011-05-04-MultipleLandingPadSuccs.ll was creating
duplicate successor list entries.
llvm-svn: 162222
|
| |
|
|
|
|
|
| |
These nodes are no longer needed because the peephole pass can fold
CMOV+AND into ANDCC etc.
llvm-svn: 162179
|
| |
|
|
|
|
| |
class, but the base class methods aren't virtual so it just increased call overhead.
llvm-svn: 162178
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This turns common i1 patterns into predicated instructions:
(add (zext cc), x) -> (select cc (add x, 1), x)
(add (sext cc), x) -> (select cc (add x, -1), x)
For a function like:
unsigned f(unsigned s, int x) {
return s + (x>0);
}
We now produce:
cmp r1, #0
it gt
addgt.w r0, r0, #1
Instead of:
movs r2, #0
cmp r1, #0
it gt
movgt r2, #1
add r0, r2
llvm-svn: 162177
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add these transformations to the existing add/sub ones:
(and (select cc, -1, c), x) -> (select cc, x, (and, x, c))
(or (select cc, 0, c), x) -> (select cc, x, (or, x, c))
(xor (select cc, 0, c), x) -> (select cc, x, (xor, x, c))
The selects can then be transformed to a single predicated instruction
by peephole.
This transformation will make it possible to eliminate the ISD::CAND,
COR, and CXOR custom DAG nodes.
llvm-svn: 162176
|
| |
|
|
|
|
| |
Make sure the generic pattern is used.
llvm-svn: 162170
|
| |
|
|
|
|
|
|
|
| |
PEI can't handle the pseudo-instructions. This can be removed when the
pseudo-instructions are replaced by normal predicated instructions.
Fixes PR13628.
llvm-svn: 162130
|
| |
|
|
| |
llvm-svn: 162107
|
| |
|
|
| |
llvm-svn: 162094
|
| |
|
|
| |
llvm-svn: 162086
|
| |
|
|
|
|
|
|
|
|
| |
It is not my plan to duplicate the entire ARM instruction set with
predicated versions. We need a way of representing predicated
instructions in SSA form without requiring a separate opcode.
Then the pseudo-instructions can go away.
llvm-svn: 162061
|
| |
|
|
|
|
| |
Use the target independent select analysis hooks.
llvm-svn: 162060
|
| |
|
|
|
|
|
|
| |
Without fastcc support, the caller just falls through to CallingConv::C
for fastcc, but callee still uses fastcc, this inconsistency of calling
convention is a problem, and fastcc support can fix it.
llvm-svn: 162013
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|