summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
...
* Use SmallVector's pop_back_val.Dan Gohman2008-12-201-4/+2
| | | | llvm-svn: 61277
* Use the correct Preds and Succs lists in setHeightDirty()Dan Gohman2008-12-201-4/+4
| | | | | | and setDepthDirty(), respectively. This fixes PR3241. llvm-svn: 61276
* Use ~0u instead of -1u as the special value, to hopefully avoidDan Gohman2008-12-191-20/+20
| | | | | | warnings on compilers that warn about such things. llvm-svn: 61263
* Fix PR3149. If an early clobber def is a physical register and it is tied to ↵Evan Cheng2008-12-192-7/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | an input operand, it effectively extends the live range of the physical register. Currently we do not have a good way to represent this. 172 %ECX<def> = MOV32rr %reg1039<kill> 180 INLINEASM <es:subl $5,$1 sbbl $3,$0>, 10, %EAX<def>, 14, %ECX<earlyclobber,def>, 9, %EAX<kill>, 36, <fi#0>, 1, %reg0, 0, 9, %ECX<kill>, 36, <fi#1>, 1, %reg0, 0 188 %EAX<def> = MOV32rr %EAX<kill> 196 %ECX<def> = MOV32rr %ECX<kill> 204 %ECX<def> = MOV32rr %ECX<kill> 212 %EAX<def> = MOV32rr %EAX<kill> 220 %EAX<def> = MOV32rr %EAX 228 %reg1039<def> = MOV32rr %ECX<kill> The early clobber operand ties ECX input to the ECX def. The live interval of ECX is represented as this: %reg20,inf = [46,47:1)[174,230:0) 0@174-(230) 1@46-(47) The right way to represent this is something like %reg20,inf = [46,47:2)[174,182:1)[181:230:0) 0@174-(182) 1@181-230 @2@46-(47) Of course that won't work since that means overlapping live ranges defined by two val#. The workaround for now is to add a bit to val# which says the val# is redefined by a early clobber def somewhere. This prevents the move at 228 from being optimized away by SimpleRegisterCoalescing::AdjustCopiesBackFrom. llvm-svn: 61259
* Fix some release-assert warningsChris Lattner2008-12-191-4/+4
| | | | llvm-svn: 61244
* Fix bug 3202.Rafael Espindola2008-12-192-2/+3
| | | | | | | The EH_frame and .eh symbols are now private, except for darwin9 and earlier. The patch also fixes the definition of PrivateGlobalPrefix on pcc linux. llvm-svn: 61242
* Perform this loop only when the -debug flag is specified.Bill Wendling2008-12-191-5/+7
| | | | llvm-svn: 61238
* Initialize the ImplicitDefed member, to avoid getting staleDan Gohman2008-12-191-0/+1
| | | | | | data from a previous block. llvm-svn: 61237
* Teach LowerSubregs to preserve kill/dead information when loweringDan Gohman2008-12-181-1/+63
| | | | | | subreg instructions. llvm-svn: 61220
* Make LowerSubregs' debug output for EXTRACT_SUBREG consistent withDan Gohman2008-12-181-1/+6
| | | | | | that of INSERT_SUBREG and SUBREG_TO_REG. llvm-svn: 61218
* Fix a copy+pasto in an assertion message.Dan Gohman2008-12-181-1/+1
| | | | llvm-svn: 61217
* Fix indentation level.Dan Gohman2008-12-181-33/+33
| | | | llvm-svn: 61216
* Print subreg information in MachineInstr::dump.Dan Gohman2008-12-181-1/+5
| | | | llvm-svn: 61213
* Added support for vector widening.Mon P Wang2008-12-186-43/+1238
| | | | llvm-svn: 61209
* Give MachineLICM a name, for -time-passes etc.Dan Gohman2008-12-181-0/+2
| | | | llvm-svn: 61184
* Move post-RA scheduling before branch folding for now, because branchDan Gohman2008-12-181-7/+7
| | | | | | | folding's tail merging doesn't currently preserve liveness information which post-RA scheduling requires. llvm-svn: 61183
* Re-apply r61158 in a form that no longer breaks tests.Owen Anderson2008-12-181-36/+61
| | | | llvm-svn: 61182
* Revert r61158 for now, as it caused some test failures.Owen Anderson2008-12-171-46/+36
| | | | llvm-svn: 61159
* Fix miscompilations caused by renumbering, and enable it as part of prealloc ↵Owen Anderson2008-12-171-36/+46
| | | | | | splitting. llvm-svn: 61158
* Fix expansion of vsetcc to set the high bit for true instead of 1.Mon P Wang2008-12-171-4/+6
| | | | llvm-svn: 61129
* Double the amount of memory reserved for SUnits. This is aDan Gohman2008-12-171-1/+3
| | | | | | | | | temporary workaround for an obscure bug. When node cloning is used, it is possible that more SUnits will be created, and if the SUnits std::vector has to reallocate, it will invalidate all the graph edges. llvm-svn: 61122
* Use getDepth() and getHeight() instead of accessing theDan Gohman2008-12-171-2/+2
| | | | | | | Depth and Height members directly, as they may not be current. llvm-svn: 61121
* Fix for PR3225: disable a broken optimization inEli Friedman2008-12-171-0/+3
| | | | | | | | | DAGTypeLegalizer::ExpandShiftWithKnownAmountBit. In terms of restoring the optimization, the best fix here isn't obvious... any ideas? llvm-svn: 61119
* A new dag combine; several permutations of thisDale Johannesen2008-12-161-0/+6
| | | | | | are there under ADD, this one was missing. llvm-svn: 61107
* Add code to renumber split intervals into new vregs. This is disabled for ↵Owen Anderson2008-12-161-0/+48
| | | | | | now until I finish working out some iterator invalidation issues. llvm-svn: 61104
* Eliminate the loop that walks the critical path. Instead, just track theDan Gohman2008-12-161-54/+64
| | | | | | | position in the critical path during the main instruction walk. This eliminates the need for the CritialAntiDep DenseMap. llvm-svn: 61096
* Preserve SourceValue information when lowering produces multiple loads fromDan Gohman2008-12-161-3/+6
| | | | | | different offsets within the same stack slot. llvm-svn: 61093
* We have decided not to support inline asm where an output operand with a ↵Evan Cheng2008-12-161-11/+12
| | | | | | matching input operand with incompatible type (i.e. either one is a floating point and the other is an integer or the sizes of the types differ). SelectionDAGBuild will catch these and exit with an error. llvm-svn: 61092
* Enable anti-dependence breaking by default when post-RA scheduling is enabled.Dan Gohman2008-12-161-1/+1
| | | | llvm-svn: 61078
* When breaking an anti-dependency, don't use a register which has seenDan Gohman2008-12-161-0/+1
| | | | | | | one of its aliases defined. This is conservative, but tricky subreg corner cases are outside the primary aim of this pass. llvm-svn: 61077
* Add initial support for back-scheduling address computations,Dan Gohman2008-12-162-1/+140
| | | | | | | especially in the case of addresses computed from loop induction variables. llvm-svn: 61075
* Remove some special-case logic in ScheduleDAGSDNodes's Dan Gohman2008-12-161-10/+0
| | | | | | | latency computation code that is no longer needed with the new method for handling latencies. llvm-svn: 61074
* Fix some register-alias-related bugs in the post-RA scheduler livenessDan Gohman2008-12-168-267/+287
| | | | | | | | | | | | | | computation code. Also, avoid adding output-depenency edges when both defs are dead, which frequently happens with EFLAGS defs. Compute Depth and Height lazily, and always in terms of edge latency values. For the schedulers that don't care about latency, edge latencies are set to 1. Eliminate Cycle and CycleBound, and LatencyPriorityQueue's Latencies array. These are all subsumed by the Depth and Height fields. llvm-svn: 61073
* Add a simple target-independent heuristic to allow targets with noDan Gohman2008-12-161-0/+6
| | | | | | instruction itinerary data to back-schedule loads. llvm-svn: 61070
* Move addPred and removePred out-of-line.Dan Gohman2008-12-161-0/+61
| | | | llvm-svn: 61067
* Make addPred and removePred return void, since the return value is notDan Gohman2008-12-162-8/+8
| | | | | | currently used by anything. llvm-svn: 61066
* This getEdgeAttributes doesn't need a template argument.Dan Gohman2008-12-161-2/+2
| | | | llvm-svn: 61065
* Added support for splitting and scalarizing vector shifts.Mon P Wang2008-12-152-0/+19
| | | | llvm-svn: 61050
* Fix printing of PseudoSourceValues in SDNode graphs.Dan Gohman2008-12-151-5/+3
| | | | llvm-svn: 61036
* Added support to LegalizeType for expanding the operands of scalar to vectorMon P Wang2008-12-153-9/+57
| | | | | | | and insert vector element. Modified extract vector element to extend the result to match the expected promoted type. llvm-svn: 61029
* Reapply r60997, this time without forgetting thatDuncan Sands2008-12-142-7/+14
| | | | | | | target constants are allowed to have an illegal type. llvm-svn: 61006
* Temporarily revert r60997. It was causing this failure:Bill Wendling2008-12-132-10/+7
| | | | | | | | | | | | | | | | | | | Running /Users/void/llvm/llvm.src/test/CodeGen/Generic/dg.exp ... FAIL: /Users/void/llvm/llvm.src/test/CodeGen/Generic/asm-large-immediate.ll Failed with exit(1) at line 1 while running: llvm-as < /Users/void/llvm/llvm.src/test/CodeGen/Generic/asm-large-immediate.ll | llc | /usr/bin/grep 68719476738 Assertion failed: ((TypesNeedLegalizing || getTypeAction(VT) == Legal) && "Illegal type introduced after type legalization?"), function HandleOp, file /Users/void/llvm/llvm.src/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp, line 493. 0 llc 0x0085392e char const* std::find<char const*, char>(char const*, char const*, char const&) + 98 1 llc 0x00853e63 llvm::sys::PrintStackTraceOnErrorSignal() + 593 2 libSystem.B.dylib 0x96cac09b _sigtramp + 43 3 libSystem.B.dylib 0xffffffff _sigtramp + 1765097359 4 libSystem.B.dylib 0x96d24ec2 raise + 26 5 libSystem.B.dylib 0x96d3447f abort + 73 6 libSystem.B.dylib 0x96d26063 __assert_rtn + 101 7 llc 0x004f9018 llvm::cast_retty<llvm::SubprogramDesc, llvm::DebugInfoDesc*>::ret_type llvm::cast<llvm::Sub ... llvm-svn: 61001
* LegalizeDAG is not supposed to introduce illegalDuncan Sands2008-12-132-7/+10
| | | | | | | types into the DAG if they were not already there. Check this with an assertion. llvm-svn: 60997
* Remove assertion to allow promotion of a truncating store operandMon P Wang2008-12-131-2/+0
| | | | llvm-svn: 60975
* Added basic support for expanding VSETCCMon P Wang2008-12-131-2/+21
| | | | llvm-svn: 60974
* On big-endian machines it is wrong to do a fullDuncan Sands2008-12-131-19/+22
| | | | | | | | | | width register load followed by a truncating store for the copy, since the load will not place the value in the lower bits. Probably partial loads/stores can never happen here, but fix it anyway. llvm-svn: 60972
* Do not print empty DW_AT_comp_dir.Devang Patel2008-12-121-1/+2
| | | | llvm-svn: 60965
* When expanding unaligned loads and stores do not makeDuncan Sands2008-12-121-34/+123
| | | | | | | | | | | | | | | | | | | | | | | | use of illegal integer types: instead, use a stack slot and copying via integer registers. The existing code is still used if the bitconvert is to a legal integer type. This fires on the PPC testcases 2007-09-08-unaligned.ll and vec_misaligned.ll. It looks like equivalent code is generated with these changes, just permuted, but it's hard to tell. With these changes, nothing in LegalizeDAG produces illegal integer types anymore. This is a prerequisite for removing the LegalizeDAG type legalization code. While there I noticed that the existing code doesn't handle trunc store of f64 to f32: it turns this into an i64 store, which represents a 4 byte stack smash. I added a FIXME about this. Hopefully someone more motivated than I am will take care of it. llvm-svn: 60964
* Fix add/sub expansion: don't create ADD / SUB with two results (seems like ↵Evan Cheng2008-12-121-5/+5
| | | | | | everyone is doing this these days :-). Patch by Daniel M Gessel! llvm-svn: 60958
* When using a 4 byte jump table on a 64 bit machine,Duncan Sands2008-12-121-11/+3
| | | | | | | | do an extending load of the 4 bytes rather than a potentially illegal (type) i32 load followed by a sign extend. llvm-svn: 60945
OpenPOWER on IntegriCloud