| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
generator to it. For non-bundle instructions, these behave exactly the same
as the MC layer API.
For properties like mayLoad / mayStore, look into the bundle and if any of the
bundled instructions has the property it would return true.
For properties like isPredicable, only return true if *all* of the bundled
instructions have the property.
For properties like canFoldAsLoad, isCompare, conservatively return false for
bundles.
llvm-svn: 146026
|
|
|
|
| |
llvm-svn: 144648
|
|
|
|
| |
llvm-svn: 144517
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The old naming scheme (load/use/def/store) can be traced back to an old
linear scan article, but the names don't match how slots are actually
used.
The load and store slots are not needed after the deferred spill code
insertion framework was deleted.
The use and def slots don't make any sense because we are using
half-open intervals as is customary in C code, but the names suggest
closed intervals. In reality, these slots were used to distinguish
early-clobber defs from normal defs.
The new naming scheme also has 4 slots, but the names match how the
slots are really used. This is a purely mechanical renaming, but some
of the code makes a lot more sense now.
llvm-svn: 144503
|
|
|
|
|
|
|
|
|
| |
PhysReg operands are not allowed to have sub-register indices at all.
For virtual registers with sub-reg indices, check that all registers in
the register class support the sub-reg index.
llvm-svn: 141220
|
|
|
|
|
|
| |
This exposes a -segmented-stacks bug.
llvm-svn: 140429
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is still a hack until we can teach tblgen to generate the
optional CPSR operand rather than an implicit CPSR def. But the
strangeness is now limited to the selection DAG. ADD/SUB MI's no
longer have implicit CPSR defs, nor do we allow flag setting variants
of these opcodes in machine code. There are several corner cases to
consider, and getting one wrong would previously lead to nasty
miscompilation. It's not the first time I've debugged one, so this
time I added enough verification to ensure it won't happen again.
llvm-svn: 140228
|
|
|
|
|
|
|
|
|
|
| |
There is only one legitimate use remaining, in addIntervalsForSpills().
All other calls to hasPHIKill() are only used to update PHIKill flags.
The addIntervalsForSpills() function is part of the old spilling
framework, only used by linearscan.
llvm-svn: 139783
|
|
|
|
|
|
|
| |
The ARM target depends on CPSR liveness being tracked after register
allocation.
llvm-svn: 136548
|
|
|
|
|
|
|
|
|
|
|
|
| |
This includes registers like EFLAGS and ST0-ST7. We don't check for
liveness issues in the verifier and scavenger because registers will
never be allocated from these classes.
While in SSA form, we do care about the liveness of unallocatable
unreserved registers. Liveness of EFLAGS and ST0 neds to be correct for
MachineDCE and MachineSinking.
llvm-svn: 136541
|
|
|
|
| |
llvm-svn: 136535
|
|
|
|
|
|
|
|
| |
sink them into MC layer.
- Added MCInstrInfo, which captures the tablegen generated static data. Chang
TargetInstrInfo so it's based off MCInstrInfo.
llvm-svn: 134021
|
|
|
|
| |
llvm-svn: 133944
|
|
|
|
|
|
| |
No functional change.
llvm-svn: 132455
|
|
|
|
|
|
|
|
| |
on CodeGen/X86/2007-05-07-InvokeSRet.ll. There is probably a bug here that was
fixed by r128961, but since there is no test or reference to a source file I have
to revert it.
llvm-svn: 131618
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
landing pad as its successor.
SjLj exception handling jumps to the correct landing pad via a switch statement
that's generated right before code-gen. Loosen the constraint in the machine
instruction verifier to allow for this. Note, this isn't the most rigorous check
since we cannot determine where that switch statement came from. But it's
marginally better than turning this check off when SjLj exceptions are used.
<rdar://problem/9187612>
llvm-svn: 130881
|
|
|
|
|
|
| |
Treat the landing pad as a normal successor when that happens.
llvm-svn: 128961
|
|
|
|
| |
llvm-svn: 128643
|
|
|
|
|
|
|
|
|
|
|
|
| |
This way, shrinkToUses() will ignore the instruction that is about to be
deleted, and we avoid leaving invalid live ranges that SplitKit doesn't like.
Fix a misunderstanding in MachineVerifier about <def,undef> operands. The
<undef> flag is valid on def operands where it has the same meaning as <undef>
on a use operand. It only applies to sub-register defines which also read the
full register.
llvm-svn: 128642
|
|
|
|
|
|
|
|
|
|
| |
Allow a live range to end with a kill flag, but don't allow a kill flag that
doesn't end the live range.
This makes the machine code verifier more useful during register allocation when
kill flag computation is deferred.
llvm-svn: 124838
|
|
|
|
|
|
| |
The slot indexes must be monotonically increasing through the function.
llvm-svn: 123324
|
|
|
|
| |
llvm-svn: 123322
|
|
|
|
|
|
|
|
|
|
| |
without a TRI instance.
Print virtual registers numbered from 0 instead of the arbitrary
FirstVirtualRegister. The first virtual register is printed as %vreg0.
TRI::NoRegister is printed as %noreg.
llvm-svn: 123107
|
|
|
|
|
|
| |
virtual registers.
llvm-svn: 123100
|
|
|
|
|
|
| |
in the most obvious way.
llvm-svn: 122610
|
|
|
|
|
|
|
|
|
| |
valno verification. The "Different value live out of predecessor" check is
incorrect in the case of phi-def valnos, so just skip that check for phi-def
valnos and instead check that all of the valnos for predecessors have phi-kill.
Fixes PR8863.
llvm-svn: 122581
|
|
|
|
|
|
| |
out-edges. Fixes PR8824.
llvm-svn: 122228
|
|
|
|
|
|
| |
begin at DEF slots. Fixes the second half of PR8813.
llvm-svn: 122225
|
|
|
|
| |
llvm-svn: 122224
|
|
|
|
|
|
| |
the register; it may be a dead def instead. Fixes PR8820.
llvm-svn: 122218
|
|
|
|
|
|
| |
PR8822.
llvm-svn: 122207
|
|
|
|
|
|
| |
half of PR8813.
llvm-svn: 122205
|
|
|
|
| |
llvm-svn: 122199
|
|
|
|
|
|
|
|
| |
createMachineVerifierPass and MachineFunction::verify.
The banner is printed before the machine code dump, just like the printer pass.
llvm-svn: 122113
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the operand uses the same register as a tied operand:
%r1 = add %r1, %r1
If add were a three-address instruction, kill flags would be required on at
least one of the uses. Since it is a two-address instruction, the tied use
operand must not have a kill flag.
This change makes the kill flag on the untied use operand optional.
llvm-svn: 122082
|
|
|
|
|
|
| |
operands in a variadic instruction.
llvm-svn: 119446
|
|
|
|
|
|
| |
(and likely) wrong about anyhow.
llvm-svn: 119320
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
When an instruction refers to a spill slot with a LiveStacks entry, check that
the spill slot is live at the instruction.
llvm-svn: 117944
|
|
|
|
| |
llvm-svn: 117762
|
|
|
|
|
|
| |
multiplicity.
llvm-svn: 117630
|
|
|
|
| |
llvm-svn: 117602
|
|
|
|
|
|
| |
Only virtuals should be requires to be connected.
llvm-svn: 117422
|
|
|
|
|
|
| |
components, each should get its own virtual register.
llvm-svn: 117407
|
|
|
|
|
|
| |
SlotIndexes when available.
llvm-svn: 117392
|
|
|
|
| |
llvm-svn: 117391
|
|
|
|
|
|
| |
Magic is happening that we don't understand.
llvm-svn: 117370
|
|
|
|
|
|
| |
of all predecessors.
llvm-svn: 117191
|
|
|
|
| |
llvm-svn: 117170
|