LLVM 20.0.0git
|
#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/RuntimeLibcallUtil.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/DiagnosticInfo.h"
#include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsHexagon.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". | |
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::desc("Enable Hexagon SDNode scheduling")) |
static cl::opt< bool > | EnableFastMath ("ffast-math", cl::Hidden, cl::desc("Enable Fast Math processing")) |
static cl::opt< int > | MinimumJumpTables ("minimum-jump-tables", cl::Hidden, cl::init(5), cl::desc("Set minimum jump tables")) |
static cl::opt< int > | MaxStoresPerMemcpyCL ("max-store-memcpy", cl::Hidden, cl::init(6), cl::desc("Max #stores to inline memcpy")) |
static cl::opt< int > | MaxStoresPerMemcpyOptSizeCL ("max-store-memcpy-Os", cl::Hidden, cl::init(4), cl::desc("Max #stores to inline memcpy")) |
static cl::opt< int > | MaxStoresPerMemmoveCL ("max-store-memmove", cl::Hidden, cl::init(6), cl::desc("Max #stores to inline memmove")) |
static cl::opt< int > | MaxStoresPerMemmoveOptSizeCL ("max-store-memmove-Os", cl::Hidden, cl::init(4), cl::desc("Max #stores to inline memmove")) |
static cl::opt< int > | MaxStoresPerMemsetCL ("max-store-memset", cl::Hidden, cl::init(8), cl::desc("Max #stores to inline memset")) |
static cl::opt< int > | MaxStoresPerMemsetOptSizeCL ("max-store-memset-Os", cl::Hidden, 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")) |
static cl::opt< bool > | DisableArgsMinAlignment ("hexagon-disable-args-min-alignment", cl::Hidden, cl::init(false), cl::desc("Disable minimum alignment of 1 for " "arguments passed by value on stack")) |
#define DEBUG_TYPE "hexagon-lowering" |
Definition at line 69 of file HexagonISelLowering.cpp.
|
static |
Definition at line 140 of file HexagonISelLowering.cpp.
References llvm::CCState::AllocateReg(), and llvm::CCState::getFirstUnallocated().
|
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 174 of file HexagonISelLowering.cpp.
References llvm::SelectionDAG::getConstant(), and llvm::SelectionDAG::getMemcpy().
Referenced by llvm::HexagonTargetLowering::LowerCall().
Definition at line 2032 of file HexagonISelLowering.cpp.
References llvm::Operator::getOpcode(), and isBrevLdIntrinsic().
Referenced by getUnderLyingObjectForBrevLdIntr(), and returnEdge().
Definition at line 2074 of file HexagonISelLowering.cpp.
References getBrevLdObject(), and returnEdge().
Referenced by llvm::HexagonTargetLowering::getTgtMemIntrinsic().
Definition at line 2019 of file HexagonISelLowering.cpp.
Referenced by getBrevLdObject().
Definition at line 2044 of file HexagonISelLowering.cpp.
References assert(), getBrevLdObject(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), llvm::PHINode::getNumIncomingValues(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), and Idx.
Referenced by getUnderLyingObjectForBrevLdIntr().
|
static |
Referenced by llvm::HexagonTargetLowering::LowerUnalignedLoad().
|
static |
|
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().