summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
...
* use RAII for ExceptionTimer tooChris Lattner2010-03-291-17/+3
| | | | llvm-svn: 99833
* fix a variety of issues were we'd start DebugTimer but Chris Lattner2010-03-291-40/+11
| | | | | | not stop it by using RAII. llvm-svn: 99832
* Refactor code to push DILocation prcessing into DwarfDebug.cpp from ↵Devang Patel2010-03-294-37/+54
| | | | | | | | AsmPrinter.cpp. This is same as r99772 (which was reverted) with just one meaningful difference where two source lines exchanged their positions. llvm-svn: 99816
* Revert 99772.Devang Patel2010-03-284-45/+37
| | | | llvm-svn: 99778
* add a statistic for the # times isel has to backtrack.Chris Lattner2010-03-281-1/+3
| | | | llvm-svn: 99774
* Refactoring. Push DILocation processing in to DwarfDebug from AsmPrinter.Devang Patel2010-03-284-37/+45
| | | | llvm-svn: 99772
* finally remove the immAllOnesV_bc/immAllZerosV_bc patternsChris Lattner2010-03-281-1/+1
| | | | | | | | | | and those derived from them. These are obnoxious because they were written as: PatLeaf<(bitconvert). Not having an argument was foiling adding better type checking for operand count matching up with what was required (in this case, bitconvert always requires an operand!) llvm-svn: 99759
* comply with the wishes of a fixme.Chris Lattner2010-03-281-3/+0
| | | | llvm-svn: 99742
* now that (parallel) is gone and a variety of bugs in targetsChris Lattner2010-03-281-8/+4
| | | | | | are cleaned up, we can remove an old fixme. llvm-svn: 99741
* add an optimized form of OPC_EmitMergeInputChains for the 1, 0 and Chris Lattner2010-03-281-0/+29
| | | | | | | 1, 1 cases which are by-far the most frequent. This shrinks the X86 isel table from 77014 -> 74657 bytes. llvm-svn: 99740
* don't add nodes to the now-dead nodes list multiple times, thisChris Lattner2010-03-281-2/+3
| | | | | | | can cause a crash on crazy situations in msp430 when morph-node-to is disabled. llvm-svn: 99739
* don't add flag nodes with chain results to the NowDeadNodesChris Lattner2010-03-281-2/+3
| | | | | | list multiple times when MorphNodeTo can't be applied. llvm-svn: 99735
* improve -debug-only=isel comments for cases when we don't enter aChris Lattner2010-03-271-4/+8
| | | | | | scope due to obviously false predicate. llvm-svn: 99723
* Forgot the part where we handle the ".llvm.eh.catch.all.value".Bill Wendling2010-03-271-2/+11
| | | | llvm-svn: 99697
* Return if we changed anything or not.Bill Wendling2010-03-271-11/+9
| | | | llvm-svn: 99695
* If a selector has a call to ".llvm.eh.catch.all.value" that we haven'tBill Wendling2010-03-271-8/+38
| | | | | | converted, then use the initializer, since using the name itself won't work. llvm-svn: 99692
* If we mark clean-ups as clean-ups, then it could break when inlining through anBill Wendling2010-03-261-7/+215
| | | | | | | | | | | | | | | | | | | | | | | | | 'invoke' instruction. You will get a situation like this: bb: %ehptr = eh.exception() %sel = eh.selector(%ehptr, @per, 0); ... bb2: invoke _Unwind_Resume_or_Rethrow(%ehptr) %normal unwind to %lpad lpad: ... The unwinder will see the %sel call as a clean-up and, if it doesn't have a catch further up the call stack, it will skip running it. But there *is* another catch up the stack -- the catch for the %lpad. However, we can't see that. This is fixed in code-gen, where we detect this situation, and convert the "clean-up" selector call into a "catch-all" selector call. This gives us the correct semantics. llvm-svn: 99671
* Add few missed libcalls and correct names for others.Anton Korobeynikov2010-03-261-4/+16
| | | | llvm-svn: 99656
* Debug info shouldn't affect kills.Dale Johannesen2010-03-261-0/+3
| | | | llvm-svn: 99637
* LiveVariables should clear kill / dead markers first. This allows us to ↵Evan Cheng2010-03-262-6/+8
| | | | | | remove a hack in the scheduler. llvm-svn: 99597
* Try trivial remat before the coalescer gives up on a vr / physreg coalescing ↵Evan Cheng2010-03-261-1/+7
| | | | | | for fear of tying up a physical register. llvm-svn: 99575
* Handle DEBUG_VALUE in this pass.Dale Johannesen2010-03-261-11/+14
| | | | llvm-svn: 99573
* Code clean up.Evan Cheng2010-03-251-11/+10
| | | | llvm-svn: 99544
* fix a valgrind error on copy-constructor-synthesis.cpp, which is caused whenChris Lattner2010-03-251-2/+3
| | | | | | | | the custom insertion hook deletes the instruction, then we try to set dead flags on it. Neither the code that I added nor the code that was there before was safe. llvm-svn: 99538
* Remove an unused option.Evan Cheng2010-03-251-59/+29
| | | | llvm-svn: 99537
* Add comment.Devang Patel2010-03-251-0/+3
| | | | llvm-svn: 99507
* Scheduler assumes SDDbgValue nodes are in source order. That's true ↵Evan Cheng2010-03-251-0/+8
| | | | | | currently. But add an assertion to verify it. llvm-svn: 99501
* Change tblgen to emit FOOISD opcode names as twoChris Lattner2010-03-251-3/+9
| | | | | | | | | | | | | | bytes instead of one byte. This is important because we're running up to too many opcodes to fit in a byte and it is aggrevated by FIRST_TARGET_MEMORY_OPCODE making the numbering sparse. This just bites the bullet and bloats out the table. In practice, this increases the size of the x86 isel table from 74.5K to 76K. I think we'll cope :) This fixes rdar://7791648 llvm-svn: 99494
* Remove a fixme that doesn't make sense any more.Evan Cheng2010-03-251-2/+0
| | | | llvm-svn: 99489
* Make sure SDDbgValue.Invalid is initialized to false by all the constructors.Evan Cheng2010-03-251-2/+2
| | | | llvm-svn: 99487
* Make the NDEBUG assertion stronger and more clear what is Chris Lattner2010-03-251-5/+20
| | | | | | | | | | | | | | | | | | | | | happening. Enhance scheduling to set the DEAD flag on implicit defs more aggressively. Before, we'd set an implicit def operand to dead if it were present in the SDNode corresponding to the machineinstr but had no use. Now we do it in this case AND if the implicit def does not exist in the SDNode at all. This exposes a couple of problems: one is the FIXME, which causes a live intervals crash on CodeGen/X86/sibcall.ll. The second is that it makes machinecse and licm more aggressive (which is a good thing) but also exposes a case where licm hoists a set0 and then it doesn't get resunk. Talking to codegen folks about both these issues, but I need this patch in in the meantime. llvm-svn: 99485
* reapply 99444/99445, which I speculatively reverted inChris Lattner2010-03-252-78/+95
| | | | | | r99453. llvm-svn: 99482
* Change how dbg_value sdnodes are converted into machine instructions. Their ↵Evan Cheng2010-03-256-112/+187
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | placement should be determined by the relative order of incoming llvm instructions. The scheduler will now use the SDNode ordering information to determine where to insert them. A dbg_value instruction is inserted after the instruction with the last highest source order and before the instruction with the next highest source order. It will optimize the placement by inserting right after the instruction that produces the value if they have consecutive order numbers. Here is a theoretical example that illustrates why the placement is important. tmp1 = store tmp1 -> x ... tmp2 = add ... ... call ... store tmp2 -> x Now mem2reg comes along: tmp1 = dbg_value (tmp1 -> x) ... tmp2 = add ... ... call ... dbg_value (tmp2 -> x) When the debugger examine the value of x after the add instruction but before the call, it should have the value of tmp1. Furthermore, for dbg_value's that reference constants, they should not be emitted at the beginning of the block (since they do not have "producers"). This patch also cleans up how SDISel manages DbgValue nodes. It allow a SDNode to be referenced by multiple SDDbgValue nodes. When a SDNode is deleted, it uses the information to find the SDDbgValues and invalidate them. They are not deleted until the corresponding SelectionDAG is destroyed. llvm-svn: 99469
* Avoid being influenced by dbg_value instructions.Evan Cheng2010-03-252-2/+2
| | | | llvm-svn: 99465
* revert 99444/99445. This doesn't cause the failure of Chris Lattner2010-03-242-95/+78
| | | | | | | | 2006-07-19-stwbrx-crash.ll for me, but it's the only likely patch in the blame list of several bots. Lets see if this fixes it. llvm-svn: 99453
* remove dead argument.Chris Lattner2010-03-242-5/+3
| | | | llvm-svn: 99445
* split EmitNode in half to reduce indentation.Chris Lattner2010-03-242-78/+97
| | | | llvm-svn: 99444
* Use SP filename directly instead of SP's context's filename.Devang Patel2010-03-241-2/+2
| | | | llvm-svn: 99429
* Revert Edwin's change that is breaking MultiSource/Applications/ClamAV/clamscan.Bob Wilson2010-03-241-3/+1
| | | | | | | | --- Reverse-merging r99400 into '.': D test/CodeGen/Generic/2010-03-24-liveintervalleak.ll U lib/CodeGen/LiveIntervalAnalysis.cpp llvm-svn: 99419
* Fix memory leak in liveintervals: the destructor for VNInfos must be called,Torok Edwin2010-03-241-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | otherwise the SmallVector it contains doesn't free its memory. In most cases LiveIntervalAnalysis could get away by not calling the destructor, because VNInfos are bumpptr-allocated, and smallvectors usually don't grow. However when the SmallVector does grow it always leaks. This is the valgrind shown leak from the original testcase: ==8206== 18,304 bytes in 151 blocks are definitely lost in loss record 164 of 164 ==8206== at 0x4A079C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==8206== by 0x4DB7A7E: llvm::SmallVectorBase::grow_pod(unsigned long, unsigned long) (in /home/edwin/clam/git/builds/defaul t/libclamav/.libs/libclamav.so.6.1.0) ==8206== by 0x4F90382: llvm::VNInfo::addKill(llvm::SlotIndex) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libcl amav.so.6.1.0) ==8206== by 0x5126B5C: llvm::LiveIntervals::handleVirtualRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::M achineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int, llvm::LiveInterval&) (in /home/edwin/clam/git/builds/defau lt/libclamav/.libs/libclamav.so.6.1.0) ==8206== by 0x512725E: llvm::LiveIntervals::handleRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineI nstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav .so.6.1.0) ==8206== by 0x51278A8: llvm::LiveIntervals::computeIntervals() (in /home/edwin/clam/git/builds/default/libclamav/.libs/libc lamav.so.6.1.0) ==8206== by 0x5127CB4: llvm::LiveIntervals::runOnMachineFunction(llvm::MachineFunction&) (in /home/edwin/clam/git/builds/de fault/libclamav/.libs/libclamav.so.6.1.0) ==8206== by 0x4DAE935: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclama v/.libs/libclamav.so.6.1.0) ==8206== by 0x4DAEB10: llvm::FunctionPassManagerImpl::run(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclama v/.libs/libclamav.so.6.1.0) ==8206== by 0x4DAED3D: llvm::FunctionPassManager::run(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclamav/.l ibs/libclamav.so.6.1.0) ==8206== by 0x4D8BE8E: llvm::JIT::runJITOnFunctionUnlocked(llvm::Function*, llvm::MutexGuard const&) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav.so.6.1.0) ==8206== by 0x4D8CA72: llvm::JIT::getPointerToFunction(llvm::Function*) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav.so.6.1.0) llvm-svn: 99400
* dbg_value may end a block.Evan Cheng2010-03-241-4/+4
| | | | llvm-svn: 99378
* Remove the ConvertActions table and associated code, which is unused.Dan Gohman2010-03-241-1/+0
| | | | llvm-svn: 99372
* Revert 99335. getTypeToExpandTo's iterative behavior is actuallyDan Gohman2010-03-231-3/+2
| | | | | | needed here. llvm-svn: 99339
* Remove getTypeToExpandTo, since it isn't adding much valueDan Gohman2010-03-231-2/+3
| | | | | | beyond just calling getTypeToTransformTo. llvm-svn: 99335
* Ignore dbg_value's.Evan Cheng2010-03-231-5/+7
| | | | llvm-svn: 99321
* Code clean up.Evan Cheng2010-03-231-6/+6
| | | | llvm-svn: 99319
* Fix PR6673: updating the callback should not clear the map.Chris Lattner2010-03-221-1/+5
| | | | llvm-svn: 99227
* Emit DW_AT_low_pc and DW_AT_high_pc attributes for TAG_compile_unit.Devang Patel2010-03-221-4/+8
| | | | llvm-svn: 99225
* DW_AT_stmt_list attribute attached with a compile unit encodes offset of ↵Devang Patel2010-03-224-77/+4
| | | | | | line number information for this compile unit in debug_line section. This offset is always zero when only one compile unit is emitted in a object file. llvm-svn: 99223
* Reduce indentation.Evan Cheng2010-03-221-35/+34
| | | | llvm-svn: 99214
OpenPOWER on IntegriCloud