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.