LLVM API Documentation

Defines | 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/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>
Include dependency graph for X86FloatingPoint.cpp:

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 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;                                             \
    }                                                                     \
  }

Definition at line 567 of file X86FloatingPoint.cpp.

Referenced by getConcreteOpcode().

#define DEBUG_TYPE   "x86-codegen"

Definition at line 51 of file X86FloatingPoint.cpp.


Function Documentation

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().

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 550 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 1068 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 1100 of file X86FloatingPoint.cpp.

const TableEntry OpcodeTable[] [static]

Definition at line 585 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 761 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 1084 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 1116 of file X86FloatingPoint.cpp.