| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 99465
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 99445
|
| |
|
|
| |
llvm-svn: 99444
|
| |
|
|
| |
llvm-svn: 99429
|
| |
|
|
|
|
|
|
| |
--- Reverse-merging r99400 into '.':
D test/CodeGen/Generic/2010-03-24-liveintervalleak.ll
U lib/CodeGen/LiveIntervalAnalysis.cpp
llvm-svn: 99419
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 99378
|
| |
|
|
| |
llvm-svn: 99372
|
| |
|
|
|
|
| |
needed here.
llvm-svn: 99339
|
| |
|
|
|
|
| |
beyond just calling getTypeToTransformTo.
llvm-svn: 99335
|
| |
|
|
| |
llvm-svn: 99321
|
| |
|
|
| |
llvm-svn: 99319
|
| |
|
|
| |
llvm-svn: 99227
|
| |
|
|
| |
llvm-svn: 99225
|
| |
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 99214
|
| |
|
|
|
|
| |
it allocates to DwarfDebug::DIEValues.
llvm-svn: 99196
|
| |
|
|
| |
llvm-svn: 99195
|
| |
|
|
| |
llvm-svn: 99113
|
| |
|
|
|
|
|
|
|
|
|
| |
disabled for several months (since svn r88806) and no one noticed. My fix
for pr6543 yesterday reenabled it, but broke the ARM port's code for using
TBB/TBH. Rather than adding a target hook to disable merging for Thumb2 only,
I'm just taking this out. It is not common to have identical jump tables,
the code we used to merge them was O(N^2), and it only helps code size, not
performance.
llvm-svn: 98977
|
| |
|
|
| |
llvm-svn: 98920
|
| |
|
|
| |
llvm-svn: 98888
|
| |
|
|
|
|
|
| |
RecyclingAllocator to allow client code to be simpler, and
simplify several clients.
llvm-svn: 98847
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
always create a new jump table. The intention was to avoid merging jump
tables in SelectionDAGBuilder, and to wait for the branch folding pass to
merge tables. Unfortunately, the same getJumpTableIndex() method is also
used to merge tables in branch folding, so as a result of this change
branch tables are never merged. Worse, the branch folding code is expecting
getJumpTableIndex to always return the index of an existing table, but with
this change, it never does so. In at least some cases, e.g., pr6543, this
creates references to non-existent tables.
I've fixed the problem by adding a new createJumpTableIndex function, which
will always create a new table, and I've changed getJumpTableIndex to only
look at existing tables.
llvm-svn: 98845
|
| |
|
|
| |
llvm-svn: 98838
|
| |
|
|
| |
llvm-svn: 98830
|
| |
|
|
|
|
| |
This reverts commit 98776. It broke the llvm-gcc boot strap.
llvm-svn: 98784
|
| |
|
|
| |
llvm-svn: 98778
|
| |
|
|
|
|
|
|
|
| |
Remove ugly hack that aborted the coalescer before using N^2 time.
This affects functions with very complicated live intervals for physical
registers, i.e. functions with thousands of function calls.
llvm-svn: 98776
|
| |
|
|
|
|
| |
so isEH is always false. This was hiding until now from compilers because of default arguments. This was hiding from dwarf debug info users because for most of the platform isAbsoluteEHSectionOffsets() is same as isAbsoluteDebugSectionOffsets(). But Chris found it while updating dwarf printer to use MC*.
llvm-svn: 98743
|
| |
|
|
|
|
|
| |
should use CreateTempSymbol() if they don't care about the
name.
llvm-svn: 98712
|
| |
|
|
| |
llvm-svn: 98694
|
| |
|
|
| |
llvm-svn: 98686
|
| |
|
|
|
|
| |
handling constant unions.
llvm-svn: 98680
|
| |
|
|
| |
llvm-svn: 98675
|
| |
|
|
| |
llvm-svn: 98662
|
| |
|
|
| |
llvm-svn: 98656
|
| |
|
|
| |
llvm-svn: 98604
|
| |
|
|
|
|
|
| |
"used outside of the block". If the block ends in a return, then it won't be
used outside of it.
llvm-svn: 98599
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to LLVM IR changes with addr label weirdness. In the testcase, we
generate references to the two bb's when codegen'ing the first
function:
_test1: ## @test1
leaq Ltmp0(%rip), %rax
..
leaq Ltmp1(%rip), %rax
Then continue to codegen the second function where the blocks
get merged. We're now smart enough to emit both labels, producing
this code:
_test_fun: ## @test_fun
## BB#0: ## %entry
Ltmp1: ## Block address taken
Ltmp0:
## BB#1: ## %ret
movl $-1, %eax
ret
Rejoice.
llvm-svn: 98595
|
| |
|
|
|
|
| |
section, remove the target-specific code that performs this.
llvm-svn: 98580
|
| |
|
|
|
|
|
|
|
| |
label is generated, but then the block is deleted. Since the
value is undefined, we just emit the label right after the entry
label of the function. It might matter that the label is in the
same section as the function was afterall.
llvm-svn: 98579
|
| |
|
|
| |
llvm-svn: 98577
|
| |
|
|
|
|
|
|
| |
DAG nodes.
This is a work in progress. Patch by Dale Johannesen!
llvm-svn: 98568
|
| |
|
|
|
|
|
|
| |
function, then the BB is RAUW'd before the definition is emitted. There
are still two cases not being handled, but this should improve us back to
the situation before I touched anything.
llvm-svn: 98566
|
| |
|
|
| |
llvm-svn: 98558
|
| |
|
|
|
|
|
|
| |
machine instructions.
This is a work in progress.
llvm-svn: 98556
|
| |
|
|
| |
llvm-svn: 98550
|