- May 22, 2010
-
-
- May 06, 2010
-
-
Dan Gohman authored
doesn't have to guess. llvm-svn: 103194
-
Evan Cheng authored
llvm-svn: 103193
-
- Apr 29, 2010
-
-
Evan Cheng authored
llvm-svn: 102577
-
- Apr 27, 2010
-
-
Chris Lattner authored
otherwise labels get incorrectly merged. We handled this by emitting a ".byte 0", but this isn't correct on thumb/arm targets where the text segment needs to be a multiple of 2/4 bytes. Handle this by emitting a noop. This is more gross than it should be because arm/ppc are not fully mc'ized yet. This fixes rdar://7908505 llvm-svn: 102400
-
- Apr 26, 2010
-
-
Evan Cheng authored
- Move TargetLowering::EmitTargetCodeForFrameDebugValue to TargetInstrInfo and rename it to emitFrameIndexDebugValue. - Teach spiller to modify DBG_VALUE instructions to reference spill slots. llvm-svn: 102323
-
- Mar 31, 2010
-
-
Jakob Stoklund Olesen authored
SSEDomainFix will collapse to the domain with the lower number when it has a choice. The SSEPackedSingle domain often has smaller instructions, so prefer that. llvm-svn: 99952
-
- Mar 30, 2010
-
-
Jakob Stoklund Olesen authored
Cross-block inference is primitive and wrong, but the pass is working otherwise. llvm-svn: 99848
-
- Mar 25, 2010
-
-
Jakob Stoklund Olesen authored
On Nehalem and newer CPUs there is a 2 cycle latency penalty on using a register in a different domain than where it was defined. Some instructions have equvivalents for different domains, like por/orps/orpd. The SSEDomainFix pass tries to minimize the number of domain crossings by changing between equvivalent opcodes where possible. This is a work in progress, in particular the pass doesn't do anything yet. SSE instructions are tagged with their execution domain in TableGen using the last two bits of TSFlags. Note that not all instructions are tagged correctly. Life just isn't that simple. The SSE execution domain issue is very similar to the ARM NEON/VFP pipeline issue handled by NEONMoveFixPass. This pass may become target independent to handle both. llvm-svn: 99524
-
- Mar 24, 2010
-
-
Jakob Stoklund Olesen authored
This reverts commit 99345. It was breaking buildbots. llvm-svn: 99352
-
Jakob Stoklund Olesen authored
This is work in progress. So far, SSE execution domain tables are added to X86InstrInfo, and a skeleton pass is enabled with -sse-domain-fix. llvm-svn: 99345
-
- Feb 13, 2010
-
-
Chris Lattner authored
llvm-svn: 96076
-
Chris Lattner authored
fix swapgs to be spelled right. llvm-svn: 96058
-
Chris Lattner authored
addressing. This isn't complete because I need an MCContext to generate new MCExprs. llvm-svn: 96036
-
- Feb 12, 2010
-
-
Chris Lattner authored
is pc relative or not, mark call and branches as pcrel. llvm-svn: 96026
-
Chris Lattner authored
This will work better for the disassembler for modeling things like lfence/monitor/vmcall etc. llvm-svn: 95960
-
Chris Lattner authored
great solution for the disassembler, we'll go with "plan b". llvm-svn: 95957
-
Chris Lattner authored
llvm-svn: 95949
-
- Feb 05, 2010
-
-
Chris Lattner authored
llvm-svn: 95440
-
Chris Lattner authored
llvm-svn: 95410
-
Chris Lattner authored
llvm-svn: 95408
-
Chris Lattner authored
TSFlags directly instead of a TargetInstrDesc. llvm-svn: 95405
-
- Feb 03, 2010
-
-
Chris Lattner authored
instructions with no operands. It can now handle define void @test2() nounwind { ret void } llvm-svn: 95261
-
- Jan 22, 2010
-
-
Evan Cheng authored
llvm-svn: 94147
-
- Jan 13, 2010
-
-
Evan Cheng authored
Add a quick pass to optimize sign / zero extension instructions. For targets where the pre-extension values are available in the subreg of the result of the extension, replace the uses of the pre-extension value with the result + extract_subreg. For now, this pass is fairly conservative. It only perform the replacement when both the pre- and post- extension values are used in the block. It will miss cases where the post-extension values are live, but not used. llvm-svn: 93278
-
- Jan 12, 2010
-
-
Evan Cheng authored
instruction is copy like where the source and destination registers can overlap. This is to be used by the coalescable to coalesce the source and destination registers of instructions like X86::MOVSX64rr32. Apparently some crazy people believe the coalescer is too simple. llvm-svn: 93210
-
- Dec 11, 2009
-
-
Evan Cheng authored
llvm-svn: 91104
-
- Dec 05, 2009
-
-
Dan Gohman authored
MachineBasicBlock::canFallThrough(), which is target-independent and more thorough. llvm-svn: 90634
-
- Dec 04, 2009
-
-
David Greene authored
Have hasLoad/StoreFrom/ToStackSlot return the relevant MachineMemOperand. llvm-svn: 90608
-
- Nov 30, 2009
-
-
Bob Wilson authored
for all the processors where I have tried it, and even when it might not help performance, the cost is quite low. The opportunities for duplicating indirect branches are limited by other factors so code size does not change much due to tail duplicating indirect branches aggressively. llvm-svn: 90144
-
- Nov 25, 2009
-
-
Bob Wilson authored
it is definitely profitable to tail duplicate indirect branches for x86. This is likely to be true to various degrees for all modern x86 processors. llvm-svn: 89865
-
- Nov 14, 2009
-
-
Evan Cheng authored
- If destination is a physical register and it has a subreg index, use the sub-register instead. This fixes PR5423. llvm-svn: 88745
-
- Nov 13, 2009
-
-
David Greene authored
Fix a bootstrap failure. Provide special isLoadFromStackSlotPostFE and isStoreToStackSlotPostFE interfaces to explicitly request checking for post-frame ptr elimination operands. This uses a heuristic so it isn't reliable for correctness. llvm-svn: 87047
-
- Nov 12, 2009
-
-
David Greene authored
Add hasLoadFromStackSlot and hasStoreToStackSlot to return whether a machine instruction loads or stores from/to a stack slot. Unlike isLoadFromStackSlot and isStoreFromStackSlot, the instruction may be something other than a pure load/store (e.g. it may be an arithmetic operation with a memory operand). This helps AsmPrinter determine when to print a spill/reload comment. This is only a hint since we may not be able to figure this out in all cases. As such, it should not be relied upon for correctness. Implement for X86. Return false by default for other architectures. llvm-svn: 87026
-
- Oct 30, 2009
-
-
Dan Gohman authored
unfolding loads for hoisting. getOpcodeAfterMemoryUnfold returns the opcode of the original operation without the load, not the load itself, MachineLICM needs to know the operand index in order to get the correct register class. Extend getOpcodeAfterMemoryUnfold to return this information. llvm-svn: 85622
-
- Oct 10, 2009
-
-
Dan Gohman authored
MachineInstr::isInvariantLoad instead, which has the benefit of being more complete. llvm-svn: 83696
-
- Oct 09, 2009
-
-
Dan Gohman authored
information when unfolding memory references. llvm-svn: 83656
-
- Oct 07, 2009
-
-
Dan Gohman authored
implementations with a new MachineInstr::isInvariantLoad, which uses MachineMemOperands and is target-independent. This brings MachineLICM and other functionality to targets which previously lacked an isInvariantLoad implementation. llvm-svn: 83475
-
- Oct 05, 2009
-
-
Dan Gohman authored
they make it less convenient to add new entries. llvm-svn: 83308
-
- Sep 11, 2009
-
-
Evan Cheng authored
It's not legal to fold a load from a narrower stack slot into a wider instruction. If done, the instruction does a 64-bit load and that's not safe. This can happen we a subreg_to_reg 0 has been coalesced. One exception is when the instruction that folds the load is a move, then we can simply turn it into a 32-bit load from the stack slot. rdar://7170444 llvm-svn: 81494
-