- Oct 17, 2008
-
-
Dan Gohman authored
shift counts, and patterns that match dynamic shift counts when the subtract is obscured by a truncate node. Add DAGCombiner support for recognizing rotate patterns when the shift counts are defined by truncate nodes. Fix and simplify the code for commuting shld and shrd instructions to work even when the given instruction doesn't have a parent, and when the caller needs a new instruction. These changes allow LLVM to use the shld, shrd, rol, and ror instructions on x86 to replace equivalent code using two shifts and an or in many more cases. llvm-svn: 57662
-
- Oct 16, 2008
-
-
Dan Gohman authored
llvm-svn: 57622
-
- Oct 12, 2008
-
-
Anton Korobeynikov authored
llvm-svn: 57414
-
- Oct 04, 2008
-
-
Anton Korobeynikov authored
llvm-svn: 57048
-
- Oct 03, 2008
-
-
Dan Gohman authored
isReg, etc., from isRegister, etc. llvm-svn: 57006
-
- Sep 30, 2008
-
-
Dan Gohman authored
and X86FastISel.cpp into X86MachineFunction.h, so that it can be shared, instead of having each selector keep track of its own. llvm-svn: 56825
-
- Sep 26, 2008
-
-
Dan Gohman authored
llvm-svn: 56698
-
Evan Cheng authored
llvm-svn: 56675
-
- Sep 23, 2008
-
-
Dan Gohman authored
X86ISelDAGToDAG.cpp and into X86InstrInfo.cpp. This will allow it to be reused by FastISel. llvm-svn: 56494
-
- Sep 13, 2008
-
-
Dan Gohman authored
isImmediate(), isRegister(), and friends, to avoid confusion about having two different names with the same meaning. I'm not attached to the longer names, and would be ok with changing to the shorter names if others prefer it. llvm-svn: 56189
-
- Aug 30, 2008
-
-
Evan Cheng authored
llvm-svn: 55552
-
Evan Cheng authored
llvm-svn: 55548
-
- Aug 29, 2008
-
-
Evan Cheng authored
llvm-svn: 55521
-
- Aug 26, 2008
-
-
Owen Anderson authored
llvm-svn: 55377
-
Owen Anderson authored
was inserted or not. This allows bitcast in fast isel to properly handle the case where an appropriate reg-to-reg copy is not available. llvm-svn: 55375
-
- Aug 15, 2008
-
-
Owen Anderson authored
Convert uses of std::vector in TargetInstrInfo to SmallVector. This change had to be propoagated down into all the targets and up into all clients of this API. llvm-svn: 54802
-
- Aug 08, 2008
-
-
Dan Gohman authored
X86ISelLowering creates. llvm-svn: 54544
-
- Aug 07, 2008
-
-
Dan Gohman authored
LowerSubregs, and fix an x86-64 isel bug that this exposed. SUBREG_TO_REG for x86-64 implicit zero extension is only safe for isel to generate when the source is known to always have zeros in the high 32 bits. The EXTRACT_SUBREG instruction does not clear the high 32 bits. llvm-svn: 54444
-
- Jul 27, 2008
-
-
Dan Gohman authored
llvm-svn: 54128
-
- Jul 21, 2008
-
-
Evan Cheng authored
Use movaps instead of movups to spill 16-byte vector values when default alignment is >= 16. This fixes some massive performance regressions. llvm-svn: 53844
-
- Jul 19, 2008
-
-
Anton Korobeynikov authored
llvm-svn: 53784
-
- Jul 17, 2008
-
-
Dan Gohman authored
replacement of multiple values. This is slightly more efficient than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically could be optimized even further. However, an important property of this new function is that it handles the case where the source value set and destination value set overlap. This makes it feasible for isel to use SelectNodeTo in many very common cases, which is advantageous because SelectNodeTo avoids a temporary node and it doesn't require CSEMap updates for users of values that don't change position. Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to handle operand lists more efficiently, and to correctly handle a number of corner cases to which its new wider use exposes it. This commit also includes a change to the encoding of post-isel opcodes in SDNodes; now instead of being sandwiched between the target-independent pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel opcodes are now represented as negative values. This makes it possible to test if an opcode is pre-isel or post-isel without having to know the size of the current target's post-isel instruction set. These changes speed up llc overall by 3% and reduce memory usage by 10% on the InstructionCombining.cpp testcase with -fast and -regalloc=local. llvm-svn: 53728
-
- Jul 12, 2008
-
-
Dan Gohman authored
has exactly one MachineMemOperand, and change some X86 lowering code to make use of it. llvm-svn: 53498
-
- Jul 08, 2008
-
-
Dan Gohman authored
MachineMemOperands. The pools are owned by MachineFunctions. This drastically reduces the number of calls to malloc/free made during the "Emit" phase of scheduling, as well as later phases in CodeGen. Combined with other changes, this speeds up the "instruction selection" phase of CodeGen by 10% in some cases. llvm-svn: 53212
-
- Jul 07, 2008
-
-
Dan Gohman authored
llvm-svn: 53177
-
- Jul 03, 2008
-
-
Evan Cheng authored
- Remove calls to copyKillDeadInfo which is an N^2 function. Instead, propagate kill / dead markers as new instructions are constructed in foldMemoryOperand, convertToThressAddress, etc. - Also remove LiveVariables::instructionChanged, etc. Replace all calls with cheaper calls which update VarInfo kill list. llvm-svn: 53097
-
Evan Cheng authored
llvm-svn: 53060
-
Owen Anderson authored
Make LiveVariables even more optional, by making it optional in the call to TargetInstrInfo::convertToThreeAddressInstruction Also, if LV isn't around, then TwoAddr doesn't need to be updating flags, since they won't have been set in the first place. llvm-svn: 53058
-
- Jul 01, 2008
-
-
Dan Gohman authored
the need for a flavor operand, and add a new SDNode subclass, LabelSDNode, for use with them to eliminate the need for a label id operand. Change instruction selection to let these label nodes through unmodified instead of creating copies of them. Teach the MachineInstr emitter how to emit a MachineInstr directly from an ISD label node. This avoids the need for allocating SDNodes for the label id and flavor value, as well as SDNodes for each of the post-isel label, label id, and label flavor. llvm-svn: 52943
-
- Jun 24, 2008
-
-
Evan Cheng authored
If it's determined safe, remat MOV32r0 (i.e. xor r, r) and others as it is instead of using the longer MOV32ri instruction. llvm-svn: 52670
-
- Jun 16, 2008
-
-
Evan Cheng authored
llvm-svn: 52308
-
- Jun 06, 2008
-
-
Duncan Sands authored
and better control the abstraction. Rename the type to MVT. To update out-of-tree patches, the main thing to do is to rename MVT::ValueType to MVT, and rewrite expressions like MVT::getSizeInBits(VT) in the form VT.getSizeInBits(). Use VT.getSimpleVT() to extract a MVT::SimpleValueType for use in switch statements (you will get an assert failure if VT is an extended value type - these shouldn't exist after type legalization). This results in a small speedup of codegen and no new testsuite failures (x86-64 linux). llvm-svn: 52044
-
- May 23, 2008
-
-
Dan Gohman authored
load-folding table entries for PMULDQ and PMULLD. llvm-svn: 51489
-
- May 14, 2008
-
-
Dan Gohman authored
This eliminates the need for several awkward casts, including the last dynamic_cast under lib/Target. llvm-svn: 51091
-
- May 12, 2008
-
-
Bill Wendling authored
"is{Trivially,Really}ReMaterializable" methods. llvm-svn: 51001
-
- May 02, 2008
-
-
Evan Cheng authored
llvm-svn: 50578
-
Evan Cheng authored
Not safe folding a load + FsXORPSrr into FsXORPSrm. It's loading a FR64 value but the load folding variant expects a 16-byte aligned address. llvm-svn: 50574
-
- Apr 21, 2008
-
-
Nicolas Geoffray authored
llvm-svn: 50007
-
- Apr 17, 2008
-
-
Evan Cheng authored
llvm-svn: 49830
-
- Apr 16, 2008
-
-
Nicolas Geoffray authored
Infrastructure for getting the machine code size of a function and an instruction. X86, PowerPC and ARM are implemented llvm-svn: 49809
-