oota-llvm.git
13 years ago[AVX] When joining two XMM registers into a YMM register, make sure that the
Nadav Rotem [Thu, 11 Aug 2011 16:49:36 +0000 (16:49 +0000)]
[AVX] When joining  two XMM registers into a YMM register, make sure that the
lower XMM register gets in first. This will allow the SUBREG pattern to
elliminate the first vector insertion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137310 91177308-0d34-0410-b5e6-96231b3b80d8

13 years ago[AVX] If the data which is going to be saved is already in two XMM registers
Nadav Rotem [Thu, 11 Aug 2011 16:41:21 +0000 (16:41 +0000)]
[AVX] If the data which is going to be saved is already in two XMM registers
(for example, after integer operation), do not pack the registers into a YMM
before saving. Its better to save as two XMM registers.

Before:
                vinsertf128         $1, %xmm3, %ymm0, %ymm3
                vinsertf128         $0, %xmm1, %ymm3, %ymm1
                vmovaps              %ymm1, 416(%rsp)

After:
                vmovaps              %xmm3, 416+16(%rsp)
                vmovaps              %xmm1, 416(%rsp)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137308 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoadd missing colon, thanks peter.
Chris Lattner [Thu, 11 Aug 2011 16:15:10 +0000 (16:15 +0000)]
add missing colon, thanks peter.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137306 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agofix PR10605 / rdar://9930964 by adding a pretty scary missed check.
Chris Lattner [Thu, 11 Aug 2011 06:26:54 +0000 (06:26 +0000)]
fix PR10605 / rdar://9930964 by adding a pretty scary missed check.
It's somewhat surprising anything works without this.  Before we would
compile the testcase into:

test:                                   # @test
movl $4, 8(%rdi)
movl 8(%rdi), %eax
orl %esi, %eax
cmpl $32, %edx
movl %eax, -4(%rsp)          # 4-byte Spill
je .LBB0_2

now we produce:

test:                                   # @test
movl 8(%rdi), %eax
movl $4, 8(%rdi)
orl %esi, %eax
cmpl $32, %edx
movl %eax, -4(%rsp)          # 4-byte Spill
je .LBB0_2

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137303 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCleanup: Remove Int_ CVTSS2SI* forms
Bruno Cardoso Lopes [Thu, 11 Aug 2011 02:52:36 +0000 (02:52 +0000)]
Cleanup: Remove Int_ CVTSS2SI* forms

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137297 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoSplats for v8i32/v8f32 can be handled by VPERMILPSY. This was causing
Bruno Cardoso Lopes [Thu, 11 Aug 2011 02:49:44 +0000 (02:49 +0000)]
Splats for v8i32/v8f32 can be handled by VPERMILPSY. This was causing
infinite recursive calls in legalize. Fix PR10562

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137296 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoUse the splat index to generate the desired shuffle. Otherwise we
Bruno Cardoso Lopes [Thu, 11 Aug 2011 02:49:41 +0000 (02:49 +0000)]
Use the splat index to generate the desired shuffle. Otherwise we
could only get undefs and the vector shuffle becomes an undef,
generating wrong code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137295 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix X86TargetLowering::LowerExternalSymbol so that it actually works in non-trivial...
Eli Friedman [Thu, 11 Aug 2011 01:48:05 +0000 (01:48 +0000)]
Fix X86TargetLowering::LowerExternalSymbol so that it actually works in non-trivial cases.  This hasn't been an issue before because the function isn't normally called (but apparently is used to generate a tail-call to sin() on ELF x86-32 with PIC and SSE2).

Fixes PR9693.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137292 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTypo.
Chad Rosier [Thu, 11 Aug 2011 00:22:48 +0000 (00:22 +0000)]
Typo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137286 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoStay within 80 columns.
Devang Patel [Wed, 10 Aug 2011 23:58:09 +0000 (23:58 +0000)]
Stay within 80 columns.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137283 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM LDRT assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 23:43:54 +0000 (23:43 +0000)]
ARM LDRT assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137282 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTidy up. 80 columns.
Jim Grosbach [Wed, 10 Aug 2011 23:23:47 +0000 (23:23 +0000)]
Tidy up. 80 columns.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137277 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoReapplying r136844.
Andrew Trick [Wed, 10 Aug 2011 23:22:57 +0000 (23:22 +0000)]
Reapplying r136844.

An algorithm for incrementally updating LoopInfo within a
LoopPassManager. The incremental update should be extremely cheap in
most cases and can be used in places where it's not feasible to
regenerate the entire loop forest.

- "Unloop" is a node in the loop tree whose last backedge has been removed.
- Perform reverse dataflow on the block inside Unloop to propagate the
  nearest loop from the block's successors.
- For reducible CFG, each block in unloop is visited exactly
  once. This is because unloop no longer has a backedge and blocks
  within subloops don't change parents.
- Immediate subloops are summarized by the nearest loop reachable from
  their exits or exits within nested subloops.
- At completion the unloop blocks each have a new parent loop, and
  each immediate subloop has a new parent.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137276 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM tests for LDRSHT assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 23:18:30 +0000 (23:18 +0000)]
ARM tests for LDRSHT assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137274 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM tests for LDRSH assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 23:12:25 +0000 (23:12 +0000)]
ARM tests for LDRSH assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137272 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM tests for LDRSBT assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 23:08:56 +0000 (23:08 +0000)]
ARM tests for LDRSBT assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137271 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM tests for LDRSB assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 23:06:44 +0000 (23:06 +0000)]
ARM tests for LDRSB assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137270 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd FIXME.
Jim Grosbach [Wed, 10 Aug 2011 22:56:43 +0000 (22:56 +0000)]
Add FIXME.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137265 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCleanup. Remove an extraneous GraphTraits specialization.
Andrew Trick [Wed, 10 Aug 2011 22:55:39 +0000 (22:55 +0000)]
Cleanup. Remove an extraneous GraphTraits specialization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137264 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM tests for LDRHT assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 22:55:38 +0000 (22:55 +0000)]
ARM tests for LDRHT assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137263 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agotest/CodeGen/X86/opt-shuff-tstore.ll: Add explicit -mtriple=x86_64-linux.
NAKAMURA Takumi [Wed, 10 Aug 2011 22:52:48 +0000 (22:52 +0000)]
test/CodeGen/X86/opt-shuff-tstore.ll: Add explicit -mtriple=x86_64-linux.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137262 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM tests for LDRH(register) assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 22:45:42 +0000 (22:45 +0000)]
ARM tests for LDRH(register) assembly parsing and encoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137261 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM LDRH(immediate) assembly parsing and encoding support.
Jim Grosbach [Wed, 10 Aug 2011 22:42:16 +0000 (22:42 +0000)]
ARM LDRH(immediate) assembly parsing and encoding support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137260 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd FIXME
Jim Grosbach [Wed, 10 Aug 2011 22:20:38 +0000 (22:20 +0000)]
Add FIXME

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137258 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM LDRD(register) assembly parsing and encoding.
Jim Grosbach [Wed, 10 Aug 2011 21:56:18 +0000 (21:56 +0000)]
ARM LDRD(register) assembly parsing and encoding.

Add support for literal encoding of #-0 along the way.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137254 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoDistinguish between two copies of one inlined variable. Take 2.
Devang Patel [Wed, 10 Aug 2011 21:50:54 +0000 (21:50 +0000)]
Distinguish between two copies of one inlined variable. Take 2.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137253 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoWhile extending definition range of a debug variable, consult lexical scopes also...
Devang Patel [Wed, 10 Aug 2011 21:25:34 +0000 (21:25 +0000)]
While extending definition range of a debug variable, consult lexical scopes also. There is no point extending debug variable out side its lexical block. This provides 6x compile time speedup in some cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137250 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRevert unintentional parts of previous check-in.
Devang Patel [Wed, 10 Aug 2011 21:16:49 +0000 (21:16 +0000)]
Revert unintentional parts of previous check-in.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137249 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoStart using LexicalScopes utility. No intetional functionality change.
Devang Patel [Wed, 10 Aug 2011 20:55:27 +0000 (20:55 +0000)]
Start using LexicalScopes utility. No intetional functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137246 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix typo. Not quite sure how that slipped in there.
Jim Grosbach [Wed, 10 Aug 2011 20:49:18 +0000 (20:49 +0000)]
Fix typo. Not quite sure how that slipped in there.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137245 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM LDRD(immediate) assembly parsing and encoding support.
Jim Grosbach [Wed, 10 Aug 2011 20:29:19 +0000 (20:29 +0000)]
ARM LDRD(immediate) assembly parsing and encoding support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137244 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoChanges per Jeffrey's comments.
Eli Friedman [Wed, 10 Aug 2011 20:17:43 +0000 (20:17 +0000)]
Changes per Jeffrey's comments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137243 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix the test. Add cpu target.
Nadav Rotem [Wed, 10 Aug 2011 19:49:19 +0000 (19:49 +0000)]
Fix the test. Add cpu target.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137241 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoWhen performing a truncating store, it is sometimes possible to rearrange the
Nadav Rotem [Wed, 10 Aug 2011 19:30:14 +0000 (19:30 +0000)]
When performing a truncating store, it is sometimes possible to rearrange the
data in-register prior to saving to memory.  When we reorder the data in memory
we prevent the need to save multiple scalars to memory, making a single regular
store.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137238 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoProvide utility to extract and use lexical scoping information from machine instructions.
Devang Patel [Wed, 10 Aug 2011 19:04:06 +0000 (19:04 +0000)]
Provide utility to extract and use lexical scoping information from machine instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137237 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd initial support for decoding NEON instructions in Thumb2 mode.
Owen Anderson [Wed, 10 Aug 2011 19:01:10 +0000 (19:01 +0000)]
Add initial support for decoding NEON instructions in Thumb2 mode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137236 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoMake Record Name an Init
David Greene [Wed, 10 Aug 2011 18:27:46 +0000 (18:27 +0000)]
Make Record Name an Init

Use an Init (ultimately a StringInit) to represent the Record name.
This allows the name to be composed by standard TableGen operators.
This will enable us to get rid of the ugly #NAME# hack processing and
naturally replace it with operators.  It also increases flexibility
and power of the TableGen language by allowing record identifiers to
be computed dynamically.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137232 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd getAsUnquotedString
David Greene [Wed, 10 Aug 2011 18:27:45 +0000 (18:27 +0000)]
Add getAsUnquotedString

Add a method to return an Init as an unquoted string.  This primarily
affects StringInit where we return the value without surrounding it
with quotes.

This is in preparation for removing the ugly #NAME# hack and replacing
it with standard TabelGen operators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137231 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoComments. Thanks for the spell check Nick!
Andrew Trick [Wed, 10 Aug 2011 18:07:05 +0000 (18:07 +0000)]
Comments. Thanks for the spell check Nick!

Also, my apologies for spoiling the autocomplete on SimplifyInstructions.cpp. I couldn't think of a better filename.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137229 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoThe following X86 pattern is incorrect:
Bruno Cardoso Lopes [Wed, 10 Aug 2011 17:45:17 +0000 (17:45 +0000)]
The following X86 pattern is incorrect:
def : Pat<(X86Movss VR128:$src1,
                   (bc_v4i32 (v2i64 (load addr:$src2)))),
          (MOVLPSrm VR128:$src1, addr:$src2)>;
This matches a MOVSS dag with a MOVLPS instruction. However, MOVSS will replace only the low 32 bits of the register, while the MOVLPS instruction will replace the low 64 bits. A testcase is added and illustrates the bug and also modified the one that was already present. Patch by Tanya Lattner.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137227 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoWhitespace.
Eli Friedman [Wed, 10 Aug 2011 17:39:11 +0000 (17:39 +0000)]
Whitespace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137226 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTabs --> spaces.
Owen Anderson [Wed, 10 Aug 2011 17:38:05 +0000 (17:38 +0000)]
Tabs --> spaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137225 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCleanups based on Nick Lewycky's feedback.
Owen Anderson [Wed, 10 Aug 2011 17:36:48 +0000 (17:36 +0000)]
Cleanups based on Nick Lewycky's feedback.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137224 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRewrite some ARM InstrInfo functions to be most accepting of arbitrary register subcl...
Owen Anderson [Wed, 10 Aug 2011 17:21:20 +0000 (17:21 +0000)]
Rewrite some ARM InstrInfo functions to be most accepting of arbitrary register subclasses.  Hopefully this fixes some buildbots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137223 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd support for the R and Q constraints.
Rafael Espindola [Wed, 10 Aug 2011 16:26:42 +0000 (16:26 +0000)]
Add support for the R and Q constraints.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137217 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoClarify a comment.
Bob Wilson [Wed, 10 Aug 2011 05:02:22 +0000 (05:02 +0000)]
Clarify a comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137204 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoInvoke SimplifyIndVar when we partially unroll a loop. Fixes PR10534.
Andrew Trick [Wed, 10 Aug 2011 04:29:49 +0000 (04:29 +0000)]
Invoke SimplifyIndVar when we partially unroll a loop. Fixes PR10534.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137203 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCleanup. Make ScalarEvolution an explicit argument of the
Andrew Trick [Wed, 10 Aug 2011 04:22:26 +0000 (04:22 +0000)]
Cleanup. Make ScalarEvolution an explicit argument of the
SimplifyIndVar utility since it is required.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137202 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoSimplifyIndVar: make foldIVUser iterative to fold a chain of operands.
Andrew Trick [Wed, 10 Aug 2011 04:01:31 +0000 (04:01 +0000)]
SimplifyIndVar: make foldIVUser iterative to fold a chain of operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137199 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoUpdate CMake build.
Benjamin Kramer [Wed, 10 Aug 2011 03:51:58 +0000 (03:51 +0000)]
Update CMake build.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137198 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdded a SimplifyIndVar utility to simplify induction variable users
Andrew Trick [Wed, 10 Aug 2011 03:46:27 +0000 (03:46 +0000)]
Added a SimplifyIndVar utility to simplify induction variable users
based on ScalarEvolution without changing the induction variable phis.

This utility is the main tool of IndVarSimplifyPass, but the pass also
restructures induction variables in strange ways that are sensitive to
pass ordering. This provides a way for other loop passes to simplify
new uses of induction variables created during transformation. The
utility may be used by any pass that preserves ScalarEvolution. Soon
LoopUnroll will use it.

The net effect in this checkin is to cleanup the IndVarSimplify pass
by factoring out the SimplifyIndVar algorithm into a standalone utility.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137197 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCleanup. Added LoopBlocksDFS::perform for simple clients.
Andrew Trick [Wed, 10 Aug 2011 01:59:05 +0000 (01:59 +0000)]
Cleanup. Added LoopBlocksDFS::perform for simple clients.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137195 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix a bug in vpermilps mask checking. Fix PR10560
Bruno Cardoso Lopes [Wed, 10 Aug 2011 01:54:17 +0000 (01:54 +0000)]
Fix a bug in vpermilps mask checking. Fix PR10560

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137194 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRemove the build_unwind function from the OCaml bindings.
Peter Collingbourne [Wed, 10 Aug 2011 01:10:17 +0000 (01:10 +0000)]
Remove the build_unwind function from the OCaml bindings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137193 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoPreserve the name for this variant of IRBuilder::CreateCall
Peter Collingbourne [Wed, 10 Aug 2011 01:10:08 +0000 (01:10 +0000)]
Preserve the name for this variant of IRBuilder::CreateCall

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137192 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCleanup. Avoid relying on specialization of std::distance.
Andrew Trick [Wed, 10 Aug 2011 00:49:12 +0000 (00:49 +0000)]
Cleanup. Avoid relying on specialization of std::distance.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137191 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix the LoopUnroller to handle nontrivial loops and partial unrolling.
Andrew Trick [Wed, 10 Aug 2011 00:28:10 +0000 (00:28 +0000)]
Fix the LoopUnroller to handle nontrivial loops and partial unrolling.

These are not individual bug fixes. I had to rewrite a good chunk of
the unroller to make it sane. I think it was getting lucky on trivial
completely unrolled loops with no early exits. I included some fairly
simple unit tests for partial unrolling. I didn't do much stress
testing, so it may not be perfect, but should be usable now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137190 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoPush GPRnopc through a large number of instruction definitions to tighten operand...
Owen Anderson [Wed, 10 Aug 2011 00:03:03 +0000 (00:03 +0000)]
Push GPRnopc through a large number of instruction definitions to tighten operand decoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137189 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoUpdate comment.
Eric Christopher [Wed, 10 Aug 2011 00:02:39 +0000 (00:02 +0000)]
Update comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137188 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoclang is the new black.
Eric Christopher [Tue, 9 Aug 2011 23:59:05 +0000 (23:59 +0000)]
clang is the new black.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137187 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTrim an unneeded header.
Jakob Stoklund Olesen [Tue, 9 Aug 2011 23:49:21 +0000 (23:49 +0000)]
Trim an unneeded header.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137184 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoPromote VMOVS to VMOVD when possible.
Jakob Stoklund Olesen [Tue, 9 Aug 2011 23:41:44 +0000 (23:41 +0000)]
Promote VMOVS to VMOVD when possible.

On Cortex-A8, we use the NEON v2f32 instructions for f32 arithmetic. For
better latency, we also send D-register copies down the NEON pipeline by
translating them to vorr instructions.

This patch promotes even S-register copies to D-register copies when
possible so they can also go down the NEON pipeline.  Example:

        vldr.32 s0, LCPI0_0
    loop:
        vorr    d1, d0, d0
    loop2:
        ...
        vadd.f32        d1, d1, d16

The vorr instruction looked like this after regalloc:

    %S2<def> = COPY %S0, %D1<imp-def>

Copies involving odd S-registers, and copies that don't define the full
D-register are left alone.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137182 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTighten operand checking of register-shifted-register operands.
Owen Anderson [Tue, 9 Aug 2011 23:33:27 +0000 (23:33 +0000)]
Tighten operand checking of register-shifted-register operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137180 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd 256-bit support for v8i32, v4i64 and v4f64 ISD::SELECT. Fix PR10556
Bruno Cardoso Lopes [Tue, 9 Aug 2011 23:27:13 +0000 (23:27 +0000)]
Add 256-bit support for v8i32, v4i64 and v4f64 ISD::SELECT. Fix PR10556

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137179 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix minor typo.
Eli Friedman [Tue, 9 Aug 2011 23:26:12 +0000 (23:26 +0000)]
Fix minor typo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137177 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTighten operand checking on memory barrier instructions.
Owen Anderson [Tue, 9 Aug 2011 23:25:42 +0000 (23:25 +0000)]
Tighten operand checking on memory barrier instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137176 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoVMCore/BasicBlock.cpp: Don't assume BasicBlock::iterator might end with a non-PHInode...
NAKAMURA Takumi [Tue, 9 Aug 2011 23:13:05 +0000 (23:13 +0000)]
VMCore/BasicBlock.cpp: Don't assume BasicBlock::iterator might end with a non-PHInode Instruction in successors.

Frontends(eg. clang) might pass incomplete form of IR, to step off the way beyond iterator end. In the case I had met, it took infinite loop due to meeting bogus PHInode.

Thanks to Jay Foad and John McCall.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137175 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix whitespace.
NAKAMURA Takumi [Tue, 9 Aug 2011 23:12:56 +0000 (23:12 +0000)]
Fix whitespace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137174 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTighten operand checking on CPS instructions.
Owen Anderson [Tue, 9 Aug 2011 23:05:39 +0000 (23:05 +0000)]
Tighten operand checking on CPS instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137172 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix an oversight in the FixedLenDecoderEmitter where we weren't correctly checking...
Owen Anderson [Tue, 9 Aug 2011 23:05:23 +0000 (23:05 +0000)]
Fix an oversight in the FixedLenDecoderEmitter where we weren't correctly checking the success result of custom decoder hooks on singleton decodings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137171 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRepresentation of 'atomic load' and 'atomic store' in IR.
Eli Friedman [Tue, 9 Aug 2011 23:02:53 +0000 (23:02 +0000)]
Representation of 'atomic load' and 'atomic store' in IR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137170 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoCreate a new register class for the set of all GPRs except the PC. Use it to tighten...
Owen Anderson [Tue, 9 Aug 2011 22:48:45 +0000 (22:48 +0000)]
Create a new register class for the set of all GPRs except the PC.  Use it to tighten our decoding of BFI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137168 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd v16i16 and v32i8 store patterns
Bruno Cardoso Lopes [Tue, 9 Aug 2011 22:39:53 +0000 (22:39 +0000)]
Add v16i16 and v32i8 store patterns

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137166 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix 80-column violations.
Chad Rosier [Tue, 9 Aug 2011 22:23:40 +0000 (22:23 +0000)]
Fix 80-column violations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137163 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd missing file.
Rafael Espindola [Tue, 9 Aug 2011 22:19:52 +0000 (22:19 +0000)]
Add missing file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137162 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoUse fp unpack instructions to unpack int types. Until we have AVX2, this
Bruno Cardoso Lopes [Tue, 9 Aug 2011 22:18:37 +0000 (22:18 +0000)]
Use fp unpack instructions to unpack int types. Until we have AVX2, this
is the best we can do for these patterns. This fix PR10554.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137161 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFix a couple ridiculous copy-paste errors. rdar://9914773 .
Eli Friedman [Tue, 9 Aug 2011 22:17:39 +0000 (22:17 +0000)]
Fix a couple ridiculous copy-paste errors.  rdar://9914773 .

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137160 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAdd a C interface to PassManagerBuilder. It is missing the addExtension
Rafael Espindola [Tue, 9 Aug 2011 22:17:34 +0000 (22:17 +0000)]
Add a C interface to PassManagerBuilder. It is missing the addExtension
functionality since in the C api a pass is created and added to a pass
manager in a single call.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137159 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoDon't truncate MachO addresses.
Jim Grosbach [Tue, 9 Aug 2011 22:12:37 +0000 (22:12 +0000)]
Don't truncate MachO addresses.

Assigned symbol addresses get truncated to 32-bits, even on 64-bit platforms.
That's obviously bogus.
For example,

 .globl _foo
 .equ _foo, 0x987654321ULL

rdar://9922863

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137158 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM Disassembler: sign extend branch immediates.
Benjamin Kramer [Tue, 9 Aug 2011 22:02:50 +0000 (22:02 +0000)]
ARM Disassembler: sign extend branch immediates.

Not sure about BLXi, but this is what the old disassembler did.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137156 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoSilence an false-positive warning.
Owen Anderson [Tue, 9 Aug 2011 21:38:14 +0000 (21:38 +0000)]
Silence an false-positive warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137154 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoDon't generate the old-style disassembler in CMake builds either.
Owen Anderson [Tue, 9 Aug 2011 21:36:11 +0000 (21:36 +0000)]
Don't generate the old-style disassembler in CMake builds either.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137153 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoThe new ARM disassembler disassembles "bx lr" as a special BX_ret instruction so...
Benjamin Kramer [Tue, 9 Aug 2011 21:34:19 +0000 (21:34 +0000)]
The new ARM disassembler disassembles "bx lr" as a special BX_ret instruction so target specific analysis isn't needed anymore.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137151 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoDon't continue generating the old-style decoder file.
Owen Anderson [Tue, 9 Aug 2011 21:30:29 +0000 (21:30 +0000)]
Don't continue generating the old-style decoder file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137150 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoARM fix typo in pre-indexed store lowering.
Jim Grosbach [Tue, 9 Aug 2011 21:22:41 +0000 (21:22 +0000)]
ARM fix typo in pre-indexed store lowering.

rdar://9915869

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137148 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoAttempt to fix CMake build.
Owen Anderson [Tue, 9 Aug 2011 21:09:59 +0000 (21:09 +0000)]
Attempt to fix CMake build.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137147 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoTighten Thumb1 branch predicate decoding.
Owen Anderson [Tue, 9 Aug 2011 21:07:45 +0000 (21:07 +0000)]
Tighten Thumb1 branch predicate decoding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137146 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoFirst draft of the practical guide to atomics.
Eli Friedman [Tue, 9 Aug 2011 21:07:10 +0000 (21:07 +0000)]
First draft of the practical guide to atomics.

This is mostly descriptive of the intended state once atomic load and store have landed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137145 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoReplace the existing ARM disassembler with a new one based on the FixedLenDecoderEmitter.
Owen Anderson [Tue, 9 Aug 2011 20:55:18 +0000 (20:55 +0000)]
Replace the existing ARM disassembler with a new one based on the FixedLenDecoderEmitter.
This new disassembler can correctly decode all the testcases that the old one did, though
some "expected failure" testcases are XFAIL'd for now because it is not (yet) as strict in
operand checking as the old one was.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137144 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoPut Darwin-specific code inside an __APPLE__ ifdef.
Bob Wilson [Tue, 9 Aug 2011 19:54:32 +0000 (19:54 +0000)]
Put Darwin-specific code inside an __APPLE__ ifdef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137137 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRevert r137134. It breaks some code as Eli pointed out.
Bill Wendling [Tue, 9 Aug 2011 18:56:35 +0000 (18:56 +0000)]
Revert r137134. It breaks some code as Eli pointed out.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137135 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoPrint out the variable declaration only if it is a declaration. Otherwise, a
Bill Wendling [Tue, 9 Aug 2011 18:31:50 +0000 (18:31 +0000)]
Print out the variable declaration only if it is a declaration. Otherwise, a
'static' variable will be emitted twice.
PR10081

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137134 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoInflate register classes after coalescing.
Jakob Stoklund Olesen [Tue, 9 Aug 2011 18:19:41 +0000 (18:19 +0000)]
Inflate register classes after coalescing.

Coalescing can remove copy-like instructions with sub-register operands
that constrained the register class.  Examples are:

  x86: GR32_ABCD:sub_8bit_hi -> GR32
  arm: DPR_VFP2:ssub0 -> DPR

Recompute the register class of any virtual registers that are used by
less instructions after coalescing.

This affects code generation for the Cortex-A8 where we use NEON
instructions for f32 operations, c.f. fp_convert.ll:

  vadd.f32  d16, d1, d0
  vcvt.s32.f32  d0, d16

The register allocator is now free to use d16 for the temporary, and
that comes first in the allocation order because it doesn't interfere
with any s-registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137133 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoReapply a more appropriate solution than in r137114. AVX supports
Bruno Cardoso Lopes [Tue, 9 Aug 2011 17:39:13 +0000 (17:39 +0000)]
Reapply a more appropriate solution than in r137114. AVX supports
v4f64 = sitofp v4i32. This fix PR10559.
Also add support for v4i32 = fptosi v4f64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137128 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRevert r137114
Bruno Cardoso Lopes [Tue, 9 Aug 2011 17:39:01 +0000 (17:39 +0000)]
Revert r137114

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137127 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoPTX: Add initial support for device function calls
Justin Holewinski [Tue, 9 Aug 2011 17:36:31 +0000 (17:36 +0000)]
PTX: Add initial support for device function calls

- Calls are supported on SM 2.0+ for function with no return values

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137125 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoMove CalculateRegClass to MRI::recomputeRegClass.
Jakob Stoklund Olesen [Tue, 9 Aug 2011 16:46:27 +0000 (16:46 +0000)]
Move CalculateRegClass to MRI::recomputeRegClass.

This function doesn't have anything to do with spill weights, and MRI
already has functions for manipulating the register class of a virtual
register.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137123 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoEmitting ARM build attributes and values as ULEB, rather than char.
Renato Golin [Tue, 9 Aug 2011 09:50:10 +0000 (09:50 +0000)]
Emitting ARM build attributes and values as ULEB, rather than char.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137115 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoHandle sitofp between v4f64 <- v4i32. Fix PR10559
Bruno Cardoso Lopes [Tue, 9 Aug 2011 05:48:01 +0000 (05:48 +0000)]
Handle sitofp between v4f64 <- v4i32. Fix PR10559

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137114 91177308-0d34-0410-b5e6-96231b3b80d8

13 years agoRecognize the UNAME_RELEASE environment variable to match Darwin's uname.
Bob Wilson [Tue, 9 Aug 2011 05:13:36 +0000 (05:13 +0000)]
Recognize the UNAME_RELEASE environment variable to match Darwin's uname.
When this variable is set, "uname -r" will return its value instead of the
real OS version.  Make this affect LLVM's triple for consistency.
<rdar://problem/9919167>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137111 91177308-0d34-0410-b5e6-96231b3b80d8