Jim Grosbach [Mon, 18 Apr 2011 21:35:54 +0000 (21:35 +0000)]
Trim a few unneeded includes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129723
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Mon, 18 Apr 2011 21:28:11 +0000 (21:28 +0000)]
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
Eli Friedman [Mon, 18 Apr 2011 21:21:37 +0000 (21:21 +0000)]
Simplify declarations slightly by using typedefs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129720
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Mon, 18 Apr 2011 20:54:46 +0000 (20:54 +0000)]
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
Devang Patel [Mon, 18 Apr 2011 20:26:49 +0000 (20:26 +0000)]
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
Jakob Stoklund Olesen [Mon, 18 Apr 2011 20:23:27 +0000 (20:23 +0000)]
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
Sean Callanan [Mon, 18 Apr 2011 20:20:44 +0000 (20:20 +0000)]
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
Eric Christopher [Mon, 18 Apr 2011 19:26:25 +0000 (19:26 +0000)]
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
Chandler Carruth [Mon, 18 Apr 2011 18:49:44 +0000 (18:49 +0000)]
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
Owen Anderson [Mon, 18 Apr 2011 18:42:26 +0000 (18:42 +0000)]
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
Anders Carlsson [Mon, 18 Apr 2011 14:02:06 +0000 (14:02 +0000)]
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
Chris Lattner [Mon, 18 Apr 2011 07:00:40 +0000 (07:00 +0000)]
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
Chris Lattner [Mon, 18 Apr 2011 06:55:51 +0000 (06:55 +0000)]
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
Chris Lattner [Mon, 18 Apr 2011 06:36:55 +0000 (06:36 +0000)]
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
Chris Lattner [Mon, 18 Apr 2011 06:22:33 +0000 (06:22 +0000)]
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
Chris Lattner [Mon, 18 Apr 2011 06:15:35 +0000 (06:15 +0000)]
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
Eli Friedman [Mon, 18 Apr 2011 05:54:54 +0000 (05:54 +0000)]
Revert r129688; it's breaking buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129689
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Mon, 18 Apr 2011 05:38:58 +0000 (05:38 +0000)]
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
Eli Friedman [Mon, 18 Apr 2011 05:02:31 +0000 (05:02 +0000)]
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
Anders Carlsson [Mon, 18 Apr 2011 04:55:06 +0000 (04:55 +0000)]
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
NAKAMURA Takumi [Mon, 18 Apr 2011 01:17:51 +0000 (01:17 +0000)]
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
Chris Lattner [Sun, 17 Apr 2011 23:29:05 +0000 (23:29 +0000)]
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
Chris Lattner [Sun, 17 Apr 2011 22:24:13 +0000 (22:24 +0000)]
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
Chris Lattner [Sun, 17 Apr 2011 22:17:27 +0000 (22:17 +0000)]
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
Chris Lattner [Sun, 17 Apr 2011 22:12:55 +0000 (22:12 +0000)]
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
Chris Lattner [Sun, 17 Apr 2011 22:05:17 +0000 (22:05 +0000)]
now that predicates have a decent abstraction layer on them, introduce a new
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129675
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 21:38:24 +0000 (21:38 +0000)]
Rework our internal representation of node predicates to expose more
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129670
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 21:36:19 +0000 (21:36 +0000)]
remove some debugging code I added.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129668
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 20:23:29 +0000 (20:23 +0000)]
1. merge fast-isel-shift-imm.ll into fast-isel-x86-64.ll
2. implement rdar://
9289501 - fast isel should fold trivial multiplies to shifts
3. teach tblgen to handle shift immediates that are different sizes than the
shifted operands, eliminating some code from the X86 fast isel backend.
4. Have FastISel::SelectBinaryOp use (the poorly named) FastEmit_ri_ function
instead of FastEmit_ri to simplify code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129666
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 17:47:38 +0000 (17:47 +0000)]
fix an x86 fast isel issue where we'd completely give up on folding an address
when we have a global variable base an an index. Instead, just give up on
folding the global variable.
Before we'd geenrate:
_test: ## @test
## BB#0:
movq _rtx_length@GOTPCREL(%rip), %rax
leaq (%rax), %rax
addq %rdi, %rax
movzbl (%rax), %eax
ret
now we generate:
_test: ## @test
## BB#0:
movq _rtx_length@GOTPCREL(%rip), %rax
movzbl (%rax,%rdi), %eax
ret
The difference is even more significant when there is a scale
involved.
This fixes rdar://
9289558 - total fail with addr mode formation at -O0/x86-64
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129664
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 17:12:08 +0000 (17:12 +0000)]
fix an oversight which caused us to compile the testcase (and other
less trivial things) into a dummy lea. Before we generated:
_test: ## @test
movq _G@GOTPCREL(%rip), %rax
leaq (%rax), %rax
ret
now we produce:
_test: ## @test
movq _G@GOTPCREL(%rip), %rax
ret
This is part of rdar://
9289558
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129662
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 17:05:12 +0000 (17:05 +0000)]
tidy up and reduce indentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129661
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 06:35:44 +0000 (06:35 +0000)]
Fix rdar://
9289512 - not folding load into compare at -O0
The basic issue here is that bottom-up isel is matching the branch
and compare, and was failing to fold the load into the branch/compare
combo. Fixing this (by allowing folding into any instruction of a
sequence that is selected) allows us to produce things like:
cmpb $0, 52(%rax)
je LBB4_2
instead of:
movb 52(%rax), %cl
cmpb $0, %cl
je LBB4_2
This makes the generated -O0 code run a bit faster, but also speeds up
compile time by putting less pressure on the register allocator and
generating less code.
This was one of the biggest classes of missing load folding. Implementing
this shrinks 176.gcc's c-decl.s (as a random example) by about 4% in (verbose-asm)
line count.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129656
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 06:03:19 +0000 (06:03 +0000)]
split a complex predicate out to a helper function. Simplify two for loops,
which don't need to check for falling off the end of a block *and* end of phi
nodes, since terminators are never phis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129655
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Sun, 17 Apr 2011 02:36:27 +0000 (02:36 +0000)]
Remove working entry from README.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129654
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 17 Apr 2011 01:16:47 +0000 (01:16 +0000)]
fix rdar://
9289583 - fast isel should handle non-canonical commutative binops
allowing us to fold the immediate into the 'and' in this case:
int test1(int i) {
return 8&i;
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129653
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Sat, 16 Apr 2011 23:25:34 +0000 (23:25 +0000)]
PR9055: extend the fix to PR4050 (r70179) to apply to zext and anyext.
Returning a new node makes the code try to replace the old node, which
in the included testcase is killed by CSE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129650
91177308-0d34-0410-b5e6-
96231b3b80d8
Frits van Bommel [Sat, 16 Apr 2011 14:32:34 +0000 (14:32 +0000)]
Rename a misleadingly-named variable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129644
91177308-0d34-0410-b5e6-
96231b3b80d8
Frits van Bommel [Sat, 16 Apr 2011 14:31:50 +0000 (14:31 +0000)]
Add test cases for Jay's r129641 and fix a 32-bit-centric testcase in a file with a 64-bit datalayout.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129643
91177308-0d34-0410-b5e6-
96231b3b80d8
Francois Pichet [Sat, 16 Apr 2011 14:20:39 +0000 (14:20 +0000)]
Unbreak the MSVC 2010 build.
For further information on this particular issue see: http://connect.microsoft.com/VisualStudio/feedback/details/520043/error-converting-from-null-to-a-pointer-type-in-std-pair
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129642
91177308-0d34-0410-b5e6-
96231b3b80d8
Jay Foad [Sat, 16 Apr 2011 14:17:37 +0000 (14:17 +0000)]
Fix bug when checking phi operands in InstCombiner::visitPHINode(),
found by code inspection.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129641
91177308-0d34-0410-b5e6-
96231b3b80d8
Francois Pichet [Sat, 16 Apr 2011 13:59:23 +0000 (13:59 +0000)]
MSVC needs the return 0 to compile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129640
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 16 Apr 2011 10:30:47 +0000 (10:30 +0000)]
Remove unused variable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129639
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 16 Apr 2011 10:25:32 +0000 (10:25 +0000)]
Write out uint64_t as i{0..32},i{33..64} instead of i{0..32},0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129638
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sat, 16 Apr 2011 04:25:36 +0000 (04:25 +0000)]
Don't use C++ comments in C code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129637
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 16 Apr 2011 03:51:21 +0000 (03:51 +0000)]
Put each personality function in a section. This fixes the gnu ld warning:
error in foo.o; no .eh_frame_hdr table will be created.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129635
91177308-0d34-0410-b5e6-
96231b3b80d8
Stuart Hastings [Sat, 16 Apr 2011 03:31:26 +0000 (03:31 +0000)]
Correct result when a branch condition is live across a block
boundary. <rdar://problem/
8933028>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129634
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sat, 16 Apr 2011 03:08:26 +0000 (03:08 +0000)]
Fix divmod libcall lowering. Convert to {S|U}DIVREM first and then expand the node to a libcall. rdar://
9280991
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129633
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 16 Apr 2011 02:06:46 +0000 (02:06 +0000)]
Fix cmake build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129632
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sat, 16 Apr 2011 02:05:18 +0000 (02:05 +0000)]
Move the re-stemming function up top and use it where it's currently inlined.
Break the arc-profile code out to a function like the notes emission code is,
and reorder the functions in the file.
The only functionality change is that we no longer modify the Module when the
Module has no debug info to use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129631
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sat, 16 Apr 2011 01:20:23 +0000 (01:20 +0000)]
Rename LineProfiling to GCOVProfiling to more accurately represent what it
does. Also mostly implement it. Still a work-in-progress, but generates legal
output on crafted test cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129630
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Sat, 16 Apr 2011 00:11:51 +0000 (00:11 +0000)]
Introduce support to encode Objective-C property information in debugging information generated for an interface.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129624
91177308-0d34-0410-b5e6-
96231b3b80d8
Johnny Chen [Fri, 15 Apr 2011 22:52:15 +0000 (22:52 +0000)]
Thumb2 BFC was insufficiently encoded.
rdar://problem/
9292717
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129619
91177308-0d34-0410-b5e6-
96231b3b80d8
Johnny Chen [Fri, 15 Apr 2011 22:49:08 +0000 (22:49 +0000)]
A8.6.315 VLD3 (single 3-element structure to all lanes)
The a bit must be encoded as 0.
rdar://problem/
9292625
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129618
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Fri, 15 Apr 2011 22:23:09 +0000 (22:23 +0000)]
Re-enable test o32_cc_vararg.ll.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129616
91177308-0d34-0410-b5e6-
96231b3b80d8
Douglas Gregor [Fri, 15 Apr 2011 22:04:07 +0000 (22:04 +0000)]
Initial work to improve documentation for Clang's diagnostics, from Matthieu Monrocq
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129613
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Fri, 15 Apr 2011 21:51:11 +0000 (21:51 +0000)]
Reverse unnecessary changes made in r129606 and r129608. There is no change in functionality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129612
91177308-0d34-0410-b5e6-
96231b3b80d8
Cameron Zwarich [Fri, 15 Apr 2011 21:24:38 +0000 (21:24 +0000)]
Add ORR and EOR to the CMP peephole optimizer. It's hard to get isel to generate
a case involving EOR, so I only added a test for ORR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129610
91177308-0d34-0410-b5e6-
96231b3b80d8
Douglas Gregor [Fri, 15 Apr 2011 21:21:31 +0000 (21:21 +0000)]
Fix some broken links, from Matthieu Monrocq
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129609
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Fri, 15 Apr 2011 21:06:38 +0000 (21:06 +0000)]
Fix lines that exceed 80 columns. There is no change in functionality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129608
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 15 Apr 2011 21:06:27 +0000 (21:06 +0000)]
Add this test back for Darwin.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129607
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Fri, 15 Apr 2011 21:00:26 +0000 (21:00 +0000)]
Fix lines that have incorrect indentation or exceed 80 columns. There is no change in functionality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129606
91177308-0d34-0410-b5e6-
96231b3b80d8
Cameron Zwarich [Fri, 15 Apr 2011 20:45:00 +0000 (20:45 +0000)]
The AND instruction leaves the V flag unmodified, so it falls victim to the same
problem as all of the other instructions we fold with CMPs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129602
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 15 Apr 2011 20:34:45 +0000 (20:34 +0000)]
Fix cmake build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129601
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 15 Apr 2011 20:32:03 +0000 (20:32 +0000)]
Some refactoring suggested by Anton Korobeynikov.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129600
91177308-0d34-0410-b5e6-
96231b3b80d8
Cameron Zwarich [Fri, 15 Apr 2011 20:28:28 +0000 (20:28 +0000)]
Add missing register forms of instructions to the ARM CMP-folding code. This
fixes <rdar://problem/
9287901>.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129599
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Fri, 15 Apr 2011 19:52:08 +0000 (19:52 +0000)]
Add pass that expands pseudo instructions into target instructions after register allocation. Define pseudos that get expanded into mtc1 or mfc1 instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129594
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 15 Apr 2011 19:35:46 +0000 (19:35 +0000)]
Increase SubtargetFeatureKV Value and Implies fields to 64 bits since some targets are getting very close to 32 subtarget features. Also teach tablegen to error when there are more than 64 features to guard against undefined behavior. rdar://
9282332
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129590
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Fri, 15 Apr 2011 19:25:31 +0000 (19:25 +0000)]
Add encoding tests for flds/filds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129589
91177308-0d34-0410-b5e6-
96231b3b80d8
Lenny Maiorani [Fri, 15 Apr 2011 17:56:50 +0000 (17:56 +0000)]
Implements StringRef::compare with bounds. It is behaves similarly to strncmp(). Unit tests also included.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129582
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakob Stoklund Olesen [Fri, 15 Apr 2011 17:24:49 +0000 (17:24 +0000)]
Teach the SplitKit blitter to handle multiply defined values as well.
The transferValues() function can now handle both singly and multiply defined
values, as long as the resulting live range is known. Only rematerialized values
have their live range recomputed by extendRange().
The updateSSA() function can now insert PHI values in bulk across multiple
values in multiple target registers in one pass. The list of blocks received
from transferValues() is in layout order which seems to work well for the
iterative algorithm. Blocks from extendRange() are still in reverse BFS order,
but this function is used so rarely now that it doesn't matter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129580
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakob Stoklund Olesen [Fri, 15 Apr 2011 17:24:46 +0000 (17:24 +0000)]
Remember to set flag.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129579
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 15 Apr 2011 15:11:06 +0000 (15:11 +0000)]
Add 129518 back with a fix for when we are producing eh just because of debug info.
Change ELF systems to use CFI for producing the EH tables. This reduces the
size of the clang binary in Debug builds from 690MB to 679MB.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129571
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 15 Apr 2011 05:18:47 +0000 (05:18 +0000)]
Fix a ton of comment typos found by codespell. Patch by
Luis Felipe Strano Moraes!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129558
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Fri, 15 Apr 2011 03:35:57 +0000 (03:35 +0000)]
Revert r129518, "Change ELF systems to use CFI for producing the EH tables. This reduces the"
It broke several builds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129557
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 15 Apr 2011 01:31:00 +0000 (01:31 +0000)]
Fix another fcopysign lowering bug. If src is f64 and destination is f32, don't
forget to right shift the source by 32 first. rdar://
9287902
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129556
91177308-0d34-0410-b5e6-
96231b3b80d8
Johnny Chen [Fri, 15 Apr 2011 00:35:08 +0000 (00:35 +0000)]
For t2BFI, both Inst{26} and Inst{5} "should" be 0.
Ref: I.1 Instruction encoding diagrams and pseudocode
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129552
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael J. Spencer [Fri, 15 Apr 2011 00:32:41 +0000 (00:32 +0000)]
Add 3DNow! intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129551
91177308-0d34-0410-b5e6-
96231b3b80d8
Johnny Chen [Fri, 15 Apr 2011 00:10:45 +0000 (00:10 +0000)]
The ARM disassembler did not handle the alignment correctly for VLD*DUP* instructions
(single element or n-element structure to all lanes).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129550
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Thu, 14 Apr 2011 23:27:44 +0000 (23:27 +0000)]
Follow up on r127913. Fix Thumb revsh isel. rdar://
9286766
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129548
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Thu, 14 Apr 2011 22:41:27 +0000 (22:41 +0000)]
Add an instcombine for constructs like a | -(b != c); a select is more
canonical, and generally leads to better code. Found while looking at
an article about saturating arithmetic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129545
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Thu, 14 Apr 2011 21:35:50 +0000 (21:35 +0000)]
Fix an infinite alternation in JumpThreading where two transforms would repeatedly undo each other. The solution is to perform more aggressive constant folding to make one of the edges just folded away rather than trying to thread it.
Fixes <rdar://problem/
9284786>.
Discovered with CSmith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129538
91177308-0d34-0410-b5e6-
96231b3b80d8
Mon P Wang [Thu, 14 Apr 2011 19:20:42 +0000 (19:20 +0000)]
Cleanup r129509 based on comments by Chris
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129532
91177308-0d34-0410-b5e6-
96231b3b80d8
Johnny Chen [Thu, 14 Apr 2011 19:13:28 +0000 (19:13 +0000)]
Add sanity checkings for Thumb2 Load/Store Register Exclusive family of operations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129531
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 14 Apr 2011 18:47:18 +0000 (18:47 +0000)]
move PR9661 out to here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129527
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Thu, 14 Apr 2011 17:30:49 +0000 (17:30 +0000)]
Fix another instance of the DAG combiner not using the correct type for the RHS of a shift.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129522
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Dunbar [Thu, 14 Apr 2011 15:21:16 +0000 (15:21 +0000)]
tests: Remove a FrontendC test which is no longer valid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129519
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Thu, 14 Apr 2011 15:18:53 +0000 (15:18 +0000)]
Change ELF systems to use CFI for producing the EH tables. This reduces the
size of the clang binary in Debug builds from 690MB to 679MB.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129518
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael J. Spencer [Thu, 14 Apr 2011 14:33:36 +0000 (14:33 +0000)]
Fix whitespace and tabs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129517
91177308-0d34-0410-b5e6-
96231b3b80d8
Mon P Wang [Thu, 14 Apr 2011 08:04:01 +0000 (08:04 +0000)]
Cleanup r129472 by using a utility routine as suggested by Eli.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129509
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Thu, 14 Apr 2011 05:15:06 +0000 (05:15 +0000)]
In the pre-RA scheduler, maintain cmp+br proximity.
This is done by pushing physical register definitions close to their
use, which happens to handle flag definitions if they're not glued to
the branch. This seems to be generally a good thing though, so I
didn't need to add a target hook yet.
The primary motivation is to generate code closer to what people
expect and rule out missed opportunity from enabling macro-op
fusion. As a side benefit, we get several 2-5% gains on x86
benchmarks. There is one regression:
SingleSource/Benchmarks/Shootout/lists slows down be -10%. But this is
an independent scheduler bug that will be tracked separately.
See rdar://problem/
9283108.
Incidentally, pre-RA scheduling is only half the solution. Fixing the
later passes is tracked by:
<rdar://problem/
8932804> [pre-RA-sched] on x86, attempt to schedule CMP/TEST adjacent with condition jump
Fixes:
<rdar://problem/
9262453> Scheduler unnecessary break of cmp/jump fusion
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129508
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Trick [Thu, 14 Apr 2011 05:05:36 +0000 (05:05 +0000)]
Documented bugpoint --compile-custom --compile-command.
I've used it a few times to reduce unit tests and gotten one request for information on it. It's not easy to use correctly because bugpoint doesn't tell you when you're doing it wrong.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129507
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 14 Apr 2011 04:21:42 +0000 (04:21 +0000)]
add a minor missed dag combine that is blocking mid-level optimization
improvements, that will lead to fixing PR6627.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129504
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 14 Apr 2011 04:12:47 +0000 (04:12 +0000)]
sink a call into its only use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129503
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 14 Apr 2011 02:44:53 +0000 (02:44 +0000)]
rework FoldBranchToCommonDest to exit earlier when there is a bonus
instruction around, reducing work.
Greatly simplify handling of debug instructions. There is no need to
build up a vector of them and then move them into the one predecessor
if we're processing a block. Instead just rescan the block and *copy*
them into the pred. If a block gets merged into multiple preds, this
will retain more debug info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129502
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 14 Apr 2011 02:27:25 +0000 (02:27 +0000)]
fix a couple -Wsign-compare warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129501
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Thu, 14 Apr 2011 01:46:37 +0000 (01:46 +0000)]
As Dan pointed out, movzbl, movsbl, and friends are nicer than their alias
(movzx/movsx) because they give more information. Revert that part of the patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129498
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Thu, 14 Apr 2011 01:11:51 +0000 (01:11 +0000)]
Have the X86 back-end emit the alias instead of what's being aliased. In most
cases, it's much nicer and more informative reading the alias.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129497
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Wed, 13 Apr 2011 23:36:21 +0000 (23:36 +0000)]
Add an option to not print the alias of an instruction. It defaults to "print
the alias".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129485
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Wed, 13 Apr 2011 23:22:23 +0000 (23:22 +0000)]
During post-legalization DAG combining, be careful to only create shifts where the RHS is of the legal type for the new operation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129484
91177308-0d34-0410-b5e6-
96231b3b80d8