|
LLVM
4.0.0
|
#include "Hexagon.h"#include "HexagonISelLowering.h"#include "HexagonMachineFunctionInfo.h"#include "HexagonRegisterInfo.h"#include "HexagonSubtarget.h"#include "HexagonTargetMachine.h"#include "HexagonTargetObjectFile.h"#include "llvm/ADT/APInt.h"#include "llvm/ADT/ArrayRef.h"#include "llvm/ADT/SmallVector.h"#include "llvm/CodeGen/CallingConvLower.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineFunction.h"#include "llvm/CodeGen/MachineMemOperand.h"#include "llvm/CodeGen/RuntimeLibcalls.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/CodeGen/SelectionDAG.h"#include "llvm/CodeGen/ValueTypes.h"#include "llvm/IR/BasicBlock.h"#include "llvm/IR/CallingConv.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/DerivedTypes.h"#include "llvm/IR/Function.h"#include "llvm/IR/GlobalValue.h"#include "llvm/IR/InlineAsm.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Intrinsics.h"#include "llvm/IR/Module.h"#include "llvm/IR/Type.h"#include "llvm/IR/Value.h"#include "llvm/MC/MCRegisterInfo.h"#include "llvm/Support/Casting.h"#include "llvm/Support/CodeGen.h"#include "llvm/Support/CommandLine.h"#include "llvm/Support/Debug.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Target/TargetCallingConv.h"#include "llvm/Target/TargetMachine.h"#include <algorithm>#include <cassert>#include <cstddef>#include <cstdint>#include <limits>#include <utility>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "hexagon-lowering" |
Enumerations | |
| enum | StridedLoadKind |
Variables | |
| static cl::opt< bool > | EmitJumpTables ("hexagon-emit-jump-tables", cl::init(true), cl::Hidden, cl::desc("Control jump table emission on Hexagon target")) |
| static cl::opt< bool > | EnableHexSDNodeSched ("enable-hexagon-sdnode-sched", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable Hexagon SDNode scheduling")) |
| static cl::opt< bool > | EnableFastMath ("ffast-math", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable Fast Math processing")) |
| static cl::opt< int > | MinimumJumpTables ("minimum-jump-tables", cl::Hidden, cl::ZeroOrMore, cl::init(5), cl::desc("Set minimum jump tables")) |
| static cl::opt< int > | MaxStoresPerMemcpyCL ("max-store-memcpy", cl::Hidden, cl::ZeroOrMore, cl::init(6), cl::desc("Max #stores to inline memcpy")) |
| static cl::opt< int > | MaxStoresPerMemcpyOptSizeCL ("max-store-memcpy-Os", cl::Hidden, cl::ZeroOrMore, cl::init(4), cl::desc("Max #stores to inline memcpy")) |
| static cl::opt< int > | MaxStoresPerMemmoveCL ("max-store-memmove", cl::Hidden, cl::ZeroOrMore, cl::init(6), cl::desc("Max #stores to inline memmove")) |
| static cl::opt< int > | MaxStoresPerMemmoveOptSizeCL ("max-store-memmove-Os", cl::Hidden, cl::ZeroOrMore, cl::init(4), cl::desc("Max #stores to inline memmove")) |
| static cl::opt< int > | MaxStoresPerMemsetCL ("max-store-memset", cl::Hidden, cl::ZeroOrMore, cl::init(8), cl::desc("Max #stores to inline memset")) |
| static cl::opt< int > | MaxStoresPerMemsetOptSizeCL ("max-store-memset-Os", cl::Hidden, cl::ZeroOrMore, cl::init(4), cl::desc("Max #stores to inline memset")) |
| #define DEBUG_TYPE "hexagon-lowering" |
Definition at line 64 of file HexagonISelLowering.cpp.
| enum StridedLoadKind |
Definition at line 122 of file HexagonISelLowering.cpp.
|
static |
Definition at line 249 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCValAssign::AExt, llvm::CCState::AllocateStack(), llvm::CCValAssign::BCvt, CC_Hexagon32(), CC_Hexagon64(), CC_HexagonVector(), llvm::MVT::f32, llvm::MVT::f64, llvm::ISD::ArgFlagsTy::getByValAlign(), llvm::ISD::ArgFlagsTy::getByValSize(), llvm::CCValAssign::getMem(), llvm::MVT::i1, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::ISD::ArgFlagsTy::isByVal(), isHvxVectorType(), llvm::ISD::ArgFlagsTy::isSExt(), llvm::ISD::ArgFlagsTy::isZExt(), Offset, llvm::CCValAssign::SExt, llvm::MVT::v16i16, llvm::MVT::v2i16, llvm::MVT::v2i32, llvm::MVT::v32i8, llvm::MVT::v4i16, llvm::MVT::v4i8, llvm::MVT::v8i32, llvm::MVT::v8i8, and llvm::CCValAssign::ZExt.
Referenced by CC_Hexagon_VarArg(), llvm::HexagonTargetLowering::LowerCall(), and llvm::HexagonTargetLowering::LowerFormalArguments().
|
static |
Definition at line 301 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCState::AllocateReg(), llvm::CCState::AllocateStack(), llvm::CCValAssign::getMem(), llvm::CCValAssign::getReg(), Offset, R2, and R4.
Referenced by CC_Hexagon().
|
static |
Definition at line 318 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCState::AllocateReg(), llvm::CCState::AllocateStack(), llvm::CCValAssign::getMem(), llvm::CCValAssign::getReg(), and Offset.
Referenced by CC_Hexagon().
|
static |
Definition at line 175 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCValAssign::AExt, llvm::CCState::AllocateStack(), CC_Hexagon(), llvm::MVT::f32, llvm::MVT::f64, llvm::ISD::ArgFlagsTy::getByValAlign(), llvm::ISD::ArgFlagsTy::getByValSize(), llvm::CCValAssign::getMem(), llvm::MVT::i1, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::ISD::ArgFlagsTy::isByVal(), llvm::ISD::ArgFlagsTy::isSExt(), llvm::ISD::ArgFlagsTy::isZExt(), llvm_unreachable, Offset, llvm::CCValAssign::SExt, llvm::MVT::v1024i1, llvm::MVT::v128i16, llvm::MVT::v128i8, llvm::MVT::v16i16, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::MVT::v16i8, llvm::MVT::v256i8, llvm::MVT::v2i64, llvm::MVT::v32i16, llvm::MVT::v32i32, llvm::MVT::v32i64, llvm::MVT::v32i8, llvm::MVT::v4i32, llvm::MVT::v4i64, llvm::MVT::v512i1, llvm::MVT::v64i16, llvm::MVT::v64i32, llvm::MVT::v64i8, llvm::MVT::v8i16, llvm::MVT::v8i32, llvm::MVT::v8i64, and llvm::CCValAssign::ZExt.
Referenced by llvm::HexagonTargetLowering::LowerCall().
|
static |
Definition at line 342 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCState::AllocateReg(), llvm::CCState::AllocateStack(), llvm::CCState::getMachineFunction(), llvm::CCValAssign::getMem(), llvm::CCValAssign::getReg(), llvm::MachineFunction::getSubtarget(), Offset, llvm::HexagonSubtarget::useHVXOps(), llvm::MVT::v1024i1, llvm::MVT::v128i16, llvm::MVT::v128i8, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::NVPTX::PTXLdStInstCode::V2, llvm::MVT::v256i8, llvm::MVT::v32i16, llvm::MVT::v32i32, llvm::MVT::v32i64, llvm::NVPTX::PTXLdStInstCode::V4, llvm::MVT::v512i1, llvm::MVT::v64i16, llvm::MVT::v64i32, llvm::MVT::v64i8, and llvm::MVT::v8i64.
Referenced by CC_Hexagon().
|
static |
CreateCopyOfByValArgument - Make a copy of an aggregate at address specified by "Src" to address "Dst" of size "Size".
Alignment information is specified by the specific parameter attribute. The copy will be passed as a byval function parameter. Sometimes what we are copying is the end of a larger object, the part that does not fit in registers.
Definition at line 561 of file HexagonISelLowering.cpp.
References llvm::ISD::ArgFlagsTy::getByValAlign(), llvm::ISD::ArgFlagsTy::getByValSize(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getMemcpy(), and llvm::MVT::i32.
Referenced by llvm::HexagonTargetLowering::LowerCall().
Definition at line 1253 of file HexagonISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::EVT::getSimpleVT(), llvm::MVT::v4i16, llvm::MVT::v4i8, llvm::HexagonISD::VSPLATB, and llvm::HexagonISD::VSPLATH.
Referenced by llvm::HexagonTargetLowering::LowerBUILD_VECTOR(), and llvm::HexagonTargetLowering::LowerVECTOR_SHUFFLE().
|
static |
Definition at line 928 of file HexagonISelLowering.cpp.
References llvm::ISD::ADD, llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getSubtarget(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, Offset, llvm::HexagonSubtarget::useHVXOps(), llvm::MVT::v128i8, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::MVT::v32i16, llvm::MVT::v32i32, llvm::MVT::v64i16, llvm::MVT::v64i8, and llvm::MVT::v8i64.
Referenced by llvm::HexagonTargetLowering::getPostIndexedAddressParts().
|
static |
Definition at line 2441 of file HexagonISelLowering.cpp.
References llvm::SDNode::getNumOperands(), llvm::SDNode::getOperand(), and i.
Referenced by llvm::HexagonTargetLowering::LowerVECTOR_SHIFT().
Definition at line 571 of file HexagonISelLowering.cpp.
References llvm::MVT::SimpleTy, llvm::MVT::v1024i1, llvm::MVT::v128i16, llvm::MVT::v128i8, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::MVT::v256i8, llvm::MVT::v32i16, llvm::MVT::v32i32, llvm::MVT::v32i64, llvm::MVT::v512i1, llvm::MVT::v64i16, llvm::MVT::v64i32, llvm::MVT::v64i8, and llvm::MVT::v8i64.
Referenced by CC_Hexagon(), llvm::HexagonTargetLowering::LowerCall(), and llvm::HexagonTargetLowering::LowerEXTRACT_VECTOR().
Definition at line 1264 of file HexagonISelLowering.cpp.
References llvm::ISD::AssertSext, llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::ISD::LOAD, and llvm::ISD::TRUNCATE.
Referenced by llvm::HexagonTargetLowering::LowerSETCC().
|
static |
Definition at line 2334 of file HexagonISelLowering.cpp.
References llvm::ArrayRef< T >::size().
Referenced by llvm::HexagonTargetLowering::isShuffleMaskLegal(), and llvm::HexagonTargetLowering::LowerVECTOR_SHUFFLE().
|
static |
Definition at line 408 of file HexagonISelLowering.cpp.
References llvm::CCValAssign::AExt, llvm::CCValAssign::BCvt, llvm::MVT::f32, llvm::MVT::f64, llvm::CCValAssign::Full, llvm::CCState::getMachineFunction(), llvm::MachineFunction::getSubtarget(), llvm::MVT::i1, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::ISD::ArgFlagsTy::isSExt(), llvm::ISD::ArgFlagsTy::isZExt(), RetCC_Hexagon32(), RetCC_Hexagon64(), RetCC_HexagonVector(), llvm::CCValAssign::SExt, llvm::HexagonSubtarget::useHVXOps(), llvm::MVT::v1024i1, llvm::MVT::v128i16, llvm::MVT::v128i8, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::MVT::v256i8, llvm::MVT::v2i16, llvm::MVT::v2i32, llvm::MVT::v32i16, llvm::MVT::v32i32, llvm::MVT::v32i64, llvm::MVT::v4i16, llvm::MVT::v4i8, llvm::MVT::v512i1, llvm::MVT::v64i16, llvm::MVT::v64i32, llvm::MVT::v64i8, llvm::MVT::v8i64, llvm::MVT::v8i8, and llvm::CCValAssign::ZExt.
Referenced by llvm::HexagonTargetLowering::LowerCallResult(), and llvm::HexagonTargetLowering::LowerReturn().
|
static |
Definition at line 470 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCState::AllocateReg(), llvm::CCState::AllocateStack(), llvm::MVT::f32, llvm::CCValAssign::getMem(), llvm::CCValAssign::getReg(), llvm::MVT::i32, Offset, R2, and R4.
Referenced by RetCC_Hexagon().
|
static |
Definition at line 491 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCState::AllocateReg(), llvm::CCState::AllocateStack(), llvm::MVT::f64, llvm::CCValAssign::getMem(), llvm::CCValAssign::getReg(), llvm::MVT::i64, and Offset.
Referenced by RetCC_Hexagon().
|
static |
Definition at line 506 of file HexagonISelLowering.cpp.
References llvm::CCState::addLoc(), llvm::CCState::AllocateReg(), llvm::CCState::AllocateStack(), llvm::CCState::getMachineFunction(), llvm::CCValAssign::getMem(), llvm::CCValAssign::getReg(), llvm::MachineFunction::getSubtarget(), Offset, llvm::HexagonSubtarget::useHVXOps(), llvm::MVT::v16i32, llvm::MVT::v32i32, and llvm::MVT::v64i32.
Referenced by RetCC_Hexagon().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
|
static |
Referenced by llvm::HexagonTargetLowering::HexagonTargetLowering().
1.8.6