LLVM
8.0.1
|
#include "HexagonISelLowering.h"
#include "Hexagon.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/ADT/StringSwitch.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/RuntimeLibcalls.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/CodeGen/TargetCallingConv.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/IntrinsicInst.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/TargetMachine.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <utility>
#include "HexagonGenCallingConv.inc"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "hexagon-lowering" |
Functions | |
static bool | CC_SkipOdd (unsigned &ValNo, MVT &ValVT, MVT &LocVT, CCValAssign::LocInfo &LocInfo, ISD::ArgFlagsTy &ArgFlags, CCState &State) |
static SDValue | CreateCopyOfByValArgument (SDValue Src, SDValue Dst, SDValue Chain, ISD::ArgFlagsTy Flags, SelectionDAG &DAG, const SDLoc &dl) |
CreateCopyOfByValArgument - Make a copy of an aggregate at address specified by "Src" to address "Dst" of size "Size". More... | |
static Constant * | convert_i1_to_i8 (const Constant *ConstVal) |
static bool | isBrevLdIntrinsic (const Value *Inst) |
static Value * | getBrevLdObject (Value *V) |
static Value * | returnEdge (const PHINode *PN, Value *IntrBaseVal) |
static Value * | getUnderLyingObjectForBrevLdIntr (Value *V) |
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")) |
static cl::opt< bool > | AlignLoads ("hexagon-align-loads", cl::Hidden, cl::init(false), cl::desc("Rewrite unaligned loads as a pair of aligned loads")) |
#define DEBUG_TYPE "hexagon-lowering" |
Definition at line 66 of file HexagonISelLowering.cpp.
|
static |
Definition at line 132 of file HexagonISelLowering.cpp.
References llvm::CCState::AllocateReg(), llvm::array_lengthof(), llvm::CCState::getFirstUnallocated(), R2, and R4.
Definition at line 887 of file HexagonISelLowering.cpp.
References assert(), llvm::dyn_cast(), llvm::ConstantVector::get(), llvm::Value::getContext(), llvm::IRBuilderBase::getInt8(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::isPowerOf2_32(), and llvm::SmallVectorTemplateBase< T >::push_back().
Referenced by llvm::HexagonTargetLowering::LowerConstantPool().
|
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 166 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 1697 of file HexagonISelLowering.cpp.
References llvm::Operator::getOpcode(), and isBrevLdIntrinsic().
Referenced by getUnderLyingObjectForBrevLdIntr(), and returnEdge().
Definition at line 1739 of file HexagonISelLowering.cpp.
References getBrevLdObject(), and returnEdge().
Referenced by llvm::HexagonTargetLowering::getTgtMemIntrinsic().
Definition at line 1684 of file HexagonISelLowering.cpp.
References getIntrinsicID(), llvm::Intrinsic::hexagon_L2_loadrb_pbr, llvm::Intrinsic::hexagon_L2_loadrd_pbr, llvm::Intrinsic::hexagon_L2_loadrh_pbr, llvm::Intrinsic::hexagon_L2_loadri_pbr, llvm::Intrinsic::hexagon_L2_loadrub_pbr, and llvm::Intrinsic::hexagon_L2_loadruh_pbr.
Referenced by getBrevLdObject().
Definition at line 1709 of file HexagonISelLowering.cpp.
References assert(), getBrevLdObject(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), llvm::PHINode::getNumIncomingValues(), and llvm::Instruction::getParent().
Referenced by getUnderLyingObjectForBrevLdIntr().
|
static |
Referenced by llvm::HexagonTargetLowering::LowerUnalignedLoad().
|
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().