@@ -183,6 +183,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
183
183
// arguments are at least 4/8 bytes aligned.
184
184
bool isPPC64 = Subtarget.isPPC64();
185
185
setMinStackArgumentAlignment(isPPC64 ? Align(8) : Align(4));
186
+ const MVT RegVT = Subtarget.getScalarIntVT();
186
187
187
188
// Set up the register classes.
188
189
addRegisterClass(MVT::i32, &PPC::GPRCRegClass);
@@ -198,7 +199,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
198
199
}
199
200
}
200
201
201
- setOperationAction(ISD::UADDO, isPPC64 ? MVT::i64 : MVT::i32 , Custom);
202
+ setOperationAction(ISD::UADDO, RegVT , Custom);
202
203
203
204
// Match BITREVERSE to customized fast code sequence in the td file.
204
205
setOperationAction(ISD::BITREVERSE, MVT::i32, Legal);
@@ -268,32 +269,24 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
268
269
269
270
if (isPPC64 || Subtarget.hasFPCVT()) {
270
271
setOperationAction(ISD::STRICT_SINT_TO_FP, MVT::i1, Promote);
271
- AddPromotedToType(ISD::STRICT_SINT_TO_FP, MVT::i1,
272
- isPPC64 ? MVT::i64 : MVT::i32);
272
+ AddPromotedToType(ISD::STRICT_SINT_TO_FP, MVT::i1, RegVT);
273
273
setOperationAction(ISD::STRICT_UINT_TO_FP, MVT::i1, Promote);
274
- AddPromotedToType(ISD::STRICT_UINT_TO_FP, MVT::i1,
275
- isPPC64 ? MVT::i64 : MVT::i32);
274
+ AddPromotedToType(ISD::STRICT_UINT_TO_FP, MVT::i1, RegVT);
276
275
277
276
setOperationAction(ISD::SINT_TO_FP, MVT::i1, Promote);
278
- AddPromotedToType (ISD::SINT_TO_FP, MVT::i1,
279
- isPPC64 ? MVT::i64 : MVT::i32);
277
+ AddPromotedToType(ISD::SINT_TO_FP, MVT::i1, RegVT);
280
278
setOperationAction(ISD::UINT_TO_FP, MVT::i1, Promote);
281
- AddPromotedToType(ISD::UINT_TO_FP, MVT::i1,
282
- isPPC64 ? MVT::i64 : MVT::i32);
279
+ AddPromotedToType(ISD::UINT_TO_FP, MVT::i1, RegVT);
283
280
284
281
setOperationAction(ISD::STRICT_FP_TO_SINT, MVT::i1, Promote);
285
- AddPromotedToType(ISD::STRICT_FP_TO_SINT, MVT::i1,
286
- isPPC64 ? MVT::i64 : MVT::i32);
282
+ AddPromotedToType(ISD::STRICT_FP_TO_SINT, MVT::i1, RegVT);
287
283
setOperationAction(ISD::STRICT_FP_TO_UINT, MVT::i1, Promote);
288
- AddPromotedToType(ISD::STRICT_FP_TO_UINT, MVT::i1,
289
- isPPC64 ? MVT::i64 : MVT::i32);
284
+ AddPromotedToType(ISD::STRICT_FP_TO_UINT, MVT::i1, RegVT);
290
285
291
286
setOperationAction(ISD::FP_TO_SINT, MVT::i1, Promote);
292
- AddPromotedToType(ISD::FP_TO_SINT, MVT::i1,
293
- isPPC64 ? MVT::i64 : MVT::i32);
287
+ AddPromotedToType(ISD::FP_TO_SINT, MVT::i1, RegVT);
294
288
setOperationAction(ISD::FP_TO_UINT, MVT::i1, Promote);
295
- AddPromotedToType(ISD::FP_TO_UINT, MVT::i1,
296
- isPPC64 ? MVT::i64 : MVT::i32);
289
+ AddPromotedToType(ISD::FP_TO_UINT, MVT::i1, RegVT);
297
290
} else {
298
291
setOperationAction(ISD::STRICT_SINT_TO_FP, MVT::i1, Custom);
299
292
setOperationAction(ISD::STRICT_UINT_TO_FP, MVT::i1, Custom);
@@ -482,9 +475,8 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
482
475
setOperationAction(ISD::BSWAP, MVT::i64, Legal);
483
476
} else {
484
477
setOperationAction(ISD::BSWAP, MVT::i32, Expand);
485
- setOperationAction(
486
- ISD::BSWAP, MVT::i64,
487
- (Subtarget.hasP9Vector() && Subtarget.isPPC64()) ? Custom : Expand);
478
+ setOperationAction(ISD::BSWAP, MVT::i64,
479
+ (Subtarget.hasP9Vector() && isPPC64) ? Custom : Expand);
488
480
}
489
481
490
482
// CTPOP or CTTZ were introduced in P8/P9 respectively
@@ -709,7 +701,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
709
701
setOperationAction(ISD::STRICT_FP_TO_UINT, MVT::i32, Custom);
710
702
setOperationAction(ISD::FP_TO_UINT, MVT::i32, Custom);
711
703
712
- if (Subtarget.hasLFIWAX() || Subtarget. isPPC64() ) {
704
+ if (Subtarget.hasLFIWAX() || isPPC64) {
713
705
setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom);
714
706
setOperationAction(ISD::STRICT_SINT_TO_FP, MVT::i32, Custom);
715
707
}
@@ -3191,12 +3183,11 @@ static void setUsesTOCBasePtr(SelectionDAG &DAG) {
3191
3183
3192
3184
SDValue PPCTargetLowering::getTOCEntry(SelectionDAG &DAG, const SDLoc &dl,
3193
3185
SDValue GA) const {
3194
- const bool Is64Bit = Subtarget.isPPC64();
3195
- EVT VT = Is64Bit ? MVT::i64 : MVT::i32;
3196
- SDValue Reg = Is64Bit ? DAG.getRegister(PPC::X2, VT)
3197
- : Subtarget.isAIXABI()
3198
- ? DAG.getRegister(PPC::R2, VT)
3199
- : DAG.getNode(PPCISD::GlobalBaseReg, dl, VT);
3186
+ EVT VT = Subtarget.getScalarIntVT();
3187
+ SDValue Reg = Subtarget.isPPC64() ? DAG.getRegister(PPC::X2, VT)
3188
+ : Subtarget.isAIXABI()
3189
+ ? DAG.getRegister(PPC::R2, VT)
3190
+ : DAG.getNode(PPCISD::GlobalBaseReg, dl, VT);
3200
3191
SDValue Ops[] = { GA, Reg };
3201
3192
return DAG.getMemIntrinsicNode(
3202
3193
PPCISD::TOC_ENTRY, dl, DAG.getVTList(VT, MVT::Other), Ops, VT,
@@ -4008,8 +3999,8 @@ SDValue PPCTargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
4008
3999
Entry.Node = Trmp; Args.push_back(Entry);
4009
4000
4010
4001
// TrampSize == (isPPC64 ? 48 : 40);
4011
- Entry.Node = DAG.getConstant(isPPC64 ? 48 : 40, dl,
4012
- isPPC64 ? MVT::i64 : MVT::i32 );
4002
+ Entry.Node =
4003
+ DAG.getConstant( isPPC64 ? 48 : 40, dl, Subtarget.getScalarIntVT() );
4013
4004
Args.push_back(Entry);
4014
4005
4015
4006
Entry.Node = FPtr; Args.push_back(Entry);
@@ -5237,13 +5228,12 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
5237
5228
MachineFunction &MF = DAG.getMachineFunction();
5238
5229
const PPCSubtarget &Subtarget = MF.getSubtarget<PPCSubtarget>();
5239
5230
const PPCFrameLowering *FL = Subtarget.getFrameLowering();
5240
- bool isPPC64 = Subtarget.isPPC64();
5241
- int SlotSize = isPPC64 ? 8 : 4;
5231
+ int SlotSize = Subtarget.isPPC64() ? 8 : 4;
5242
5232
int NewRetAddrLoc = SPDiff + FL->getReturnSaveOffset();
5243
5233
int NewRetAddr = MF.getFrameInfo().CreateFixedObject(SlotSize,
5244
5234
NewRetAddrLoc, true);
5245
- EVT VT = isPPC64 ? MVT::i64 : MVT::i32;
5246
- SDValue NewRetAddrFrIdx = DAG.getFrameIndex(NewRetAddr, VT );
5235
+ SDValue NewRetAddrFrIdx =
5236
+ DAG.getFrameIndex(NewRetAddr, Subtarget.getScalarIntVT() );
5247
5237
Chain = DAG.getStore(Chain, dl, OldRetAddr, NewRetAddrFrIdx,
5248
5238
MachinePointerInfo::getFixedStack(MF, NewRetAddr));
5249
5239
}
@@ -5252,14 +5242,14 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
5252
5242
5253
5243
/// CalculateTailCallArgDest - Remember Argument for later processing. Calculate
5254
5244
/// the position of the argument.
5255
- static void
5256
- CalculateTailCallArgDest( SelectionDAG &DAG, MachineFunction &MF, bool isPPC64 ,
5257
- SDValue Arg, int SPDiff, unsigned ArgOffset,
5258
- SmallVectorImpl<TailCallArgumentInfo>& TailCallArguments) {
5245
+ static void CalculateTailCallArgDest(
5246
+ SelectionDAG &DAG, MachineFunction &MF, bool IsPPC64, SDValue Arg ,
5247
+ int SPDiff, unsigned ArgOffset,
5248
+ SmallVectorImpl<TailCallArgumentInfo> & TailCallArguments) {
5259
5249
int Offset = ArgOffset + SPDiff;
5260
5250
uint32_t OpSize = (Arg.getValueSizeInBits() + 7) / 8;
5261
5251
int FI = MF.getFrameInfo().CreateFixedObject(OpSize, Offset, true);
5262
- EVT VT = isPPC64 ? MVT::i64 : MVT::i32;
5252
+ EVT VT = IsPPC64 ? MVT::i64 : MVT::i32;
5263
5253
SDValue FIN = DAG.getFrameIndex(FI, VT);
5264
5254
TailCallArgumentInfo Info;
5265
5255
Info.Arg = Arg;
@@ -5276,9 +5266,9 @@ SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(
5276
5266
SDValue &FPOpOut, const SDLoc &dl) const {
5277
5267
if (SPDiff) {
5278
5268
// Load the LR and FP stack slot for later adjusting.
5279
- EVT VT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32;
5280
5269
LROpOut = getReturnAddrFrameIndex(DAG);
5281
- LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo());
5270
+ LROpOut = DAG.getLoad(Subtarget.getScalarIntVT(), dl, Chain, LROpOut,
5271
+ MachinePointerInfo());
5282
5272
Chain = SDValue(LROpOut.getNode(), 1);
5283
5273
}
5284
5274
return Chain;
@@ -5320,8 +5310,9 @@ static void LowerMemOpCallTo(
5320
5310
MemOpChains.push_back(
5321
5311
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
5322
5312
// Calculate and remember argument location.
5323
- } else CalculateTailCallArgDest(DAG, MF, isPPC64, Arg, SPDiff, ArgOffset,
5324
- TailCallArguments);
5313
+ } else
5314
+ CalculateTailCallArgDest(DAG, MF, isPPC64, Arg, SPDiff, ArgOffset,
5315
+ TailCallArguments);
5325
5316
}
5326
5317
5327
5318
static void
@@ -5672,7 +5663,7 @@ static void prepareDescriptorIndirectCall(SelectionDAG &DAG, SDValue &Callee,
5672
5663
const unsigned TOCAnchorOffset = Subtarget.descriptorTOCAnchorOffset();
5673
5664
const unsigned EnvPtrOffset = Subtarget.descriptorEnvironmentPointerOffset();
5674
5665
5675
- const MVT RegVT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32 ;
5666
+ const MVT RegVT = Subtarget.getScalarIntVT() ;
5676
5667
const Align Alignment = Subtarget.isPPC64() ? Align(8) : Align(4);
5677
5668
5678
5669
// One load for the functions entry point address.
@@ -5724,7 +5715,7 @@ buildCallOperands(SmallVectorImpl<SDValue> &Ops,
5724
5715
const PPCSubtarget &Subtarget) {
5725
5716
const bool IsPPC64 = Subtarget.isPPC64();
5726
5717
// MVT for a general purpose register.
5727
- const MVT RegVT = IsPPC64 ? MVT::i64 : MVT::i32 ;
5718
+ const MVT RegVT = Subtarget.getScalarIntVT() ;
5728
5719
5729
5720
// First operand is always the chain.
5730
5721
Ops.push_back(Chain);
@@ -6867,7 +6858,7 @@ static bool CC_AIX(unsigned ValNo, MVT ValVT, MVT LocVT,
6867
6858
const unsigned PtrSize = IsPPC64 ? 8 : 4;
6868
6859
const Align PtrAlign(PtrSize);
6869
6860
const Align StackAlign(16);
6870
- const MVT RegVT = IsPPC64 ? MVT::i64 : MVT::i32 ;
6861
+ const MVT RegVT = Subtarget.getScalarIntVT() ;
6871
6862
6872
6863
if (ValVT == MVT::f128)
6873
6864
report_fatal_error("f128 is unimplemented on AIX.");
@@ -7818,7 +7809,7 @@ SDValue PPCTargetLowering::LowerCall_AIX(
7818
7809
assert(!CFlags.IsTailCall && "Indirect tail-calls not supported.");
7819
7810
const MCRegister TOCBaseReg = Subtarget.getTOCPointerRegister();
7820
7811
const MCRegister StackPtrReg = Subtarget.getStackPointerRegister();
7821
- const MVT PtrVT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32 ;
7812
+ const MVT PtrVT = Subtarget.getScalarIntVT() ;
7822
7813
const unsigned TOCSaveOffset =
7823
7814
Subtarget.getFrameLowering()->getTOCSaveOffset();
7824
7815
@@ -8383,7 +8374,7 @@ static SDValue convertFPToInt(SDValue Op, SelectionDAG &DAG,
8383
8374
Src = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Src);
8384
8375
}
8385
8376
if ((DestTy == MVT::i8 || DestTy == MVT::i16) && Subtarget.hasP9Vector())
8386
- DestTy = Subtarget.isPPC64() ? MVT::i64 : MVT::i32 ;
8377
+ DestTy = Subtarget.getScalarIntVT() ;
8387
8378
unsigned Opc = ISD::DELETED_NODE;
8388
8379
switch (DestTy.SimpleTy) {
8389
8380
default: llvm_unreachable("Unhandled FP_TO_INT type in custom expander!");
@@ -11319,11 +11310,11 @@ SDValue PPCTargetLowering::LowerINTRINSIC_VOID(SDValue Op,
11319
11310
Val = DAG.getNode(ISD::TRUNCATE, DL, MVT::i64, Val);
11320
11311
}
11321
11312
unsigned Opcode = Subtarget.isPPC64() ? PPC::CFENCE8 : PPC::CFENCE;
11322
- EVT FTy = Subtarget.isPPC64() ? MVT::i64 : MVT::i32;
11323
11313
return SDValue(
11324
- DAG.getMachineNode(Opcode, DL, MVT::Other,
11325
- DAG.getNode(ISD::ANY_EXTEND, DL, FTy, Val),
11326
- Op.getOperand(0)),
11314
+ DAG.getMachineNode(
11315
+ Opcode, DL, MVT::Other,
11316
+ DAG.getNode(ISD::ANY_EXTEND, DL, Subtarget.getScalarIntVT(), Val),
11317
+ Op.getOperand(0)),
11327
11318
0);
11328
11319
}
11329
11320
default:
@@ -17361,7 +17352,6 @@ SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
17361
17352
// the stack.
17362
17353
PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
17363
17354
FuncInfo->setLRStoreRequired();
17364
- bool isPPC64 = Subtarget.isPPC64();
17365
17355
auto PtrVT = getPointerTy(MF.getDataLayout());
17366
17356
17367
17357
if (Depth > 0) {
@@ -17373,7 +17363,7 @@ SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
17373
17363
LowerFRAMEADDR(Op, DAG), MachinePointerInfo());
17374
17364
SDValue Offset =
17375
17365
DAG.getConstant(Subtarget.getFrameLowering()->getReturnSaveOffset(), dl,
17376
- isPPC64 ? MVT::i64 : MVT::i32 );
17366
+ Subtarget.getScalarIntVT() );
17377
17367
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
17378
17368
DAG.getNode(ISD::ADD, dl, PtrVT, FrameAddr, Offset),
17379
17369
MachinePointerInfo());
0 commit comments