mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-28 14:36:34 +00:00
Move the primary fast-isel top-level comments to FastISel.cpp, where
they'll be a little more visible. Also, update and reword them a bit. llvm-svn: 56877
This commit is contained in:
parent
2219758606
commit
19530c810d
@ -9,6 +9,34 @@
|
||||
//
|
||||
// This file contains the implementation of the FastISel class.
|
||||
//
|
||||
// "Fast" instruction selection is designed to emit very poor code quickly.
|
||||
// Also, it is not designed to be able to do much lowering, so most illegal
|
||||
// types (e.g. i64 on 32-bit targets) and operations (e.g. calls) are not
|
||||
// supported. It is also not intended to be able to do much optimization,
|
||||
// except in a few cases where doing optimizations reduces overall compile
|
||||
// time (e.g. folding constants into immediate fields, because it's cheap
|
||||
// and it reduces the number of instructions later phases have to examine).
|
||||
//
|
||||
// "Fast" instruction selection is able to fail gracefully and transfer
|
||||
// control to the SelectionDAG selector for operations that it doesn't
|
||||
// support. In many cases, this allows us to avoid duplicating a lot of
|
||||
// the complicated lowering logic that SelectionDAG currently has.
|
||||
//
|
||||
// The intended use for "fast" instruction selection is "-O0" mode
|
||||
// compilation, where the quality of the generated code is irrelevant when
|
||||
// weighed against the speed at which the code can be generated. Also,
|
||||
// at -O0, the LLVM optimizers are not running, and this makes the
|
||||
// compile time of codegen a much higher portion of the overall compile
|
||||
// time. Despite its limitations, "fast" instruction selection is able to
|
||||
// handle enough code on its own to provide noticeable overall speedups
|
||||
// in -O0 compiles.
|
||||
//
|
||||
// Basic operations are supported in a target-independent way, by reading
|
||||
// the same instruction descriptions that the SelectionDAG selector reads,
|
||||
// and identifying simple arithmetic operations that can be directly selected
|
||||
// from simple operators. More complicated operations currently require
|
||||
// target-specific code.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Function.h"
|
||||
|
@ -7,32 +7,14 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This tablegen backend emits a "fast" instruction selector.
|
||||
// This tablegen backend emits code for use by the "fast" instruction
|
||||
// selection algorithm. See the comments at the top of
|
||||
// lib/CodeGen/SelectionDAG/FastISel.cpp for background.
|
||||
//
|
||||
// This instruction selection method is designed to emit very poor code
|
||||
// quickly. Also, it is not designed to do much lowering, so most illegal
|
||||
// types (e.g. i64 on 32-bit targets) and operations (e.g. calls) are not
|
||||
// supported and cannot easily be added. Blocks containing operations
|
||||
// that are not supported need to be handled by a more capable selector,
|
||||
// such as the SelectionDAG selector.
|
||||
// This file scans through the target's tablegen instruction-info files
|
||||
// and extracts instructions with obvious-looking patterns, and it emits
|
||||
// code to look up these instructions by type and operator.
|
||||
//
|
||||
// The intended use for "fast" instruction selection is "-O0" mode
|
||||
// compilation, where the quality of the generated code is irrelevant when
|
||||
// weighed against the speed at which the code can be generated.
|
||||
//
|
||||
// If compile time is so important, you might wonder why we don't just
|
||||
// skip codegen all-together, emit LLVM bytecode files, and execute them
|
||||
// with an interpreter. The answer is that it would complicate linking and
|
||||
// debugging, and also because that isn't how a compiler is expected to
|
||||
// work in some circles.
|
||||
//
|
||||
// If you need better generated code or more lowering than what this
|
||||
// instruction selector provides, use the SelectionDAG (DAGISel) instruction
|
||||
// selector instead. If you're looking here because SelectionDAG isn't fast
|
||||
// enough, consider looking into improving the SelectionDAG infastructure
|
||||
// instead. At the time of this writing there remain several major
|
||||
// opportunities for improvement.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "FastISelEmitter.h"
|
||||
|
Loading…
Reference in New Issue
Block a user