|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | Bulk move of TargetInstrInfo implementation into
TargetInstrInfoImpl. This is dirty because the code isn't part of
TargetInstrInfoImpl class, nor should it be, because the methods are
not target hooks. However, it's the current mechanism for keeping
libTarget useful outside the backend. You'll get a not-so-nice link
error if you invoke a TargetInstrInfo method that depends on CodeGen.
The TargetInstrInfoImpl class should probably be removed since it
doesn't really solve this problem.
To really fix this, we probably need separate interfaces for the
CodeGen/nonCodeGen sides of TargetInstrInfo.
llvm-svn: 158212 | 
| | 
| 
| 
| | llvm-svn: 158164 | 
| | 
| 
| 
| 
| 
| 
| | Minimum latency determines per-cycle scheduling groups.
Expected latency determines critical path and cost.
llvm-svn: 158021 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | The getPointerRegClass() hook can return register classes that depend on
the calling convention of the current function (ptr_rc_tailcall).
So far, we have been able to infer the calling convention from the
subtarget alone, but as we add support for multiple calling conventions
per target, that no longer works.
Patch by Yiannis Tsiouris!
llvm-svn: 156328 | 
| | 
| 
| 
| | llvm-svn: 146702 | 
| | 
| 
| 
| 
| 
| | TargetInstrInfoImpl to break Target's dependency on CodeGen.
llvm-svn: 146247 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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: 134244 | 
| | 
| 
| 
| 
| 
| | MCInstrItineraries) into MC.
llvm-svn: 134049 | 
| | 
| 
| 
| | llvm-svn: 134030 | 
| | 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| 
| 
| | The MC asm lexer wasn't honoring a non-default (anything but ';') statement
separator. Fix that, and generalize a bit to support multi-character
statement separators.
llvm-svn: 128227 | 
| | 
| 
| 
| | llvm-svn: 122539 | 
| | 
| 
| 
| | llvm-svn: 122193 | 
| | 
| 
| 
| 
| 
| 
| | headers provide symbols outside namespace std and the LLVM coding standards
state that we should prefix all of them.
llvm-svn: 122192 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| | llvm-svn: 117348 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | allow target to correctly compute latency for cases where static scheduling
  itineraries isn't sufficient. e.g. variable_ops instructions such as
  ARM::ldm.
  This also allows target without scheduling itineraries to compute operand
  latencies. e.g. X86 can return (approximated) latencies for high latency
  instructions such as division.
- Compute operand latencies for those defined by load multiple instructions,
  e.g. ldm and those used by store multiple instructions, e.g. stm.
llvm-svn: 115755 | 
| | 
| 
| 
| | llvm-svn: 113978 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | take multiple cycles to decode.
For the current if-converter clients (actually only ARM), the instructions that
are predicated on false are not nops. They would still take machine cycles to
decode. Micro-coded instructions such as LDM / STM can potentially take multiple
cycles to decode. If-converter should take treat them as non-micro-coded
simple instructions.
llvm-svn: 113570 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | instruction in the class would be decoded to. Or zero if the number of
uOPs must be determined dynamically.
This will be used to determine the cost-effectiveness of predicating a
micro-coded instruction.
llvm-svn: 113513 | 
| | 
| 
| 
| 
| 
| 
| | MachineRegisterInfo doesn't have to confusingly allocate an extra
entry.
llvm-svn: 106296 | 
| | 
| 
| 
| | llvm-svn: 79777 | 
| | 
| 
| 
| | llvm-svn: 79763 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | the only real caller (GetFunctionSizeInBytes) uses it.
The custom ARM implementation of this is basically reimplementing
an assembler poorly for negligible gain.  It should be removed 
IMNSHO, but I'll leave that to ARMish folks to decide.
llvm-svn: 77877 | 
| | 
| 
| 
| 
| 
| | in a header.
llvm-svn: 77874 | 
| | 
| 
| 
| 
| 
| | now that TargetOperandInfo does the heavy lifting.
llvm-svn: 77508 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | and convert code to using it, instead of having lots of things
   poke the isLookupPtrRegClass() method directly.
2. Make PointerLikeRegClass contain a 'kind' int, and store it in
   the existing regclass field of TargetOperandInfo when the
   isLookupPtrRegClass() predicate is set.  Make getRegClass pass
   this into TargetRegisterInfo::getPointerRegClass(), allowing
   targets to have multiple ptr_rc things.
llvm-svn: 77504 | 
| | 
| 
| 
| | llvm-svn: 70950 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | register destinations that are tied to source operands.  The
TargetInstrDescr::findTiedToSrcOperand method silently fails for inline
assembly.  The existing MachineInstr::isRegReDefinedByTwoAddr was very
close to doing what is needed, so this revision makes a few changes to
that method and also renames it to isRegTiedToUseOperand (for consistency
with the very similar isRegTiedToDefOperand and because it handles both
two-address instructions and inline assembly with tied registers).
llvm-svn: 68714 | 
| | 
| 
| 
| 
| 
| 
| | Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.
llvm-svn: 45695 | 
| | 
| 
| 
| | llvm-svn: 45680 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | that it is cheap and efficient to get.
Move a variety of predicates from TargetInstrInfo into 
TargetInstrDescriptor, which makes it much easier to query a predicate
when you don't have TII around.  Now you can use MI->getDesc()->isBranch()
instead of going through TII, and this is much more efficient anyway. Not
all of the predicates have been moved over yet.
Update old code that used MI->getInstrDescriptor()->Flags to use the
new predicates in many places.
llvm-svn: 45674 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | a header file from libcodegen.  This violates a layering order: codegen
depends on target, not the other way around.  The fix to this is to 
split TII into two classes, TII and TargetInstrInfoImpl, which defines
stuff that depends on libcodegen.  It is defined in libcodegen, where 
the base is not.
llvm-svn: 45475 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | e.g. MO.isMBB() instead of MO.isMachineBasicBlock().  I don't plan on 
switching everything over, so new clients should just start using the 
shorter names.
Remove old long accessors, switching everything over to use the short
accessor: getMachineBasicBlock() -> getMBB(), 
getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.
llvm-svn: 45464 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | - Eliminate the static "print" method for operands, moving it
    into MachineOperand::print.
  - Change various set* methods for register flags to take a bool
    for the value to set it to.  Remove unset* methods.
  - Group methods more logically by operand flavor in MachineOperand.h
llvm-svn: 45461 | 
| | 
| 
| 
| 
| 
| | Likewise setImmedValue -> setImm
llvm-svn: 45453 | 
| | 
| 
| 
| | llvm-svn: 45418 | 
| | 
| 
| 
| 
| 
| 
| | isRegister, isImmediate, and isMachineBasicBlock, which are equivalent,
and more popular.
llvm-svn: 41958 | 
| | 
| 
| 
| 
| 
| | terminator.
llvm-svn: 37960 | 
| | 
| 
| 
| | llvm-svn: 37891 | 
| | 
| 
| 
| | llvm-svn: 37528 | 
| | 
| 
| 
| | llvm-svn: 37341 | 
| | 
| 
| 
| | llvm-svn: 37307 | 
| | 
| 
| 
| | llvm-svn: 37139 | 
| | 
| 
| 
| | llvm-svn: 37138 | 
| | 
| 
| 
| | llvm-svn: 37124 | 
| | 
| 
| 
| | llvm-svn: 37123 | 
| | 
| 
| 
| | llvm-svn: 32366 |