Bob Wilson
cd70496ad1
Add -mcpu=cortex-a9-mp. It's cortex-a9 with MP extension. rdar://8648637.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129774 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 18:11:52 +00:00
Bob Wilson
5dde893c2b
Avoid some 's' 16-bit instruction which partially update CPSR
...
(and add false dependency) when it isn't dependent on last CPSR defining
instruction. rdar://8928208
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129773 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 18:11:49 +00:00
Bob Wilson
f6a4d3c2f3
Avoid write-after-write issue hazards for Cortex-A9.
...
Add a avoidWriteAfterWrite() target hook to identify register classes that
suffer from write-after-write hazards. For those register classes, try to avoid
writing the same register in two consecutive instructions.
This is currently disabled by default. We should not spill to avoid hazards!
The command line flag -avoid-waw-hazard can be used to enable waw avoidance.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129772 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 18:11:45 +00:00
Bob Wilson
b34d837397
Some single-precision VFP instructions can execute in either the VPF or Neon
...
pipelines, at least on Cortex-A9.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129771 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 18:11:38 +00:00
Bob Wilson
11334dbd66
Improvements for the Cortex-A9 scheduling itineraries.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129770 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 18:11:36 +00:00
Eli Friedman
3762046dbf
Add support for FastISel'ing varargs calls.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129765 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 17:22:22 +00:00
Jakob Stoklund Olesen
430721cff8
Force the greedy register allocator to be linked alongside linear scan.
...
This means that the new register allocator can be used with 'clang -mllvm -regalloc=greedy'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129764 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 17:17:58 +00:00
Eli Friedman
37d38bfbbf
SelectBasicBlock is rather slow even when it doesn't do anything; skip the
...
unnecessary work where possible.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129763 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 17:01:08 +00:00
Stuart Hastings
fc52163a45
Support nested CALLSEQ_BEGIN/END; necessary for ARM byval support. <rdar://problem/7662569>
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129761 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 16:16:58 +00:00
Jay Foad
1a0390253b
Trivial simplification.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129759 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 15:23:29 +00:00
Jakob Stoklund Olesen
ea70a06fa7
Tighten test case a bit.
...
Ideally, we would match an S-register to its containing D-register, but that
requires arithmetic (divide by 2).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129756 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 06:14:45 +00:00
Chris Lattner
832e494359
Implement support for x86 fastisel of small fixed-sized memcpys, which are generated
...
en-mass for C++ PODs. On my c++ test file, this cuts the fast isel rejects by 10x
and shrinks the generated .s file by 5%
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129755 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 05:52:03 +00:00
Chris Lattner
ff009ad1e1
tidy up
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129753 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 05:15:59 +00:00
Chris Lattner
b44101c140
Implement support for fast isel of calls of i1 arguments, even though they are illegal,
...
when they are a truncate from something else. This eliminates fully half of all the
fastisel rejections on a test c++ file I'm working with, which should make a substantial
improvement for -O0 compile of c++ code.
This fixed rdar://9297003 - fast isel bails out on all functions taking bools
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129752 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 05:09:50 +00:00
Chris Lattner
e03b8d3162
Handle i1/i8/i16 constant integer arguments to calls by prepromoting them.
...
Before we would bail out on i1 arguments all together, now we just bail on
non-constant ones. Also, we used to emit extraneous code. e.g. test12 was:
movb $0, %al
movzbl %al, %edi
callq _test12
and test13 was:
movb $0, %al
xorl %edi, %edi
movb %al, 7(%rsp)
callq _test13f
Now we get:
movl $0, %edi
callq _test12
and:
movl $0, %edi
callq _test13f
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129751 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 04:42:38 +00:00
Chris Lattner
c76d121807
be layout aware, to produce:
...
testb $1, %al
je LBB0_2
## BB#1: ## %if.then
movb $0, %al
instead of:
testb $1, %al
jne LBB0_1
jmp LBB0_2
LBB0_1: ## %if.then
movb $0, %al
how 'bout that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129749 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 04:26:32 +00:00
Chris Lattner
90cb88a9b4
fix rdar://9297006 - fast isel bails out on trunc to i1 -> bools cry,
...
a common cause of fast isel rejects on c++ code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129748 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 04:22:17 +00:00
Evan Cheng
75b41f1540
Change A9 scheduling itineraries VLD* / VST* entries default to "aligned". That
...
is, it assumes addresses are 64-bit aligned (which should be the more common
case). If the alignment is found not to be aligned, then getOperandLatency()
would adjust the operand latency computation by one to compensate for it.
rdar://9294833
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129742 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 01:21:49 +00:00
Jakob Stoklund Olesen
775c3e5824
Make tests register allocation independent again.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129739 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 00:14:43 +00:00
Evan Cheng
b58a340fa2
Do not lose mem_operands while lowering VLD / VST intrinsics.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129738 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 00:04:03 +00:00
Francois Pichet
05a5ff1f00
Disable warning C4181: "qualifier applied to reference type; ignored"
...
This was causing a flooding of warnings with MSVC 2008. This warning was removed in MSVC 2010.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129737 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-19 00:03:17 +00:00
NAKAMURA Takumi
05d0265fef
docs: Use <Hn> as Heading elements instead of <DIV class="doc_foo">.
...
H1 ... doc_title
H2 ... doc_section
H3 ... doc_subsection
H4 ... doc_subsubsection
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129736 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 23:59:50 +00:00
Devang Patel
1f48a95ccb
Use ArrayRef variants.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129735 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 23:51:03 +00:00
Ted Kremenek
1da29dd3f8
Add BumpPtrAllocator::getTotalMemory() to allow clients to query how much memory a BumpPtrAllocator allocated.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129727 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 22:44:46 +00:00
Devang Patel
1fc7a24c25
Remove test to check line numbers. There are other numerous tests in our test harness to check line number information.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129725 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 22:27:20 +00:00
Jim Grosbach
0d062c1e14
Trim a few unneeded includes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129723 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 21:35:54 +00:00
Eric Christopher
721ef66d17
Invert the meaning of printAliasInstr's return value. It now returns
...
true on success and false on failure. Update callers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129722 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 21:28:11 +00:00
Eli Friedman
6dda916358
Simplify declarations slightly by using typedefs.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129720 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 21:21:37 +00:00
Eli Friedman
50ebe53353
malloc elimination: it's a bad idea to use raw_svector_ostream on a
...
small heap-allocated SmallString because it unconditionally forces a malloc.
(Revised version of r129688, with the necessary flush() call.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129716 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 20:54:46 +00:00
Devang Patel
3f3bf9387b
Reduce clutter in asm output. Do not emit source location as comment for each instruction.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129715 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 20:26:49 +00:00
Jakob Stoklund Olesen
5d5ef4a886
Handle spilling around an instruction that has an early-clobber re-definition of
...
the spilled register.
This is quite common on ARM now that some stores have early-clobber defines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129714 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 20:23:27 +00:00
Sean Callanan
f6d9109124
Small fix to the ARM AsmParser to ensure that a
...
superclass variable is instantiated properly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129713 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 20:20:44 +00:00
Eric Christopher
d574bb5a6e
Fix a bug where we were counting the alias sets as completely used
...
registers for fast allocation a different way. This has us updating
used registers only when we're using that exact register.
Fixes rdar://9207598
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129711 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 19:26:25 +00:00
Chandler Carruth
3b55a372d4
Mark some functions as used which are used within debug-only code. This
...
silences Clang's -Wunused-function when building in release mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129709 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 18:49:44 +00:00
Owen Anderson
57557155c9
Enhance the fixed-length disassembler to support the callbacks necessary for symbolic disassembly.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129708 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 18:42:26 +00:00
Anders Carlsson
43c361ff2e
Make the empty StructType::get overload use an empty ArrayRef.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129696 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 14:02:06 +00:00
Chris Lattner
f051c1a29d
while we're at it, handle 'sdiv exact' of a power of 2 also,
...
this fixes a few rejects on c++ iterator loops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129694 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 07:00:40 +00:00
Chris Lattner
090ca9108b
fix rdar://9297011 - udiv by power of two causing fast-isel rejects
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129693 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 06:55:51 +00:00
Chris Lattner
202a7a1e3f
Add a new bit that ImmLeaf's can opt into, which allows them to duck out of
...
the generated FastISel. X86 doesn't need to generate code to match ADD16ri8
since ADD16ri will do just fine. This is a small codesize win in the generated
instruction selector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129692 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 06:36:55 +00:00
Chris Lattner
1518afddea
Implement major new fastisel functionality: the matcher can now handle 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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129691 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 06:22:33 +00:00
Chris Lattner
1023643d50
relax this test to just check that the lock prefix is encoded properly,
...
and to not rely on the register allocator's arbitrary operand choices.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129690 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 06:15:35 +00:00
Eli Friedman
205132e904
Revert r129688; it's breaking buildbots.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129689 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 05:54:54 +00:00
Eli Friedman
24b9654f12
More malloc elimination: it's a bad idea to use raw_svector_ostream on a
...
small heap-allocated SmallString because it unconditionally forces a malloc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129688 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 05:38:58 +00:00
Eli Friedman
f4387d9afb
Make the StringMaps attached to MCContext use the MCContext's allocator;
...
reduces the number of calls to malloc().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129687 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 05:02:31 +00:00
Anders Carlsson
8aa0f9042d
Use an empty ArrayRef instead of an empty std::vector for the Function::get overload that takes no parameters.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129686 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 04:55:06 +00:00
NAKAMURA Takumi
06c6d9aeb0
docs: Redefine Heading elements as below;
...
H1 ... Title (and might be Chapter in future)
H2 ... Section
H3 ... Subsection
H4 ... Sub-subsection
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129683 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-18 01:17:51 +00:00
Chris Lattner
9bfd5f3b22
introduce a new OpKind abstraction which wraps up operand flavors in a tidy little wrapper.
...
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129680 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-17 23:29:05 +00:00
Chris Lattner
a90dbc133f
change OperandsSignature to use SmallVector<char> instead of std::vector<string>
...
since the strings are always exactly one character, and there are usually only 2-3 operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129678 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-17 22:24:13 +00:00
Chris Lattner
4447d6506c
since the VT is fixed for a ImmLeaf, there is no reason to expose it to the matching code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129677 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-17 22:17:27 +00:00
Chris Lattner
5662bc959a
switch the rest of the x86 immediate patterns over to ImmLeaf,
...
simplifying them and exposing more information to tblgen. It would be nice
if other target authors adopted this as well, particularly arm since it has fastisel.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129676 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-17 22:12:55 +00:00