- Jun 08, 2012
-
-
Nuno Lopes authored
BoundsChecking: add support for ConstantPointerNull. fixes a bunch of instrumentation failures in loops with reallocs llvm-svn: 158210
-
Hal Finkel authored
The pass itself works well, but the something in the Machine* infrastructure does not understand terminators which define registers. Without the ability to use the block-placement pass, etc. this causes performance regressions (and so is turned off by default). Turning off the analysis turns off the problems with the Machine* infrastructure. llvm-svn: 158206
-
Hal Finkel authored
The code which tests for an induction operation cannot assume that any ADDI instruction will have a register operand because the operand could also be a frame index; for example: %vreg16<def> = ADDI8 <fi#0>, 0; G8RC:%vreg16 llvm-svn: 158205
-
Hal Finkel authored
Add the PPCCTRLoops pass: a PPC machine-code-level optimization pass to form CTR-based loop branching code. This pass is derived from the Hexagon HardwareLoops pass. The only significant enhancement over the Hexagon pass is that PPCCTRLoops will also attempt to delete the replaced add and compare operations if they are no longer otherwise used. Also, invalid preheader DebugLoc is not used. llvm-svn: 158204
-
Duncan Sands authored
can move instructions within the instruction list. If the instruction just happens to be the one the basic block iterator is pointing to, and it is moved to a different basic block, then we get into an infinite loop due to the iterator running off the end of the basic block (for some reason this doesn't fire any assertions). Original commit message: Grab-bag of reassociate tweaks. Unify handling of dead instructions and instructions to reoptimize. Exploit this to more systematically eliminate dead instructions (this isn't very useful in practice but is convenient for analysing some testcase I am working on). No need for WeakVH any more: use an AssertingVH instead. llvm-svn: 158199
-
Manman Ren authored
This patch will generate the following for integer ABS: movl %edi, %eax negl %eax cmovll %edi, %eax INSTEAD OF movl %edi, %ecx sarl $31, %ecx leal (%rdi,%rcx), %eax xorl %ecx, %eax There exists a target-independent DAG combine for integer ABS, which converts integer ABS to sar+add+xor. For X86, we match this pattern back to neg+cmov. This is implemented in PerformXorCombine. rdar://10695237 llvm-svn: 158175
-
- Jun 07, 2012
-
-
Nadav Rotem authored
Do not optimize the used bits of the x86 vselect condition operand, when the condition operand is a vector of 1-bit predicates. This may happen on MIC devices. llvm-svn: 158168
-
Nadav Rotem authored
Fix a bug in FoldSelectOpOp. Bitcast ops may change the number of vector elements, which may disagree with the select condition type. llvm-svn: 158166
-
Andrew Trick authored
llvm-svn: 158164
-
Andrew Trick authored
Match expectations of the new latency API. Cleanup and make the logic consistent. llvm-svn: 158163
-
Andrew Trick authored
llvm-svn: 158162
-
Andrew Trick authored
llvm-svn: 158161
-
Manman Ren authored
It will cause assertion failure later on. llvm-svn: 158160
-
Rafael Espindola authored
Fixes pr13048. llvm-svn: 158158
-
Pete Cooper authored
Move terminator machine verification to check MachineBasicBlock::instr_iterator instead of MBB::iterator llvm-svn: 158154
-
Manman Ren authored
This patch will optimize the following movq %rdi, %rax subq %rsi, %rax cmovsq %rsi, %rdi movq %rdi, %rax to cmpq %rsi, %rdi cmovsq %rsi, %rdi movq %rdi, %rax Perform this optimization if the actual result of SUB is not used. rdar: 11540023 llvm-svn: 158126
-
Manman Ren authored
The commit is intended to fix rdar://11540023. It is implemented as part of peephole optimization. We can actually implement this in the SelectionDAG lowering phase. llvm-svn: 158122
-
Jakob Stoklund Olesen authored
Bundles should be treated as one atomic transaction when checking liveness. That is how the register allocator (and VLIW targets) treats bundles. llvm-svn: 158116
-
- Jun 06, 2012
-
-
Benjamin Kramer authored
LLVM should be -Wunused-private-field clean now. llvm-svn: 158103
-
Andrew Trick authored
Allow targets to access this API. It's required for RegisterPressure. llvm-svn: 158102
-
Andrew Trick authored
Make it a general utility for use by Targets. llvm-svn: 158097
-
Benjamin Kramer authored
LLVM is now -Wunused-private-field clean except for - lib/MC/MCDisassembler/Disassembler.h. Not sure why it keeps all those unaccessible fields. - gtest. llvm-svn: 158096
-
Benjamin Kramer authored
There are some that I didn't remove this round because they looked like obvious stubs. There are dead variables in gtest too, they should be fixed upstream. llvm-svn: 158090
-
Chad Rosier authored
X86. rdar://11496434 llvm-svn: 158087
-
Chad Rosier authored
matter. rdar://11579835 llvm-svn: 158084
-
Jakob Stoklund Olesen authored
Remat has been stable for years, and it isn't done by LiveIntervalAnalysis any longer. (See LiveRangeEdit). llvm-svn: 158079
-
Duncan Sands authored
instructions to reoptimize. Exploit this to more systematically eliminate dead instructions (this isn't very useful in practice but is convenient for analysing some testcase I am working on). No need for WeakVH any more: use an AssertingVH instead. llvm-svn: 158073
-
Benjamin Kramer authored
llvm-svn: 158069
-
Richard Barton authored
llvm-svn: 158055
-
Craig Topper authored
llvm-svn: 158049
-
Jakob Stoklund Olesen authored
It is useful outside RegAllocBase. llvm-svn: 158041
-
Jakob Stoklund Olesen authored
Soon we'll be making LiveIntervalUnions for register units as well. This was the only place using the RepReg member, so just remove it. llvm-svn: 158038
-
Matt Beaumont-Gay authored
llvm-svn: 158037
-
Jakob Stoklund Olesen authored
Don't print out the register number and spill weight, making the TRI argument unnecessary. This allows callers to interpret the reg field. It can currently be a virtual register, a physical register, a spill slot, or a register unit. llvm-svn: 158031
-
Jakob Stoklund Olesen authored
Instead of computing a live interval per physreg, LiveIntervals can compute live intervals per register unit. This makes impossible the confusing situation where aliasing registers could have overlapping live intervals. It should also make fixed interferernce checking cheaper since registers have fewer register units than aliases. Live intervals for regunits are computed on demand, using MRI use-def chains and the new LiveRangeCalc class. Only regunits live in to ABI blocks are precomputed during LiveIntervals::runOnMachineFunction(). The regunit liveness computations don't depend on LiveVariables. llvm-svn: 158029
-
- Jun 05, 2012
-
-
Jakob Stoklund Olesen authored
These LiveRangeCalc methods are to be used when computing a live range from scratch. llvm-svn: 158027
-
Andrew Trick authored
Patch by Ivan Llopard. llvm-svn: 158025
-
Andrew Trick authored
Minimum latency determines per-cycle scheduling groups. Expected latency determines critical path and cost. llvm-svn: 158021
-
Lang Hames authored
expression (a * b + c) that can be implemented as a fused multiply-add (fma) if the target determines that this will be more efficient. This intrinsic will be used to implement FP_CONTRACT support and an aggressive FMA formation mode. If your target has a fast FMA instruction you should override the isFMAFasterThanMulAndAdd method in TargetLowering to return true. llvm-svn: 158014
-
Yuan Lin authored
llvm-svn: 158013
-