oota-llvm.git
13 years agoThe accumulator tail recursion transform claims to work for any associative
Duncan Sands [Sat, 10 Jul 2010 20:31:42 +0000 (20:31 +0000)]
The accumulator tail recursion transform claims to work for any associative
operation, but the way it's implemented requires the operation to also be
commutative.  So add a check for commutativity (and tweak the corresponding
comments).  This makes no difference in practice since every associative
LLVM instruction is also commutative!  Here's an example to show the need
for commutativity: the accum_recursion.ll testcase calculates the factorial
function.  Before the transformation the result of a call is
  ((((1*1)*2)*3)...)*x
while afterwards it is
  (((1*x)*(x-1))...*2)*1
which clearly requires both associativity and commutativity of * to be equal
to the original.

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

13 years agoEmit COPY instructions instead of using copyRegToReg in InstrEmitter,
Jakob Stoklund Olesen [Sat, 10 Jul 2010 19:08:25 +0000 (19:08 +0000)]
Emit COPY instructions instead of using copyRegToReg in InstrEmitter,
ScheduleDAGEmit, TwoAddressLowering, and PHIElimination.

This switches the bulk of register copies to using COPY, but many less used
copyRegToReg calls remain.

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

13 years agoUse non-bool values for .count.
Bill Wendling [Sat, 10 Jul 2010 18:56:35 +0000 (18:56 +0000)]
Use non-bool values for .count.

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

13 years agoDon't emit st(0)/st(1) copies as FpMOV instructions. Use FpSET_ST? instead.
Jakob Stoklund Olesen [Sat, 10 Jul 2010 17:42:34 +0000 (17:42 +0000)]
Don't emit st(0)/st(1) copies as FpMOV instructions. Use FpSET_ST? instead.

Based on a patch by Rafael EspĂ­ndola.

Attempt to make the FpSET_ST1 hack more robust, but we are still relying on
FpSET_ST0 preceeding it. This is only for supporting really weird x87 inline
asm.

We support:

  FpSET_ST0
  INLINEASM

  FpSET_ST0
  FpSET_ST1
  INLINEASM

with and without kills on the arguments. We don't support:

  FpSET_ST1
  FpSET_ST0
  INLINEASM

nor

  FpSET_ST1
  INLINEASM

Just Don't Do It!

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

13 years agoFileCheckize inline asm FP stack tests
Jakob Stoklund Olesen [Sat, 10 Jul 2010 16:30:25 +0000 (16:30 +0000)]
FileCheckize inline asm FP stack tests

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

13 years agoInsert IMPLICIT_DEF instructions at the current insert position, not
Dan Gohman [Sat, 10 Jul 2010 13:55:45 +0000 (13:55 +0000)]
Insert IMPLICIT_DEF instructions at the current insert position, not
at the end of the block.

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

13 years agoAdd parentheses yet again to satisfy GCC's warnings.
Chandler Carruth [Sat, 10 Jul 2010 12:06:22 +0000 (12:06 +0000)]
Add parentheses yet again to satisfy GCC's warnings.

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

13 years agoAdd an explicit triple to make this test behave consistently.
Dan Gohman [Sat, 10 Jul 2010 09:01:35 +0000 (09:01 +0000)]
Add an explicit triple to make this test behave consistently.

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

13 years agoFix this XTARGET so that this does doesn't XPASS on non-darwin hosts.
Dan Gohman [Sat, 10 Jul 2010 09:01:03 +0000 (09:01 +0000)]
Fix this XTARGET so that this does doesn't XPASS on non-darwin hosts.

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

13 years agoReapply bottom-up fast-isel, with several fixes for x86-32:
Dan Gohman [Sat, 10 Jul 2010 09:00:22 +0000 (09:00 +0000)]
Reapply bottom-up fast-isel, with several fixes for x86-32:
 - Check getBytesToPopOnReturn().
 - Eschew ST0 and ST1 for return values.
 - Fix the PIC base register initialization so that it doesn't ever
   fail to end up the top of the entry block.

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

13 years agoAn x86 function returns a floating point value in st(0), and we must make sure
Jakob Stoklund Olesen [Sat, 10 Jul 2010 04:04:25 +0000 (04:04 +0000)]
An x86 function returns a floating point value in st(0), and we must make sure
it is popped, even if it is ununsed. A CopyFromReg node is too weak to represent
the required sideeffect, so insert an FpGET_ST0 instruction directly instead.

This will matter when CopyFromReg gets lowered to a generic COPY instruction.

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

13 years agoUpdate DBG_VALUE to refer appropriate stack slot in case of a spill.
Devang Patel [Fri, 9 Jul 2010 21:48:31 +0000 (21:48 +0000)]
Update DBG_VALUE to refer appropriate stack slot in case of a spill.

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

13 years agoDeclare YMM subregisters in the right way! Thanks Jakob
Bruno Cardoso Lopes [Fri, 9 Jul 2010 21:46:19 +0000 (21:46 +0000)]
Declare YMM subregisters in the right way! Thanks Jakob

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

13 years agoAdd AVX 256-bit packed MOVNT variants
Bruno Cardoso Lopes [Fri, 9 Jul 2010 21:42:42 +0000 (21:42 +0000)]
Add AVX 256-bit packed MOVNT variants

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

13 years agoRemember the *_TC opcodes for load/store
Jakob Stoklund Olesen [Fri, 9 Jul 2010 21:27:55 +0000 (21:27 +0000)]
Remember the *_TC opcodes for load/store

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

13 years agoAdd AVX 256-bit unpack and interleave
Bruno Cardoso Lopes [Fri, 9 Jul 2010 21:20:35 +0000 (21:20 +0000)]
Add AVX 256-bit unpack and interleave

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

13 years agoFix small bug in isMoveInstr -> COPY translation
Jakob Stoklund Olesen [Fri, 9 Jul 2010 20:55:49 +0000 (20:55 +0000)]
Fix small bug in isMoveInstr -> COPY translation

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

13 years agoAutomatically fold COPY instructions into stack load/store.
Jakob Stoklund Olesen [Fri, 9 Jul 2010 20:43:13 +0000 (20:43 +0000)]
Automatically fold COPY instructions into stack load/store.

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

13 years agoFix a few tests
Jakob Stoklund Olesen [Fri, 9 Jul 2010 20:43:09 +0000 (20:43 +0000)]
Fix a few tests

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

13 years agoRemat uncoalescable COPY instrs
Jakob Stoklund Olesen [Fri, 9 Jul 2010 20:43:05 +0000 (20:43 +0000)]
Remat uncoalescable COPY instrs

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

13 years agoIn the presence of variable sized objects, allocate an emergency spill slot.
Jim Grosbach [Fri, 9 Jul 2010 20:27:06 +0000 (20:27 +0000)]
In the presence of variable sized objects, allocate an emergency spill slot.
rdar://8131327

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

13 years agoClarify what mysterious check means.
Bill Wendling [Fri, 9 Jul 2010 19:44:12 +0000 (19:44 +0000)]
Clarify what mysterious check means.

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

13 years agoAdd a target triple.
Dan Gohman [Fri, 9 Jul 2010 19:17:36 +0000 (19:17 +0000)]
Add a target triple.

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

13 years agoFix MachineLICM to actually visit inner loops.
Dan Gohman [Fri, 9 Jul 2010 18:49:45 +0000 (18:49 +0000)]
Fix MachineLICM to actually visit inner loops.

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

13 years agoStart the support for AVX instructions with 256-bit %ymm registers. A couple of
Bruno Cardoso Lopes [Fri, 9 Jul 2010 18:27:43 +0000 (18:27 +0000)]
Start the support for AVX instructions with 256-bit %ymm registers. A couple of
notes:
- The instructions are being added with dummy placeholder patterns using some 256
  specifiers, this is not meant to work now, but since there are some multiclasses
  generic enough to accept them,  when we go for codegen, the stuff will be already
  there.
- Add VEX encoding bits to support YMM
- Add MOVUPS and MOVAPS in the first round
- Use "Y" as suffix for those Instructions: MOVUPSYrr, ...
- All AVX instructions in X86InstrSSE.td will move soon to a new X86InstrAVX
  file.

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

13 years agoChange TII::foldMemoryOperand API to require the machine instruction to be
Jakob Stoklund Olesen [Fri, 9 Jul 2010 17:29:08 +0000 (17:29 +0000)]
Change TII::foldMemoryOperand API to require the machine instruction to be
inserted in a MBB, and return an already inserted MI.

This target API change is necessary to allow foldMemoryOperand to call
storeToStackSlot and loadFromStackSlot when folding a COPY to a stack slot
reference in a target independent way.

The foldMemoryOperandImpl hook is going to change in the same way, but I'll wait
until COPY folding is actually implemented. Most targets only fold copies and
won't need to specialize this hook at all.

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:51:20 +0000 (16:51 +0000)]
cache result of operator*

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

13 years agoremove useless cast and fix typos in comment
Gabor Greif [Fri, 9 Jul 2010 16:42:04 +0000 (16:42 +0000)]
remove useless cast and fix typos in comment

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:39:02 +0000 (16:39 +0000)]
cache result of operator*

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

13 years ago--- Reverse-merging r107947 into '.':
Bob Wilson [Fri, 9 Jul 2010 16:37:18 +0000 (16:37 +0000)]
--- Reverse-merging r107947 into '.':
U    utils/TableGen/FastISelEmitter.cpp
--- Reverse-merging r107943 into '.':
U    test/CodeGen/X86/fast-isel.ll
U    test/CodeGen/X86/fast-isel-loads.ll
U    include/llvm/Target/TargetLowering.h
U    include/llvm/Support/PassNameParser.h
U    include/llvm/CodeGen/FunctionLoweringInfo.h
U    include/llvm/CodeGen/CallingConvLower.h
U    include/llvm/CodeGen/FastISel.h
U    include/llvm/CodeGen/SelectionDAGISel.h
U    lib/CodeGen/LLVMTargetMachine.cpp
U    lib/CodeGen/CallingConvLower.cpp
U    lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
U    lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
U    lib/CodeGen/SelectionDAG/FastISel.cpp
U    lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
U    lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
U    lib/CodeGen/SelectionDAG/InstrEmitter.cpp
U    lib/CodeGen/SelectionDAG/TargetLowering.cpp
U    lib/Target/XCore/XCoreISelLowering.cpp
U    lib/Target/XCore/XCoreISelLowering.h
U    lib/Target/X86/X86ISelLowering.cpp
U    lib/Target/X86/X86FastISel.cpp
U    lib/Target/X86/X86ISelLowering.h

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:31:08 +0000 (16:31 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:26:41 +0000 (16:26 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:22:36 +0000 (16:22 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:17:52 +0000 (16:17 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:08:33 +0000 (16:08 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 16:01:21 +0000 (16:01 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 15:53:42 +0000 (15:53 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 15:52:36 +0000 (15:52 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 15:40:10 +0000 (15:40 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 15:25:42 +0000 (15:25 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 15:25:09 +0000 (15:25 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 15:01:36 +0000 (15:01 +0000)]
cache result of operator*

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

13 years agocache result of operator* (found by inspection)
Gabor Greif [Fri, 9 Jul 2010 14:48:08 +0000 (14:48 +0000)]
cache result of operator* (found by inspection)

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

13 years agofix clang selfhost issue (shadowing)
Gabor Greif [Fri, 9 Jul 2010 14:46:49 +0000 (14:46 +0000)]
fix clang selfhost issue (shadowing)

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 14:36:49 +0000 (14:36 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 14:29:14 +0000 (14:29 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 14:28:41 +0000 (14:28 +0000)]
cache result of operator*

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

13 years agocache result of operator*
Gabor Greif [Fri, 9 Jul 2010 14:18:23 +0000 (14:18 +0000)]
cache result of operator*

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

13 years agocache operator*'s result (in multiple functions)
Gabor Greif [Fri, 9 Jul 2010 14:02:13 +0000 (14:02 +0000)]
cache operator*'s result (in multiple functions)

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

13 years agorefactor type expressions and cache operator*'s result
Gabor Greif [Fri, 9 Jul 2010 14:00:56 +0000 (14:00 +0000)]
refactor type expressions and cache operator*'s result

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

13 years agodo not repeatedly dereference use_iterator
Gabor Greif [Fri, 9 Jul 2010 13:17:13 +0000 (13:17 +0000)]
do not repeatedly dereference use_iterator

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

13 years agodo not repeatedly dereference use_iterator
Gabor Greif [Fri, 9 Jul 2010 12:23:50 +0000 (12:23 +0000)]
do not repeatedly dereference use_iterator

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

13 years agotwo more cases of reuse result of operator*, found by inspection
Gabor Greif [Fri, 9 Jul 2010 10:42:13 +0000 (10:42 +0000)]
two more cases of reuse result of operator*, found by inspection

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

13 years agoanother case of reuse result of operator*, it is expensive to recompute
Gabor Greif [Fri, 9 Jul 2010 10:32:31 +0000 (10:32 +0000)]
another case of reuse result of operator*, it is expensive to recompute

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

13 years agoreuse result of operator*, it is expensive to recompute
Gabor Greif [Fri, 9 Jul 2010 09:50:51 +0000 (09:50 +0000)]
reuse result of operator*, it is expensive to recompute

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

13 years agoAdded a support for inserting new MBBs into the numbering.
Lang Hames [Fri, 9 Jul 2010 09:19:23 +0000 (09:19 +0000)]
Added a support for inserting new MBBs into the numbering.

Unlike insertMachineInstrInMaps this does not guarantee live intervals will
remain correct. The caller will need to manually update intervals to account
for the changes made to the CFG.

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

13 years agoAvoid creating %physreg:subidx operands in SimpleRegisterCoalescing::RemoveCopyByComm...
Jakob Stoklund Olesen [Fri, 9 Jul 2010 05:56:21 +0000 (05:56 +0000)]
Avoid creating %physreg:subidx operands in SimpleRegisterCoalescing::RemoveCopyByCommutingDef.

This fixes PR7602.

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

13 years agoDeal with a few remaining spots that assume physical registers have live intervals.
Jakob Stoklund Olesen [Fri, 9 Jul 2010 04:35:38 +0000 (04:35 +0000)]
Deal with a few remaining spots that assume physical registers have live intervals.

This fixes PR7601.

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

13 years agoMerge VEX enums with other x86 enum forms. Also fix all checks of which VEX
Bruno Cardoso Lopes [Fri, 9 Jul 2010 01:56:45 +0000 (01:56 +0000)]
Merge VEX enums with other x86 enum forms. Also fix all checks of which VEX
fields to use.

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

13 years agoFix test to be less sensitive of regalloc accidents
Jakob Stoklund Olesen [Fri, 9 Jul 2010 01:32:11 +0000 (01:32 +0000)]
Fix test to be less sensitive of regalloc accidents

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

13 years agoFix broken isCopy handling in TrimLiveIntervalToLastUse.
Jakob Stoklund Olesen [Fri, 9 Jul 2010 01:27:21 +0000 (01:27 +0000)]
Fix broken isCopy handling in TrimLiveIntervalToLastUse.

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

13 years agoHandle COPY in VirtRegRewriter.
Jakob Stoklund Olesen [Fri, 9 Jul 2010 01:27:19 +0000 (01:27 +0000)]
Handle COPY in VirtRegRewriter.

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

13 years agoFix the memoperand offsets in code generated for va_start.
Dan Gohman [Fri, 9 Jul 2010 01:06:48 +0000 (01:06 +0000)]
Fix the memoperand offsets in code generated for va_start.

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

13 years agoThese changes should have accompanied r107943.
Dan Gohman [Fri, 9 Jul 2010 00:59:16 +0000 (00:59 +0000)]
These changes should have accompanied r107943.

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

13 years agohave the mc lowering process handle a few tail call forms, lowering them to
Chris Lattner [Fri, 9 Jul 2010 00:49:41 +0000 (00:49 +0000)]
have the mc lowering process handle a few tail call forms, lowering them to
jumps where possible and turning the TAILCALL marker in the instruction
asm string into a proper comment.

This eliminates a FIXME and is on the path to finishing:
rdar://7639610 - eliminate encoding and asm info for TAILJMPd TAILJMPr TAILJMPn, etc.

However, I can't eliminate the encodings for these instructions because the JIT
still exists and has its own copy of the encoder, sigh.

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

13 years agoPrint "dregpair" NEON operands with a space between them, for readability and
Bob Wilson [Fri, 9 Jul 2010 00:47:20 +0000 (00:47 +0000)]
Print "dregpair" NEON operands with a space between them, for readability and
consistency with other instructions that have lists of register operands.

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

13 years agoRe-apply bottom-up fast-isel, with fixes. Be very careful to avoid emitting
Dan Gohman [Fri, 9 Jul 2010 00:39:23 +0000 (00:39 +0000)]
Re-apply bottom-up fast-isel, with fixes. Be very careful to avoid emitting
a DBG_VALUE after a terminator, or emitting any instructions before an EH_LABEL.

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

13 years agoFactor out x86 segment override prefix encoding, and also use it for VEX
Bruno Cardoso Lopes [Fri, 9 Jul 2010 00:38:14 +0000 (00:38 +0000)]
Factor out x86 segment override prefix encoding, and also use it for VEX

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

13 years agoReenable DAG combining for vector shuffles. It looks like it was temporarily
Bob Wilson [Fri, 9 Jul 2010 00:38:12 +0000 (00:38 +0000)]
Reenable DAG combining for vector shuffles.  It looks like it was temporarily
disabled and then never turned back on again.  Adjust some tests, one because
this change avoids an unnecessary instruction, and the other to make it
continue testing what it was intended to test.

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

13 years agoreject pseudo instructions early in the encoder.
Chris Lattner [Fri, 9 Jul 2010 00:17:50 +0000 (00:17 +0000)]
reject pseudo instructions early in the encoder.

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

13 years agoRemove trailing whitespaces from file
Bruno Cardoso Lopes [Fri, 9 Jul 2010 00:07:19 +0000 (00:07 +0000)]
Remove trailing whitespaces from file

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

13 years agoChange LEA to have 5 operands for its memory operand, just
Chris Lattner [Thu, 8 Jul 2010 23:46:44 +0000 (23:46 +0000)]
Change LEA to have 5 operands for its memory operand, just
like all other instructions, even though a segment is not
allowed.  This resolves a bunch of gross hacks in the
encoder and makes LEA more consistent with the rest of the
instruction set.

No functionality change.

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

13 years agoReverting r107918 and r107919. Radar 8063111.
Stuart Hastings [Thu, 8 Jul 2010 23:25:39 +0000 (23:25 +0000)]
Reverting r107918 and r107919.  Radar 8063111.

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

13 years agoRevert "Fix broken isCopy handling in TrimLiveIntervalToLastUse"
Jakob Stoklund Olesen [Thu, 8 Jul 2010 22:52:47 +0000 (22:52 +0000)]
Revert "Fix broken isCopy handling in TrimLiveIntervalToLastUse"

This reverts commit 107921. It broke the clang self host.

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

13 years agoadd some long-overdue enums to refer to the parts of the 5-operand
Chris Lattner [Thu, 8 Jul 2010 22:41:28 +0000 (22:41 +0000)]
add some long-overdue enums to refer to the parts of the 5-operand
X86 memory operand.

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

13 years agoRelax assertion. In optimized code, it is possible that first instruction is coming...
Devang Patel [Thu, 8 Jul 2010 22:39:20 +0000 (22:39 +0000)]
Relax assertion. In optimized code, it is possible that first instruction is coming from a inlined function.
This fixes PR7596 .

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

13 years agoExtension of r107506. Make sure that we don't mark a function as having a call
Bill Wendling [Thu, 8 Jul 2010 22:38:02 +0000 (22:38 +0000)]
Extension of r107506. Make sure that we don't mark a function as having a call
if the inline ASM doesn't need a stack frame.

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

13 years agoFix broken isCopy handling in TrimLiveIntervalToLastUse
Jakob Stoklund Olesen [Thu, 8 Jul 2010 22:30:38 +0000 (22:30 +0000)]
Fix broken isCopy handling in TrimLiveIntervalToLastUse

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

13 years agoRemember the VR64 register class
Jakob Stoklund Olesen [Thu, 8 Jul 2010 22:30:35 +0000 (22:30 +0000)]
Remember the VR64 register class

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

13 years agoFix decl/def debug info for template functions. Radar 8063111.
Stuart Hastings [Thu, 8 Jul 2010 22:28:59 +0000 (22:28 +0000)]
Fix decl/def debug info for template functions.  Radar 8063111.

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

13 years agoRework segment prefix emission code to handle segments
Chris Lattner [Thu, 8 Jul 2010 22:28:12 +0000 (22:28 +0000)]
Rework segment prefix emission code to handle segments
in memory operands at the same type as hard coded segments.
This fixes problems where we'd emit the segment override after
the REX prefix on instructions like:
mov %gs:(%rdi), %rax

This fixes rdar://8127102.  I have several cleanup patches coming
next.

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

13 years agointroduce a new X86II::getMemoryOperandNo method, which
Chris Lattner [Thu, 8 Jul 2010 22:27:06 +0000 (22:27 +0000)]
introduce a new X86II::getMemoryOperandNo method, which
returns the start of the memory operand for an instruction.

Introduce a new "X86AddrSegment" enum to reduce # magic numbers
referring to X86 memory operand layout.

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

13 years agoSwitch SPU calling convention (function arguments)
Kalle Raiskila [Thu, 8 Jul 2010 21:15:22 +0000 (21:15 +0000)]
Switch SPU calling convention (function arguments)
to a Tablegen implementation.

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

13 years agoTest case for r107843. Radar 8152866.
Stuart Hastings [Thu, 8 Jul 2010 20:31:05 +0000 (20:31 +0000)]
Test case for r107843.  Radar 8152866.

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

13 years agoRevert some unneeded parts of the change in r107886 for the
Kevin Enderby [Thu, 8 Jul 2010 20:30:44 +0000 (20:30 +0000)]
Revert some unneeded parts of the change in r107886 for the
.weak_def_can_be_hidden directive.  Chris pointed out that the MCAsmInfo.h/.cpp
chunks aren't needed for this until the compiler starts generating these.  And
when that happens it will be more convenient for it to be a bool than a const
char*.

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

13 years agoCheck for FiniteOnlyFPMath as well.
Evan Cheng [Thu, 8 Jul 2010 20:12:24 +0000 (20:12 +0000)]
Check for FiniteOnlyFPMath as well.

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

13 years agoReuse DIEInteger for 1. This is frequently used while emitting an attribute using...
Devang Patel [Thu, 8 Jul 2010 20:10:35 +0000 (20:10 +0000)]
Reuse DIEInteger for 1. This is frequently used while emitting an attribute using dwarf::DW_FORM_flag form.

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

13 years agoTeach the x86 floating point stackifier to handle COPY instructions.
Jakob Stoklund Olesen [Thu, 8 Jul 2010 19:46:30 +0000 (19:46 +0000)]
Teach the x86 floating point stackifier to handle COPY instructions.

This pass runs before COPY instructions are passed to copyPhysReg, so we simply
translate COPY to the proper pseudo instruction. Note that copyPhysReg does not
handle floating point stack copies.

Once COPY is used everywhere, this can be cleaned up a bit, and most of the
pseudo instructions can be removed.

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

13 years agoImplement X86InstrInfo::copyPhysReg
Jakob Stoklund Olesen [Thu, 8 Jul 2010 19:46:25 +0000 (19:46 +0000)]
Implement X86InstrInfo::copyPhysReg

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

13 years agoThe NEONPreAllocPass should never have to assign fixed registers anymore.
Bob Wilson [Thu, 8 Jul 2010 17:45:26 +0000 (17:45 +0000)]
The NEONPreAllocPass should never have to assign fixed registers anymore.
This pass can go away entirely soon.

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

13 years agoFor big-endian systems, VLD2/VST2 with 32-bit vector elements will swap the
Bob Wilson [Thu, 8 Jul 2010 17:44:00 +0000 (17:44 +0000)]
For big-endian systems, VLD2/VST2 with 32-bit vector elements will swap the
words within the 64-bit D registers.  Use VLD1/VST1 with 64-bit elements
instead.

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

13 years agoAfter r107880, findSurvivorReg() no longer needs to be public.
Jim Grosbach [Thu, 8 Jul 2010 17:27:23 +0000 (17:27 +0000)]
After r107880, findSurvivorReg() no longer needs to be public.

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

13 years agoAdded the darwin .weak_def_can_be_hidden directive.
Kevin Enderby [Thu, 8 Jul 2010 17:22:42 +0000 (17:22 +0000)]
Added the darwin .weak_def_can_be_hidden directive.

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

13 years agoonly dereference iterator once in the loop
Gabor Greif [Thu, 8 Jul 2010 16:56:18 +0000 (16:56 +0000)]
only dereference iterator once in the loop
(by caching the result we save a potentially expensive dereference)

also use typedefs to shorten type declarations

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

13 years agoClean up a comment.
Bob Wilson [Thu, 8 Jul 2010 16:54:45 +0000 (16:54 +0000)]
Clean up a comment.

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

13 years agoremove unneeded parens
Gabor Greif [Thu, 8 Jul 2010 16:52:57 +0000 (16:52 +0000)]
remove unneeded parens

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

13 years agoClean up scavengeRegister() a bit to prefer available regs, which allows
Jim Grosbach [Thu, 8 Jul 2010 16:49:26 +0000 (16:49 +0000)]
Clean up scavengeRegister() a bit to prefer available regs, which allows
the simplification of frame index register scavenging to not have to check
for available registers directly and instead just let scavengeRegister()
handle it.

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

13 years agoConvert EXTRACT_SUBREG to COPY when emitting machine instrs.
Jakob Stoklund Olesen [Thu, 8 Jul 2010 16:40:22 +0000 (16:40 +0000)]
Convert EXTRACT_SUBREG to COPY when emitting machine instrs.

EXTRACT_SUBREG no longer appears as a machine instruction. Use COPY instead.

Add isCopy() checks in many places using isMoveInstr() and isExtractSubreg().
The isMoveInstr hook will be removed later.

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

13 years agoRemove references to INSERT_SUBREG after de-SSA.
Jakob Stoklund Olesen [Thu, 8 Jul 2010 16:40:15 +0000 (16:40 +0000)]
Remove references to INSERT_SUBREG after de-SSA.

Fix X86InstrInfo::convertToThreeAddressWithLEA to generate COPY instead of
INSERT_SUBREG.

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

13 years agoUse std::vector rather than SmallVector here because SmallVector
Duncan Sands [Thu, 8 Jul 2010 13:06:08 +0000 (13:06 +0000)]
Use std::vector rather than SmallVector here because SmallVector
causes some versions of gcc to crash when building LLVM.

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