@@ -5243,12 +5243,13 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
5243
5243
/// CalculateTailCallArgDest - Remember Argument for later processing. Calculate
5244
5244
/// the position of the argument.
5245
5245
static void CalculateTailCallArgDest(
5246
- SelectionDAG &DAG, MachineFunction &MF, EVT VT , SDValue Arg, int SPDiff ,
5247
- unsigned ArgOffset,
5246
+ SelectionDAG &DAG, MachineFunction &MF, bool IsPPC64 , SDValue Arg,
5247
+ int SPDiff, unsigned ArgOffset,
5248
5248
SmallVectorImpl<TailCallArgumentInfo> &TailCallArguments) {
5249
5249
int Offset = ArgOffset + SPDiff;
5250
5250
uint32_t OpSize = (Arg.getValueSizeInBits() + 7) / 8;
5251
5251
int FI = MF.getFrameInfo().CreateFixedObject(OpSize, Offset, true);
5252
+ EVT VT = IsPPC64 ? MVT::i64 : MVT::i32;
5252
5253
SDValue FIN = DAG.getFrameIndex(FI, VT);
5253
5254
TailCallArgumentInfo Info;
5254
5255
Info.Arg = Arg;
@@ -5310,8 +5311,8 @@ static void LowerMemOpCallTo(
5310
5311
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
5311
5312
// Calculate and remember argument location.
5312
5313
} else
5313
- CalculateTailCallArgDest(DAG, MF, Subtarget.getScalarIntVT() , Arg, SPDiff,
5314
- ArgOffset, TailCallArguments);
5314
+ CalculateTailCallArgDest(DAG, MF, isPPC64 , Arg, SPDiff, ArgOffset ,
5315
+ TailCallArguments);
5315
5316
}
5316
5317
5317
5318
static void
@@ -6174,7 +6175,7 @@ SDValue PPCTargetLowering::LowerCall_32SVR4(
6174
6175
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
6175
6176
} else {
6176
6177
// Calculate and remember argument location.
6177
- CalculateTailCallArgDest(DAG, MF, MVT::i32 , Arg, SPDiff, LocMemOffset,
6178
+ CalculateTailCallArgDest(DAG, MF, false , Arg, SPDiff, LocMemOffset,
6178
6179
TailCallArguments);
6179
6180
}
6180
6181
}
0 commit comments