#
edbb58c5 |
| 10-Jan-2012 |
David Blaikie <dblaikie@gmail.com> |
Remove unnecessary default cases in switches that cover all enum values.
llvm-svn: 147855
|
#
7fae11b2 |
| 14-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
- Add MachineInstrBundle.h and MachineInstrBundle.cpp. This includes a function to finalize MI bundles (i.e. add BUNDLE instruction and computing register def and use lists of the BUNDLE instruct
- Add MachineInstrBundle.h and MachineInstrBundle.cpp. This includes a function to finalize MI bundles (i.e. add BUNDLE instruction and computing register def and use lists of the BUNDLE instruction) and a pass to unpack bundles. - Teach more of MachineBasic and MachineInstr methods to be bundle aware. - Switch Thumb2 IT block to MI bundles and delete the hazard recognizer hack to prevent IT blocks from being broken apart.
llvm-svn: 146542
show more ...
|
#
cdf89fde |
| 08-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
Make MachineInstr instruction property queries more flexible. This change all clients to decide whether to look inside bundled instructions and whether the query should return true if any / all bundl
Make MachineInstr instruction property queries more flexible. This change all clients to decide whether to look inside bundled instructions and whether the query should return true if any / all bundled instructions have the queried property.
llvm-svn: 146168
show more ...
|
#
7f8e563a |
| 07-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
Add bundle aware API for querying instruction properties and switch the code generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API.
For properties like mayL
Add bundle aware API for querying instruction properties and switch the code generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API.
For properties like mayLoad / mayStore, look into the bundle and if any of the bundled instructions has the property it would return true. For properties like isPredicable, only return true if *all* of the bundled instructions have the property. For properties like canFoldAsLoad, isCompare, conservatively return false for bundles.
llvm-svn: 146026
show more ...
|
#
6ad68485 |
| 07-Dec-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add missing check.
llvm-svn: 146004
|
#
b0d91abe |
| 07-Dec-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add MachineOperand IsInternalRead flag.
This flag is used when bundling machine instructions. It indicates whether the operand reads a value defined inside or outside its bundle.
llvm-svn: 145997
|
#
2a81dd4a |
| 06-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
First chunk of MachineInstr bundle support. 1. Added opcode BUNDLE 2. Taught MachineInstr class to deal with bundled MIs 3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an itera
First chunk of MachineInstr bundle support. 1. Added opcode BUNDLE 2. Taught MachineInstr class to deal with bundled MIs 3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs 4. Taught MachineBasicBlock methods about bundled MIs
llvm-svn: 145975
show more ...
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4 |
|
#
82cd9e81 |
| 08-Nov-2011 |
Pete Cooper <peter_cooper@apple.com> |
Added invariant field to the DAG.getLoad method and changed all calls.
When this field is true it means that the load is from constant (runt-time or compile-time) and so can be hoisted from loops or
Added invariant field to the DAG.getLoad method and changed all calls.
When this field is true it means that the load is from constant (runt-time or compile-time) and so can be hoisted from loops or moved around other memory accesses
llvm-svn: 144100
show more ...
|
Revision tags: llvmorg-3.0.0-rc3 |
|
#
65ba66c6 |
| 03-Nov-2011 |
Pete Cooper <peter_cooper@apple.com> |
Reverted r143600 - selector reference change
llvm-svn: 143646
|
#
e6173d81 |
| 03-Nov-2011 |
Pete Cooper <peter_cooper@apple.com> |
Treat objc selector reference globals as invariant so that MachineLICM can hoist them out of loops. Fixes <rdar://problem/6027699>
llvm-svn: 143600
|
Revision tags: llvmorg-3.0.0-rc2, llvmorg-3.0.0-rc1 |
|
#
84882259 |
| 13-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Add missing braces to pacify GCC's -Wparentheses.
llvm-svn: 141842
|
#
35b362fa |
| 12-Oct-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add MachineInstr::getRegClassConstraint().
Most instructions have some requirements for their register operands. Usually, this is expressed as register class constraints in the MCInstrDesc, but for
Add MachineInstr::getRegClassConstraint().
Most instructions have some requirements for their register operands. Usually, this is expressed as register class constraints in the MCInstrDesc, but for inline assembly the constraints are encoded in the flag words.
llvm-svn: 141835
show more ...
|
#
1e73716e |
| 12-Oct-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Extract a method for finding the inline asm flag operand.
llvm-svn: 141834
|
#
24abd9d9 |
| 12-Oct-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Encode register class constreaints in inline asm instructions.
The inline asm operand constraint is initially encoded in the virtual register for the operand, but that register class may change duri
Encode register class constreaints in inline asm instructions.
The inline asm operand constraint is initially encoded in the virtual register for the operand, but that register class may change during coalescing, and the original constraint is lost.
Encode the original register class as part of the flag word for each inline asm operand. This makes it possible to recover the actual constraint required by inline asm, just like we can for normal instructions.
llvm-svn: 141833
show more ...
|
#
463b05a2 |
| 29-Sep-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove NumImplicitOps which is now unused.
llvm-svn: 140767
|
#
2318d1e0 |
| 29-Sep-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Rewrite MachineInstr::addOperand() to avoid NumImplicitOps.
The function needs to scan the implicit operands anyway, so no performance is won by caching the number of implicit operands added to an i
Rewrite MachineInstr::addOperand() to avoid NumImplicitOps.
The function needs to scan the implicit operands anyway, so no performance is won by caching the number of implicit operands added to an instruction.
This also fixes a bug when adding operands after an implicit operand has been added manually. The NumImplicitOps count wasn't kept up to date.
MachineInstr::addOperand() will now consistently place all explicit operands before all the implicit operands, regardless of the order they are added. It is possible to change an MI opcode and add additional explicit operands. They will be inserted before any existing implicit operands.
The only exception is inline asm instructions where operands are never reordered. This is because of a hack that marks explicit clobber regs on inline asm as <implicit-def> to please the fast register allocator. This hack can go away when InstrEmitter and FastIsel can add exact <dead> flags to physreg defs.
llvm-svn: 140744
show more ...
|
#
ed16ec42 |
| 29-Aug-2011 |
Jim Grosbach <grosbach@apple.com> |
Thumb2 parsing and encoding for IT blocks.
llvm-svn: 138773
|
#
dee9e8a3 |
| 24-Aug-2011 |
Jim Grosbach <grosbach@apple.com> |
Tidy up. Trailing whitespace.
llvm-svn: 138437
|
#
9eb77bf6 |
| 19-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't treat a partial <def,undef> operand as a read.
Normally, a partial register def is treated as reading the super-register unless it also defines the full register like this:
%vreg110:sub_32b
Don't treat a partial <def,undef> operand as a read.
Normally, a partial register def is treated as reading the super-register unless it also defines the full register like this:
%vreg110:sub_32bit<def> = COPY %vreg77:sub_32bit, %vreg110<imp-def>
This patch also uses the <undef> flag on partial defs to recognize non-reading operands:
%vreg110:sub_32bit<def,undef> = COPY %vreg77:sub_32bit
This fixes a subtle bug in RegisterCoalescer where LIS->shrinkToUses would treat a coalesced copy as still reading the register, extending the live range artificially.
My test case only works when I disable DCE so a dead copy is left for RegisterCoalescer, so I am not including it.
<rdar://problem/9967101>
llvm-svn: 138018
show more ...
|
#
d61b1d50 |
| 04-Aug-2011 |
Devang Patel <dpatel@apple.com> |
Print DBG_VALUE variable's location info as a comment.
llvm-svn: 136916
|
#
bf8cc60d |
| 07-Jul-2011 |
Devang Patel <dpatel@apple.com> |
If known DebugLocs do not match then two DBG_VALUE machine instructions are not identical. For example,
DBG_VALUE 3.310000e+02, 0, !"ds"; dbg:sse.stepfft.c:138:18 @[ sse.stepfft.c:32:10 ]
If known DebugLocs do not match then two DBG_VALUE machine instructions are not identical. For example,
DBG_VALUE 3.310000e+02, 0, !"ds"; dbg:sse.stepfft.c:138:18 @[ sse.stepfft.c:32:10 ] DBG_VALUE 3.310000e+02, 0, !"ds"; dbg:sse.stepfft.c:138:18 @[ sse.stepfft.c:31:10 ]
These two MIs represent identical value, 3.31..., for one variable, ds, but they are not identical because the represent two separate instances of inlined variable "ds".
llvm-svn: 134620
show more ...
|
#
25a404eb |
| 02-Jul-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Include a source location when complaining about bad inline assembly.
Add a MI->emitError() method that the backend can use to report errors related to inline assembly. Call it from X86FloatingPoint
Include a source location when complaining about bad inline assembly.
Add a MI->emitError() method that the backend can use to report errors related to inline assembly. Call it from X86FloatingPoint.cpp when the constraints are wrong.
This enables proper clang diagnostics from the backend:
$ clang -c pr30848.c pr30848.c:5:12: error: Inline asm output regs must be last on the x87 stack __asm__ ("" : "=u" (d)); /* { dg-error "output regs" } */ ^ 1 error generated.
llvm-svn: 134307
show more ...
|
#
7da0f9a5 |
| 01-Jul-2011 |
Cameron Zwarich <zwarich@apple.com> |
Take a stab at fixing the llvm-x86_64-linux-checks failure.
llvm-svn: 134287
|
#
6cc775f9 |
| 28-Jun-2011 |
Evan Cheng <evan.cheng@apple.com> |
- Rename TargetInstrDesc, TargetOperandInfo to MCInstrDesc and MCOperandInfo and sink them into MC layer. - Added MCInstrInfo, which captures the tablegen generated static data. Chang TargetInstrInfo
- Rename TargetInstrDesc, TargetOperandInfo to MCInstrDesc and MCOperandInfo and sink them into MC layer. - Added MCInstrInfo, which captures the tablegen generated static data. Chang TargetInstrInfo so it's based off MCInstrInfo.
llvm-svn: 134021
show more ...
|
#
537a302d |
| 27-Jun-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Distinguish early clobber output operands from clobbered registers.
Both become <earlyclobber> defs on the INLINEASM MachineInstr, but we now use two different asm operand kinds.
The new Kind_Clobb
Distinguish early clobber output operands from clobbered registers.
Both become <earlyclobber> defs on the INLINEASM MachineInstr, but we now use two different asm operand kinds.
The new Kind_Clobber is treated identically to the old Kind_RegDefEarlyClobber for now, but x87 floating point stack inline assembly does care about the difference.
This will pop a register off the stack:
asm("fstp %st" : : "t"(x) : "st");
While this will pop the input and push an output:
asm("fst %st" : "=&t"(r) : "t"(x));
We need to know if ST0 was a clobber or an output operand, and we can't depend on <dead> flags for that.
llvm-svn: 133902
show more ...
|