LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros | Functions | Variables
X86FloatingPoint.cpp File Reference
#include "X86.h"
#include "X86InstrInfo.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.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/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 <algorithm>
Include dependency graph for X86FloatingPoint.cpp:

Go to the source code of this file.

Macros

#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 []
 

Macro Definition Documentation

#define ASSERT_SORTED (   TABLE)
Value:
{ 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; \
} \
}
static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries)
size_t array_lengthof(T(&)[N])
Find the length of an array.
Definition: STLExtras.h:250
* if(!EatIfPresent(lltok::kw_thread_local)) return false

Definition at line 606 of file X86FloatingPoint.cpp.

Referenced by getConcreteOpcode().

#define DEBUG_TYPE   "x86-codegen"

Definition at line 26 of file X86FloatingPoint.cpp.

Function Documentation

static unsigned getConcreteOpcode ( unsigned  Opcode)
static

Definition at line 786 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 330 of file X86FloatingPoint.cpp.

References llvm::MachineOperand::getReg(), and llvm::MachineOperand::isReg().

static int Lookup ( const TableEntry *  Table,
unsigned  N,
unsigned  Opcode 
)
static
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 589 of file X86FloatingPoint.cpp.

Variable Documentation

const TableEntry ForwardST0Table[]
static
Initial value:
= {
{ 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 1086 of file X86FloatingPoint.cpp.

const TableEntry ForwardSTiTable[]
static
Initial value:
= {
{ 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 1118 of file X86FloatingPoint.cpp.

const TableEntry OpcodeTable[]
static

Definition at line 624 of file X86FloatingPoint.cpp.

Referenced by getConcreteOpcode().

const TableEntry PopTable[]
static
Initial value:
= {
{ 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 800 of file X86FloatingPoint.cpp.

const TableEntry ReverseST0Table[]
static
Initial value:
= {
{ 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 1102 of file X86FloatingPoint.cpp.

const TableEntry ReverseSTiTable[]
static
Initial value:
= {
{ 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 1134 of file X86FloatingPoint.cpp.