- Nov 11, 2010
-
-
Jakob Stoklund Olesen authored
This is the first small step towards using closed intervals for liveness instead of the half-open intervals we're using now. We want to be able to distinguish between a SlotIndex that represents a variable being live-out of a basic block, and an index representing a variable live-in to its successor. That requires two separate indexes between blocks. One for live-outs and one for live-ins. With this change, getMBBEndIdx(MBB).getPrevSlot() becomes stable so it stays greater than any instructions inserted at the end of MBB. llvm-svn: 118747
-
Jakob Stoklund Olesen authored
llvm-svn: 118742
-
Jakob Stoklund Olesen authored
constant loads. llvm-svn: 118741
-
- Nov 10, 2010
-
-
Devang Patel authored
Take care of special characters while creating named MDNode name to hold function specific local variable's info. This fixes radar 8653152. I am checking in testcase as a separate check-in. llvm-svn: 118726
-
Jakob Stoklund Olesen authored
Whenever splitting wants to insert a copy, it checks if the value can be rematerialized cheaply instead. Missing features: - Delete instructions when all uses have been rematerialized. - Truncate live ranges to the remaining uses after rematerialization. llvm-svn: 118702
-
Andrew Trick authored
benchmarks hitting an assertion. Adds LiveIntervalUnion::collectInterferingVRegs. Fixes "late spilling" by checking for any unspillable live vregs among all physReg aliases. llvm-svn: 118701
-
Jakob Stoklund Olesen authored
llvm-svn: 118661
-
Rafael Espindola authored
earlier. Implicit bool -> int conversions are evil! llvm-svn: 118651
-
- Nov 09, 2010
-
-
Andrew Trick authored
(retry now that the windows build is green) llvm-svn: 118630
-
Matt Beaumont-Gay authored
-Wnon-virtual-dtor. llvm-svn: 118616
-
Andrew Trick authored
llvm-svn: 118613
-
Andrew Trick authored
llvm-svn: 118604
-
Dan Gohman authored
in order to fold it into a load. llvm-svn: 118471
-
Dale Johannesen authored
{i64, i64} from matching i128. llvm-svn: 118465
-
- Nov 08, 2010
-
-
Andrew Trick authored
handle cases in which a register is unavailable for spill code. Adds LiveIntervalUnion::extract. While processing interferences on a live virtual register, reuses the same Query object for each physcial reg. llvm-svn: 118423
-
Che-Liang Chiou authored
llvm-svn: 118394
-
- Nov 06, 2010
-
-
Benjamin Kramer authored
llvm-svn: 118342
-
- Nov 05, 2010
-
-
Duncan Sands authored
to perform the copy, which may be of lots of memory [*]. It would be good if the fall-back code generated something reasonable, i.e. did the copy in a loop, rather than vast numbers of loads and stores. Add a note about this. Currently target specific code seems to always kick in so this is more of a theoretical issue rather than a practical one now that X86 has been fixed. [*] It's amazing how often people pass mega-byte long arrays by copy... llvm-svn: 118275
-
- Nov 04, 2010
-
-
Rafael Espindola authored
llvm-svn: 118254
-
Rafael Espindola authored
they do :-( llvm-svn: 118250
-
Rafael Espindola authored
llvm-svn: 118249
-
Duncan Sands authored
and as such can be represented by an MVT - the more complicated EVT is not needed. Use MVT for ValVT everywhere. llvm-svn: 118245
-
Jakob Stoklund Olesen authored
This way, InlineSpiller does the same amount of splitting as the standard spiller. Splitting should really be guided by the register allocator, and doesn't belong in the spiller at all. llvm-svn: 118216
-
- Nov 03, 2010
-
-
Eric Christopher authored
just do it earlier too. llvm-svn: 118195
-
Jakob Stoklund Olesen authored
splitting needs them. llvm-svn: 118194
-
Jakob Stoklund Olesen authored
llvm-svn: 118193
-
Duncan Sands authored
with a SimpleValueType, while an EVT supports equality and inequality comparisons with SimpleValueType. llvm-svn: 118169
-
Duncan Sands authored
value type, so there is no point in passing it around using an EVT. Use the simpler MVT everywhere. Rather than trying to propagate this information maximally in all the code that using the calling convention stuff, I chose to do a mainly low impact change instead. llvm-svn: 118167
-
Eric Christopher authored
this by using an undef as a pointer. Fixes rdar://8625016 llvm-svn: 118164
-
Dan Gohman authored
encounters (and:i64 (shl:i64 (load:i64), 1), 0xffffffff). This fixes rdar://8606584. llvm-svn: 118143
-
Evan Cheng authored
1. Fix pre-ra scheduler so it doesn't try to push instructions above calls to "optimize for latency". Call instructions don't have the right latency and this is more likely to use introduce spills. 2. Fix if-converter cost function. For ARM, it should use instruction latencies, not # of micro-ops since multi-latency instructions is completely executed even when the predicate is false. Also, some instruction will be "slower" when they are predicated due to the register def becoming implicit input. rdar://8598427 llvm-svn: 118135
-
- Nov 02, 2010
-
-
rdar://problem/8612856Andrew Trick authored
breaker needs to check all definitions of the antidepenent register to avoid multiple defs of the same new register. llvm-svn: 118032
-
Devang Patel authored
llvm-svn: 118027
-
Devang Patel authored
llvm-svn: 118022
-
Devang Patel authored
llvm-svn: 118020
-
Jakob Stoklund Olesen authored
BB#1: derived from LLVM BB %bb.nph28 Live Ins: %AL Predecessors according to CFG: BB#0 TEST8rr %reg16384<kill>, %reg16384, %EFLAGS<imp-def>; GR8:%reg16384 JNE_4 <BB#2>, %EFLAGS<imp-use,kill> JMP_4 <BB#2> Successors according to CFG: BB#2 BB#2 These double CFG edges only ever occur in bugpoint-generated code, so there is no need to attempt something clever. llvm-svn: 117992
-
Jakob Stoklund Olesen authored
edges on demand. llvm-svn: 117982
-
Jakob Stoklund Olesen authored
It is legal for an instruction to have two operands using the same register, only one a kill. This is interpreted as a kill. llvm-svn: 117981
-
Jakob Stoklund Olesen authored
source, and let rewrite() clean it up. This way, kill flags on the inserted copies are fixed as well during rewrite(). We can't just assume that all the copies we insert are going to be kills since critical edges into loop headers sometimes require both source and dest to be live out of a block. llvm-svn: 117980
-
- Nov 01, 2010
-
-
Jakob Stoklund Olesen authored
At least X86FloatingPoint requires correct kill flags after register allocation, and targets using register scavenging benefit. Conservative kill flags are not enough. llvm-svn: 117960
-