mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-03 10:19:18 +00:00
X86: Deduplicate some lowering code. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284686 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8340aef947
commit
bae0043048
@ -13066,6 +13066,16 @@ static SDValue LowerINSERT_SUBVECTOR(SDValue Op, const X86Subtarget &Subtarget,
|
||||
llvm_unreachable("Unimplemented!");
|
||||
}
|
||||
|
||||
// Returns the appropriate wrapper opcode for a global reference.
|
||||
unsigned X86TargetLowering::getGlobalWrapperKind() const {
|
||||
CodeModel::Model M = getTargetMachine().getCodeModel();
|
||||
if (Subtarget.isPICStyleRIPRel() &&
|
||||
(M == CodeModel::Small || M == CodeModel::Kernel))
|
||||
return X86ISD::WrapperRIP;
|
||||
|
||||
return X86ISD::Wrapper;
|
||||
}
|
||||
|
||||
// ConstantPool, JumpTable, GlobalAddress, and ExternalSymbol are lowered as
|
||||
// their target countpart wrapped in the X86ISD::Wrapper node. Suppose N is
|
||||
// one of the above mentioned nodes. It has to be wrapped because otherwise
|
||||
@ -13079,18 +13089,12 @@ X86TargetLowering::LowerConstantPool(SDValue Op, SelectionDAG &DAG) const {
|
||||
// In PIC mode (unless we're in RIPRel PIC mode) we add an offset to the
|
||||
// global base reg.
|
||||
unsigned char OpFlag = Subtarget.classifyLocalReference(nullptr);
|
||||
unsigned WrapperKind = X86ISD::Wrapper;
|
||||
CodeModel::Model M = DAG.getTarget().getCodeModel();
|
||||
|
||||
if (Subtarget.isPICStyleRIPRel() &&
|
||||
(M == CodeModel::Small || M == CodeModel::Kernel))
|
||||
WrapperKind = X86ISD::WrapperRIP;
|
||||
|
||||
auto PtrVT = getPointerTy(DAG.getDataLayout());
|
||||
SDValue Result = DAG.getTargetConstantPool(
|
||||
CP->getConstVal(), PtrVT, CP->getAlignment(), CP->getOffset(), OpFlag);
|
||||
SDLoc DL(CP);
|
||||
Result = DAG.getNode(WrapperKind, DL, PtrVT, Result);
|
||||
Result = DAG.getNode(getGlobalWrapperKind(), DL, PtrVT, Result);
|
||||
// With PIC, the address is actually $g + Offset.
|
||||
if (OpFlag) {
|
||||
Result =
|
||||
@ -13107,17 +13111,11 @@ SDValue X86TargetLowering::LowerJumpTable(SDValue Op, SelectionDAG &DAG) const {
|
||||
// In PIC mode (unless we're in RIPRel PIC mode) we add an offset to the
|
||||
// global base reg.
|
||||
unsigned char OpFlag = Subtarget.classifyLocalReference(nullptr);
|
||||
unsigned WrapperKind = X86ISD::Wrapper;
|
||||
CodeModel::Model M = DAG.getTarget().getCodeModel();
|
||||
|
||||
if (Subtarget.isPICStyleRIPRel() &&
|
||||
(M == CodeModel::Small || M == CodeModel::Kernel))
|
||||
WrapperKind = X86ISD::WrapperRIP;
|
||||
|
||||
auto PtrVT = getPointerTy(DAG.getDataLayout());
|
||||
SDValue Result = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, OpFlag);
|
||||
SDLoc DL(JT);
|
||||
Result = DAG.getNode(WrapperKind, DL, PtrVT, Result);
|
||||
Result = DAG.getNode(getGlobalWrapperKind(), DL, PtrVT, Result);
|
||||
|
||||
// With PIC, the address is actually $g + Offset.
|
||||
if (OpFlag)
|
||||
@ -13136,18 +13134,12 @@ X86TargetLowering::LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const {
|
||||
// global base reg.
|
||||
const Module *Mod = DAG.getMachineFunction().getFunction()->getParent();
|
||||
unsigned char OpFlag = Subtarget.classifyGlobalReference(nullptr, *Mod);
|
||||
unsigned WrapperKind = X86ISD::Wrapper;
|
||||
CodeModel::Model M = DAG.getTarget().getCodeModel();
|
||||
|
||||
if (Subtarget.isPICStyleRIPRel() &&
|
||||
(M == CodeModel::Small || M == CodeModel::Kernel))
|
||||
WrapperKind = X86ISD::WrapperRIP;
|
||||
|
||||
auto PtrVT = getPointerTy(DAG.getDataLayout());
|
||||
SDValue Result = DAG.getTargetExternalSymbol(Sym, PtrVT, OpFlag);
|
||||
|
||||
SDLoc DL(Op);
|
||||
Result = DAG.getNode(WrapperKind, DL, PtrVT, Result);
|
||||
Result = DAG.getNode(getGlobalWrapperKind(), DL, PtrVT, Result);
|
||||
|
||||
// With PIC, the address is actually $g + Offset.
|
||||
if (isPositionIndependent() && !Subtarget.is64Bit()) {
|
||||
@ -13170,18 +13162,12 @@ X86TargetLowering::LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
// Create the TargetBlockAddressAddress node.
|
||||
unsigned char OpFlags =
|
||||
Subtarget.classifyBlockAddressReference();
|
||||
CodeModel::Model M = DAG.getTarget().getCodeModel();
|
||||
const BlockAddress *BA = cast<BlockAddressSDNode>(Op)->getBlockAddress();
|
||||
int64_t Offset = cast<BlockAddressSDNode>(Op)->getOffset();
|
||||
SDLoc dl(Op);
|
||||
auto PtrVT = getPointerTy(DAG.getDataLayout());
|
||||
SDValue Result = DAG.getTargetBlockAddress(BA, PtrVT, Offset, OpFlags);
|
||||
|
||||
if (Subtarget.isPICStyleRIPRel() &&
|
||||
(M == CodeModel::Small || M == CodeModel::Kernel))
|
||||
Result = DAG.getNode(X86ISD::WrapperRIP, dl, PtrVT, Result);
|
||||
else
|
||||
Result = DAG.getNode(X86ISD::Wrapper, dl, PtrVT, Result);
|
||||
Result = DAG.getNode(getGlobalWrapperKind(), dl, PtrVT, Result);
|
||||
|
||||
// With PIC, the address is actually $g + Offset.
|
||||
if (isGlobalRelativeToPICBase(OpFlags)) {
|
||||
@ -13210,11 +13196,7 @@ SDValue X86TargetLowering::LowerGlobalAddress(const GlobalValue *GV,
|
||||
Result = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, OpFlags);
|
||||
}
|
||||
|
||||
if (Subtarget.isPICStyleRIPRel() &&
|
||||
(M == CodeModel::Small || M == CodeModel::Kernel))
|
||||
Result = DAG.getNode(X86ISD::WrapperRIP, dl, PtrVT, Result);
|
||||
else
|
||||
Result = DAG.getNode(X86ISD::Wrapper, dl, PtrVT, Result);
|
||||
Result = DAG.getNode(getGlobalWrapperKind(), dl, PtrVT, Result);
|
||||
|
||||
// With PIC, the address is actually $g + Offset.
|
||||
if (isGlobalRelativeToPICBase(OpFlags)) {
|
||||
|
@ -1115,8 +1115,9 @@ namespace llvm {
|
||||
SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue ExtractBitFromMaskVector(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue InsertBitToMaskVector(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
||||
SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
||||
unsigned getGlobalWrapperKind() const;
|
||||
SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerGlobalAddress(const GlobalValue *GV, const SDLoc &dl,
|
||||
@ -1124,6 +1125,7 @@ namespace llvm {
|
||||
SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
||||
SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerUINT_TO_FP_i64(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
Loading…
Reference in New Issue
Block a user