LLVM API Documentation
#include "X86.h"#include "X86InstrInfo.h"#include "llvm/ADT/DepthFirstIterator.h"#include "llvm/ADT/STLExtras.h"#include "llvm/ADT/SmallPtrSet.h"#include "llvm/ADT/SmallSet.h"#include "llvm/ADT/SmallVector.h"#include "llvm/ADT/Statistic.h"#include "llvm/CodeGen/EdgeBundles.h"#include "llvm/CodeGen/MachineFunctionPass.h"#include "llvm/CodeGen/MachineInstrBuilder.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/CodeGen/LivePhysRegs.h"#include "llvm/CodeGen/Passes.h"#include "llvm/IR/InlineAsm.h"#include "llvm/Support/Debug.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Target/TargetInstrInfo.h"#include "llvm/Target/TargetMachine.h"#include "llvm/Target/TargetSubtargetInfo.h"#include <algorithm>#include <bitset>
Go to the source code of this file.
Defines | |
| #define | DEBUG_TYPE "x86-codegen" |
| #define | ASSERT_SORTED(TABLE) |
Functions | |
| STATISTIC (NumFXCH,"Number of fxch instructions inserted") | |
| STATISTIC (NumFP,"Number of floating point instructions") | |
| static unsigned | getFPReg (const MachineOperand &MO) |
| static bool | TableIsSorted (const TableEntry *Table, unsigned NumEntries) |
| static int | Lookup (const TableEntry *Table, unsigned N, unsigned Opcode) |
| static unsigned | getConcreteOpcode (unsigned Opcode) |
Variables | |
| static const TableEntry | OpcodeTable [] |
| static const TableEntry | PopTable [] |
| static const TableEntry | ForwardST0Table [] |
| static const TableEntry | ReverseST0Table [] |
| static const TableEntry | ForwardSTiTable [] |
| static const TableEntry | ReverseSTiTable [] |
| #define ASSERT_SORTED | ( | TABLE | ) |
{ static bool TABLE##Checked = false; \
if (!TABLE##Checked) { \
assert(TableIsSorted(TABLE, array_lengthof(TABLE)) && \
"All lookup tables must be sorted for efficient access!"); \
TABLE##Checked = true; \
} \
}
Definition at line 567 of file X86FloatingPoint.cpp.
Referenced by getConcreteOpcode().
| #define DEBUG_TYPE "x86-codegen" |
Definition at line 51 of file X86FloatingPoint.cpp.
| static unsigned getConcreteOpcode | ( | unsigned | Opcode | ) | [static] |
Definition at line 747 of file X86FloatingPoint.cpp.
References llvm::array_lengthof(), ASSERT_SORTED, Lookup(), and OpcodeTable.
| static unsigned getFPReg | ( | const MachineOperand & | MO | ) | [static] |
getFPReg - Return the X86::FPx register number for the specified operand. For example, this returns 3 for X86::FP3.
Definition at line 288 of file X86FloatingPoint.cpp.
References llvm::MachineOperand::getReg(), and llvm::MachineOperand::isReg().
Definition at line 557 of file X86FloatingPoint.cpp.
Referenced by llvm::bfi_detail::IrreducibleGraph::addEdge(), getConcreteOpcode(), llvm::ConstantUniqueMap< ConstantStruct >::getOrCreate(), llvm::bfi_detail::IrreducibleGraph::indexNodes(), and llvm::ConstantUniqueMap< ConstantStruct >::replaceOperandsInPlace().
| STATISTIC | ( | NumFXCH | , |
| "Number of fxch instructions inserted" | |||
| ) |
| STATISTIC | ( | NumFP | , |
| "Number of floating point instructions" | |||
| ) |
| static bool TableIsSorted | ( | const TableEntry * | Table, |
| unsigned | NumEntries | ||
| ) | [static] |
Definition at line 550 of file X86FloatingPoint.cpp.
const TableEntry ForwardST0Table[] [static] |
{
{ X86::ADD_Fp32 , X86::ADD_FST0r },
{ X86::ADD_Fp64 , X86::ADD_FST0r },
{ X86::ADD_Fp80 , X86::ADD_FST0r },
{ X86::DIV_Fp32 , X86::DIV_FST0r },
{ X86::DIV_Fp64 , X86::DIV_FST0r },
{ X86::DIV_Fp80 , X86::DIV_FST0r },
{ X86::MUL_Fp32 , X86::MUL_FST0r },
{ X86::MUL_Fp64 , X86::MUL_FST0r },
{ X86::MUL_Fp80 , X86::MUL_FST0r },
{ X86::SUB_Fp32 , X86::SUB_FST0r },
{ X86::SUB_Fp64 , X86::SUB_FST0r },
{ X86::SUB_Fp80 , X86::SUB_FST0r },
}
Definition at line 1068 of file X86FloatingPoint.cpp.
const TableEntry ForwardSTiTable[] [static] |
{
{ X86::ADD_Fp32 , X86::ADD_FrST0 },
{ X86::ADD_Fp64 , X86::ADD_FrST0 },
{ X86::ADD_Fp80 , X86::ADD_FrST0 },
{ X86::DIV_Fp32 , X86::DIVR_FrST0 },
{ X86::DIV_Fp64 , X86::DIVR_FrST0 },
{ X86::DIV_Fp80 , X86::DIVR_FrST0 },
{ X86::MUL_Fp32 , X86::MUL_FrST0 },
{ X86::MUL_Fp64 , X86::MUL_FrST0 },
{ X86::MUL_Fp80 , X86::MUL_FrST0 },
{ X86::SUB_Fp32 , X86::SUBR_FrST0 },
{ X86::SUB_Fp64 , X86::SUBR_FrST0 },
{ X86::SUB_Fp80 , X86::SUBR_FrST0 },
}
Definition at line 1100 of file X86FloatingPoint.cpp.
const TableEntry OpcodeTable[] [static] |
Definition at line 585 of file X86FloatingPoint.cpp.
Referenced by getConcreteOpcode().
{
{ X86::ADD_FrST0 , X86::ADD_FPrST0 },
{ X86::DIVR_FrST0, X86::DIVR_FPrST0 },
{ X86::DIV_FrST0 , X86::DIV_FPrST0 },
{ X86::IST_F16m , X86::IST_FP16m },
{ X86::IST_F32m , X86::IST_FP32m },
{ X86::MUL_FrST0 , X86::MUL_FPrST0 },
{ X86::ST_F32m , X86::ST_FP32m },
{ X86::ST_F64m , X86::ST_FP64m },
{ X86::ST_Frr , X86::ST_FPrr },
{ X86::SUBR_FrST0, X86::SUBR_FPrST0 },
{ X86::SUB_FrST0 , X86::SUB_FPrST0 },
{ X86::UCOM_FIr , X86::UCOM_FIPr },
{ X86::UCOM_FPr , X86::UCOM_FPPr },
{ X86::UCOM_Fr , X86::UCOM_FPr },
}
Definition at line 761 of file X86FloatingPoint.cpp.
const TableEntry ReverseST0Table[] [static] |
{
{ X86::ADD_Fp32 , X86::ADD_FST0r },
{ X86::ADD_Fp64 , X86::ADD_FST0r },
{ X86::ADD_Fp80 , X86::ADD_FST0r },
{ X86::DIV_Fp32 , X86::DIVR_FST0r },
{ X86::DIV_Fp64 , X86::DIVR_FST0r },
{ X86::DIV_Fp80 , X86::DIVR_FST0r },
{ X86::MUL_Fp32 , X86::MUL_FST0r },
{ X86::MUL_Fp64 , X86::MUL_FST0r },
{ X86::MUL_Fp80 , X86::MUL_FST0r },
{ X86::SUB_Fp32 , X86::SUBR_FST0r },
{ X86::SUB_Fp64 , X86::SUBR_FST0r },
{ X86::SUB_Fp80 , X86::SUBR_FST0r },
}
Definition at line 1084 of file X86FloatingPoint.cpp.
const TableEntry ReverseSTiTable[] [static] |
{
{ X86::ADD_Fp32 , X86::ADD_FrST0 },
{ X86::ADD_Fp64 , X86::ADD_FrST0 },
{ X86::ADD_Fp80 , X86::ADD_FrST0 },
{ X86::DIV_Fp32 , X86::DIV_FrST0 },
{ X86::DIV_Fp64 , X86::DIV_FrST0 },
{ X86::DIV_Fp80 , X86::DIV_FrST0 },
{ X86::MUL_Fp32 , X86::MUL_FrST0 },
{ X86::MUL_Fp64 , X86::MUL_FrST0 },
{ X86::MUL_Fp80 , X86::MUL_FrST0 },
{ X86::SUB_Fp32 , X86::SUB_FrST0 },
{ X86::SUB_Fp64 , X86::SUB_FrST0 },
{ X86::SUB_Fp80 , X86::SUB_FrST0 },
}
Definition at line 1116 of file X86FloatingPoint.cpp.