mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 00:17:01 +00:00
Reapply r235977 "[DebugInfo] Add debug locations to constant SD nodes"
[DebugInfo] Add debug locations to constant SD nodes This adds debug location to constant nodes of Selection DAG and updates all places that create constants to pass debug locations (see PR13269). Can't guarantee that all locations are correct, but in a lot of cases choice is obvious, so most of them should be. At least all tests pass. Tests for these changes do not cover everything, instead just check it for SDNodes, ARM and AArch64 where it's easy to get incorrect locations on constants. This is not complete fix as FastISel contains workaround for wrong debug locations, which drops locations from instructions on processing constants, but there isn't currently a way to use debug locations from constants there as llvm::Constant doesn't cache it (yet). Although this is a bit different issue, not directly related to these changes. Differential Revision: http://reviews.llvm.org/D9084 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235989 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -800,7 +800,7 @@ static SDValue genConstMult(SDValue X, uint64_t C, SDLoc DL, EVT VT,
|
||||
|
||||
// Return 0.
|
||||
if (C == 0)
|
||||
return DAG.getConstant(0, VT);
|
||||
return DAG.getConstant(0, DL, VT);
|
||||
|
||||
// Return x.
|
||||
if (C == 1)
|
||||
@@ -809,7 +809,7 @@ static SDValue genConstMult(SDValue X, uint64_t C, SDLoc DL, EVT VT,
|
||||
// If c is power of 2, return (shl x, log2(c)).
|
||||
if (isPowerOf2_64(C))
|
||||
return DAG.getNode(ISD::SHL, DL, VT, X,
|
||||
DAG.getConstant(Log2_64(C), ShiftTy));
|
||||
DAG.getConstant(Log2_64(C), DL, ShiftTy));
|
||||
|
||||
unsigned Log2Ceil = Log2_64_Ceil(C);
|
||||
uint64_t Floor = 1LL << Log2_64(C);
|
||||
@@ -864,8 +864,9 @@ static SDValue performDSPShiftCombine(unsigned Opc, SDNode *N, EVT Ty,
|
||||
(SplatValue.getZExtValue() >= EltSize))
|
||||
return SDValue();
|
||||
|
||||
return DAG.getNode(Opc, SDLoc(N), Ty, N->getOperand(0),
|
||||
DAG.getConstant(SplatValue.getZExtValue(), MVT::i32));
|
||||
SDLoc DL(N);
|
||||
return DAG.getNode(Opc, DL, Ty, N->getOperand(0),
|
||||
DAG.getConstant(SplatValue.getZExtValue(), DL, MVT::i32));
|
||||
}
|
||||
|
||||
static SDValue performSHLCombine(SDNode *N, SelectionDAG &DAG,
|
||||
@@ -1212,7 +1213,7 @@ SDValue MipsSETargetLowering::lowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
||||
Nd.getAlignment());
|
||||
|
||||
// i32 load from higher address.
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Ptr, DAG.getConstant(4, PtrVT));
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Ptr, DAG.getConstant(4, DL, PtrVT));
|
||||
SDValue Hi = DAG.getLoad(MVT::i32, DL, Lo.getValue(1), Ptr,
|
||||
MachinePointerInfo(), Nd.isVolatile(),
|
||||
Nd.isNonTemporal(), Nd.isInvariant(),
|
||||
@@ -1237,9 +1238,9 @@ SDValue MipsSETargetLowering::lowerSTORE(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue Val = Nd.getValue(), Ptr = Nd.getBasePtr(), Chain = Nd.getChain();
|
||||
EVT PtrVT = Ptr.getValueType();
|
||||
SDValue Lo = DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32,
|
||||
Val, DAG.getConstant(0, MVT::i32));
|
||||
Val, DAG.getConstant(0, DL, MVT::i32));
|
||||
SDValue Hi = DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32,
|
||||
Val, DAG.getConstant(1, MVT::i32));
|
||||
Val, DAG.getConstant(1, DL, MVT::i32));
|
||||
|
||||
if (!Subtarget.isLittle())
|
||||
std::swap(Lo, Hi);
|
||||
@@ -1250,7 +1251,7 @@ SDValue MipsSETargetLowering::lowerSTORE(SDValue Op, SelectionDAG &DAG) const {
|
||||
Nd.getAAInfo());
|
||||
|
||||
// i32 store to higher address.
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Ptr, DAG.getConstant(4, PtrVT));
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Ptr, DAG.getConstant(4, DL, PtrVT));
|
||||
return DAG.getStore(Chain, DL, Hi, Ptr, MachinePointerInfo(),
|
||||
Nd.isVolatile(), Nd.isNonTemporal(),
|
||||
std::min(Nd.getAlignment(), 4U), Nd.getAAInfo());
|
||||
@@ -1283,9 +1284,9 @@ SDValue MipsSETargetLowering::lowerMulDiv(SDValue Op, unsigned NewOpc,
|
||||
|
||||
static SDValue initAccumulator(SDValue In, SDLoc DL, SelectionDAG &DAG) {
|
||||
SDValue InLo = DAG.getNode(ISD::EXTRACT_ELEMENT, DL, MVT::i32, In,
|
||||
DAG.getConstant(0, MVT::i32));
|
||||
DAG.getConstant(0, DL, MVT::i32));
|
||||
SDValue InHi = DAG.getNode(ISD::EXTRACT_ELEMENT, DL, MVT::i32, In,
|
||||
DAG.getConstant(1, MVT::i32));
|
||||
DAG.getConstant(1, DL, MVT::i32));
|
||||
return DAG.getNode(MipsISD::MTLOHI, DL, MVT::Untyped, InLo, InHi);
|
||||
}
|
||||
|
||||
@@ -1381,7 +1382,7 @@ static SDValue lowerMSASplatZExt(SDValue Op, unsigned OpNr, SelectionDAG &DAG) {
|
||||
SDValue LaneB = Op->getOperand(2);
|
||||
|
||||
if (ResVecTy == MVT::v2i64) {
|
||||
LaneA = DAG.getConstant(0, MVT::i32);
|
||||
LaneA = DAG.getConstant(0, DL, MVT::i32);
|
||||
ViaVecTy = MVT::v4i32;
|
||||
} else
|
||||
LaneA = LaneB;
|
||||
@@ -1399,7 +1400,8 @@ static SDValue lowerMSASplatZExt(SDValue Op, unsigned OpNr, SelectionDAG &DAG) {
|
||||
}
|
||||
|
||||
static SDValue lowerMSASplatImm(SDValue Op, unsigned ImmOp, SelectionDAG &DAG) {
|
||||
return DAG.getConstant(Op->getConstantOperandVal(ImmOp), Op->getValueType(0));
|
||||
return DAG.getConstant(Op->getConstantOperandVal(ImmOp), SDLoc(Op),
|
||||
Op->getValueType(0));
|
||||
}
|
||||
|
||||
static SDValue getBuildVectorSplat(EVT VecTy, SDValue SplatValue,
|
||||
@@ -1415,7 +1417,7 @@ static SDValue getBuildVectorSplat(EVT VecTy, SDValue SplatValue,
|
||||
|
||||
SplatValueA = DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, SplatValue);
|
||||
SplatValueB = DAG.getNode(ISD::SRL, DL, MVT::i64, SplatValue,
|
||||
DAG.getConstant(32, MVT::i32));
|
||||
DAG.getConstant(32, DL, MVT::i32));
|
||||
SplatValueB = DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, SplatValueB);
|
||||
}
|
||||
|
||||
@@ -1451,8 +1453,9 @@ static SDValue lowerMSABinaryBitImmIntr(SDValue Op, SelectionDAG &DAG,
|
||||
if (ConstantSDNode *CImm = dyn_cast<ConstantSDNode>(Imm)) {
|
||||
APInt BitImm = APInt(64, 1) << CImm->getAPIntValue();
|
||||
|
||||
SDValue BitImmHiOp = DAG.getConstant(BitImm.lshr(32).trunc(32), MVT::i32);
|
||||
SDValue BitImmLoOp = DAG.getConstant(BitImm.trunc(32), MVT::i32);
|
||||
SDValue BitImmHiOp = DAG.getConstant(BitImm.lshr(32).trunc(32), DL,
|
||||
MVT::i32);
|
||||
SDValue BitImmLoOp = DAG.getConstant(BitImm.trunc(32), DL, MVT::i32);
|
||||
|
||||
if (BigEndian)
|
||||
std::swap(BitImmLoOp, BitImmHiOp);
|
||||
@@ -1474,8 +1477,8 @@ static SDValue lowerMSABinaryBitImmIntr(SDValue Op, SelectionDAG &DAG,
|
||||
|
||||
Exp2Imm = getBuildVectorSplat(VecTy, Imm, BigEndian, DAG);
|
||||
|
||||
Exp2Imm =
|
||||
DAG.getNode(ISD::SHL, DL, VecTy, DAG.getConstant(1, VecTy), Exp2Imm);
|
||||
Exp2Imm = DAG.getNode(ISD::SHL, DL, VecTy, DAG.getConstant(1, DL, VecTy),
|
||||
Exp2Imm);
|
||||
}
|
||||
|
||||
return DAG.getNode(Opc, DL, VecTy, Op->getOperand(1), Exp2Imm);
|
||||
@@ -1484,7 +1487,7 @@ static SDValue lowerMSABinaryBitImmIntr(SDValue Op, SelectionDAG &DAG,
|
||||
static SDValue lowerMSABitClear(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT ResTy = Op->getValueType(0);
|
||||
SDLoc DL(Op);
|
||||
SDValue One = DAG.getConstant(1, ResTy);
|
||||
SDValue One = DAG.getConstant(1, DL, ResTy);
|
||||
SDValue Bit = DAG.getNode(ISD::SHL, DL, ResTy, One, Op->getOperand(2));
|
||||
|
||||
return DAG.getNode(ISD::AND, DL, ResTy, Op->getOperand(1),
|
||||
@@ -1496,7 +1499,7 @@ static SDValue lowerMSABitClearImm(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT ResTy = Op->getValueType(0);
|
||||
APInt BitImm = APInt(ResTy.getVectorElementType().getSizeInBits(), 1)
|
||||
<< cast<ConstantSDNode>(Op->getOperand(2))->getAPIntValue();
|
||||
SDValue BitMask = DAG.getConstant(~BitImm, ResTy);
|
||||
SDValue BitMask = DAG.getConstant(~BitImm, DL, ResTy);
|
||||
|
||||
return DAG.getNode(ISD::AND, DL, ResTy, Op->getOperand(1), BitMask);
|
||||
}
|
||||
@@ -1578,8 +1581,8 @@ SDValue MipsSETargetLowering::lowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
APInt Mask = APInt::getHighBitsSet(EltTy.getSizeInBits(),
|
||||
Op->getConstantOperandVal(3));
|
||||
return DAG.getNode(ISD::VSELECT, DL, VecTy,
|
||||
DAG.getConstant(Mask, VecTy, true), Op->getOperand(2),
|
||||
Op->getOperand(1));
|
||||
DAG.getConstant(Mask, DL, VecTy, true),
|
||||
Op->getOperand(2), Op->getOperand(1));
|
||||
}
|
||||
case Intrinsic::mips_binsri_b:
|
||||
case Intrinsic::mips_binsri_h:
|
||||
@@ -1591,8 +1594,8 @@ SDValue MipsSETargetLowering::lowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
APInt Mask = APInt::getLowBitsSet(EltTy.getSizeInBits(),
|
||||
Op->getConstantOperandVal(3));
|
||||
return DAG.getNode(ISD::VSELECT, DL, VecTy,
|
||||
DAG.getConstant(Mask, VecTy, true), Op->getOperand(2),
|
||||
Op->getOperand(1));
|
||||
DAG.getConstant(Mask, DL, VecTy, true),
|
||||
Op->getOperand(2), Op->getOperand(1));
|
||||
}
|
||||
case Intrinsic::mips_bmnz_v:
|
||||
return DAG.getNode(ISD::VSELECT, DL, Op->getValueType(0), Op->getOperand(3),
|
||||
@@ -1613,7 +1616,7 @@ SDValue MipsSETargetLowering::lowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
case Intrinsic::mips_bneg_w:
|
||||
case Intrinsic::mips_bneg_d: {
|
||||
EVT VecTy = Op->getValueType(0);
|
||||
SDValue One = DAG.getConstant(1, VecTy);
|
||||
SDValue One = DAG.getConstant(1, DL, VecTy);
|
||||
|
||||
return DAG.getNode(ISD::XOR, DL, VecTy, Op->getOperand(1),
|
||||
DAG.getNode(ISD::SHL, DL, VecTy, One,
|
||||
@@ -1649,7 +1652,7 @@ SDValue MipsSETargetLowering::lowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
case Intrinsic::mips_bset_w:
|
||||
case Intrinsic::mips_bset_d: {
|
||||
EVT VecTy = Op->getValueType(0);
|
||||
SDValue One = DAG.getConstant(1, VecTy);
|
||||
SDValue One = DAG.getConstant(1, DL, VecTy);
|
||||
|
||||
return DAG.getNode(ISD::OR, DL, VecTy, Op->getOperand(1),
|
||||
DAG.getNode(ISD::SHL, DL, VecTy, One,
|
||||
@@ -1923,7 +1926,7 @@ SDValue MipsSETargetLowering::lowerINTRINSIC_WO_CHAIN(SDValue Op,
|
||||
case Intrinsic::mips_insve_d:
|
||||
return DAG.getNode(MipsISD::INSVE, DL, Op->getValueType(0),
|
||||
Op->getOperand(1), Op->getOperand(2), Op->getOperand(3),
|
||||
DAG.getConstant(0, MVT::i32));
|
||||
DAG.getConstant(0, DL, MVT::i32));
|
||||
case Intrinsic::mips_ldi_b:
|
||||
case Intrinsic::mips_ldi_h:
|
||||
case Intrinsic::mips_ldi_w:
|
||||
@@ -2363,7 +2366,7 @@ SDValue MipsSETargetLowering::lowerBUILD_VECTOR(SDValue Op,
|
||||
}
|
||||
|
||||
// SelectionDAG::getConstant will promote SplatValue appropriately.
|
||||
SDValue Result = DAG.getConstant(SplatValue, ViaVecTy);
|
||||
SDValue Result = DAG.getConstant(SplatValue, DL, ViaVecTy);
|
||||
|
||||
// Bitcast to the type we originally wanted
|
||||
if (ViaVecTy != ResTy)
|
||||
@@ -2385,7 +2388,7 @@ SDValue MipsSETargetLowering::lowerBUILD_VECTOR(SDValue Op,
|
||||
for (unsigned i = 0; i < NumElts; ++i) {
|
||||
Vector = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, ResTy, Vector,
|
||||
Node->getOperand(i),
|
||||
DAG.getConstant(i, MVT::i32));
|
||||
DAG.getConstant(i, DL, MVT::i32));
|
||||
}
|
||||
return Vector;
|
||||
}
|
||||
@@ -2455,8 +2458,9 @@ static SDValue lowerVECTOR_SHUFFLE_SHF(SDValue Op, EVT ResTy,
|
||||
Imm |= Idx & 0x3;
|
||||
}
|
||||
|
||||
return DAG.getNode(MipsISD::SHF, SDLoc(Op), ResTy,
|
||||
DAG.getConstant(Imm, MVT::i32), Op->getOperand(0));
|
||||
SDLoc DL(Op);
|
||||
return DAG.getNode(MipsISD::SHF, DL, ResTy,
|
||||
DAG.getConstant(Imm, DL, MVT::i32), Op->getOperand(0));
|
||||
}
|
||||
|
||||
// Lower VECTOR_SHUFFLE into ILVEV (if possible).
|
||||
@@ -2665,7 +2669,7 @@ static SDValue lowerVECTOR_SHUFFLE_VSHF(SDValue Op, EVT ResTy,
|
||||
|
||||
for (SmallVector<int, 16>::iterator I = Indices.begin(); I != Indices.end();
|
||||
++I)
|
||||
Ops.push_back(DAG.getTargetConstant(*I, MaskEltTy));
|
||||
Ops.push_back(DAG.getTargetConstant(*I, DL, MaskEltTy));
|
||||
|
||||
SDValue MaskVec = DAG.getNode(ISD::BUILD_VECTOR, DL, MaskVecTy, Ops);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user