LLVM API Documentation
#include "MSP430ISelLowering.h"
#include "MSP430.h"
#include "MSP430MachineFunctionInfo.h"
#include "MSP430Subtarget.h"
#include "MSP430TargetMachine.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "MSP430GenCallingConv.inc"
Go to the source code of this file.
Defines | |
#define | DEBUG_TYPE "msp430-lower" |
Enumerations | |
enum | HWMultUseMode { NoHWMult, HWMultIntr, HWMultNoIntr } |
Functions | |
template<typename ArgT > | |
static void | ParseFunctionArgs (const SmallVectorImpl< ArgT > &Args, SmallVectorImpl< unsigned > &Out) |
static void | AnalyzeVarArgs (CCState &State, const SmallVectorImpl< ISD::OutputArg > &Outs) |
static void | AnalyzeVarArgs (CCState &State, const SmallVectorImpl< ISD::InputArg > &Ins) |
template<typename ArgT > | |
static void | AnalyzeArguments (CCState &State, SmallVectorImpl< CCValAssign > &ArgLocs, const SmallVectorImpl< ArgT > &Args) |
static void | AnalyzeRetResult (CCState &State, const SmallVectorImpl< ISD::InputArg > &Ins) |
static void | AnalyzeRetResult (CCState &State, const SmallVectorImpl< ISD::OutputArg > &Outs) |
template<typename ArgT > | |
static void | AnalyzeReturnValues (CCState &State, SmallVectorImpl< CCValAssign > &RVLocs, const SmallVectorImpl< ArgT > &Args) |
static SDValue | EmitCMP (SDValue &LHS, SDValue &RHS, SDValue &TargetCC, ISD::CondCode CC, SDLoc dl, SelectionDAG &DAG) |
Variables | |
static cl::opt< HWMultUseMode > | HWMultMode ("msp430-hwmult-mode", cl::Hidden, cl::desc("Hardware multiplier use mode"), cl::init(HWMultNoIntr), cl::values(clEnumValN(NoHWMult,"no","Do not use hardware multiplier"), clEnumValN(HWMultIntr,"interrupts","Assume hardware multiplier can be used inside interrupts"), clEnumValN(HWMultNoIntr,"use","Assume hardware multiplier cannot be used inside interrupts"), clEnumValEnd)) |
#define DEBUG_TYPE "msp430-lower" |
Definition at line 39 of file MSP430ISelLowering.cpp.
enum HWMultUseMode |
Definition at line 41 of file MSP430ISelLowering.cpp.
static void AnalyzeArguments | ( | CCState & | State, |
SmallVectorImpl< CCValAssign > & | ArgLocs, | ||
const SmallVectorImpl< ArgT > & | Args | ||
) | [static] |
Analyze incoming and outgoing function arguments. We need custom C++ code to handle special constraints in the ABI like reversing the order of the pieces of splitted arguments. In addition, all pieces of a certain argument have to be passed either using registers or the stack but never mixing both.
Definition at line 281 of file MSP430ISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCValAssign::AExt, llvm::CCState::AllocateReg(), AnalyzeVarArgs(), llvm::array_lengthof(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::CCValAssign::Full, llvm::CCValAssign::getReg(), llvm::CCState::HandleByVal(), llvm::MVT::i16, llvm::MVT::i8, llvm::ISD::ArgFlagsTy::isByVal(), llvm::ISD::ArgFlagsTy::isSExt(), llvm::CCState::isVarArg(), llvm::ISD::ArgFlagsTy::isZExt(), ParseFunctionArgs(), llvm::CCValAssign::SExt, llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::CCValAssign::ZExt.
static void AnalyzeRetResult | ( | CCState & | State, |
const SmallVectorImpl< ISD::InputArg > & | Ins | ||
) | [static] |
Definition at line 346 of file MSP430ISelLowering.cpp.
References llvm::CCState::AnalyzeCallResult().
Referenced by AnalyzeReturnValues().
static void AnalyzeRetResult | ( | CCState & | State, |
const SmallVectorImpl< ISD::OutputArg > & | Outs | ||
) | [static] |
Definition at line 351 of file MSP430ISelLowering.cpp.
References llvm::CCState::AnalyzeReturn().
static void AnalyzeReturnValues | ( | CCState & | State, |
SmallVectorImpl< CCValAssign > & | RVLocs, | ||
const SmallVectorImpl< ArgT > & | Args | ||
) | [static] |
Definition at line 357 of file MSP430ISelLowering.cpp.
References AnalyzeRetResult(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), and llvm::SmallVectorTemplateCommon< T, typename >::end().
static void AnalyzeVarArgs | ( | CCState & | State, |
const SmallVectorImpl< ISD::OutputArg > & | Outs | ||
) | [static] |
Definition at line 266 of file MSP430ISelLowering.cpp.
References llvm::CCState::AnalyzeCallOperands().
Referenced by AnalyzeArguments().
static void AnalyzeVarArgs | ( | CCState & | State, |
const SmallVectorImpl< ISD::InputArg > & | Ins | ||
) | [static] |
Definition at line 271 of file MSP430ISelLowering.cpp.
References llvm::CCState::AnalyzeFormalArguments().
static SDValue EmitCMP | ( | SDValue & | LHS, |
SDValue & | RHS, | ||
SDValue & | TargetCC, | ||
ISD::CondCode | CC, | ||
SDLoc | dl, | ||
SelectionDAG & | DAG | ||
) | [static] |
Definition at line 811 of file MSP430ISelLowering.cpp.
References llvm::CallingConv::C, llvm::MSP430ISD::CMP, MSP430CC::COND_E, MSP430CC::COND_GE, MSP430CC::COND_HS, MSP430CC::COND_INVALID, MSP430CC::COND_L, MSP430CC::COND_LO, MSP430CC::COND_NE, llvm::ISD::Constant, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getValueType(), llvm::MVT::Glue, llvm::MVT::i8, llvm::EVT::isFloatingPoint(), llvm_unreachable, llvm::ISD::SETEQ, llvm::ISD::SETGE, llvm::ISD::SETGT, llvm::ISD::SETLE, llvm::ISD::SETLT, llvm::ISD::SETNE, llvm::ISD::SETUGE, llvm::ISD::SETUGT, llvm::ISD::SETULE, llvm::ISD::SETULT, and std::swap().
Referenced by llvm::MSP430TargetLowering::LowerBR_CC(), llvm::MSP430TargetLowering::LowerSELECT_CC(), and llvm::MSP430TargetLowering::LowerSETCC().
static void ParseFunctionArgs | ( | const SmallVectorImpl< ArgT > & | Args, |
SmallVectorImpl< unsigned > & | Out | ||
) | [static] |
For each argument in a function store the number of pieces it is composed of.
Definition at line 253 of file MSP430ISelLowering.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), and llvm::SmallVectorTemplateCommon< T >::size().
Referenced by AnalyzeArguments().
cl::opt<HWMultUseMode> HWMultMode("msp430-hwmult-mode", cl::Hidden, cl::desc("Hardware multiplier use mode"), cl::init(HWMultNoIntr), cl::values(clEnumValN(NoHWMult,"no","Do not use hardware multiplier"),clEnumValN(HWMultIntr,"interrupts","Assume hardware multiplier can be used inside interrupts"),clEnumValN(HWMultNoIntr,"use","Assume hardware multiplier cannot be used inside interrupts"),clEnumValEnd)) [static] |
Referenced by llvm::MSP430TargetLowering::MSP430TargetLowering().