@@ -183,6 +183,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
183183 // arguments are at least 4/8 bytes aligned.
184184 bool isPPC64 = Subtarget.isPPC64();
185185 setMinStackArgumentAlignment(isPPC64 ? Align(8) : Align(4));
186+ const MVT RegVT = Subtarget.getScalarIntVT();
186187
187188 // Set up the register classes.
188189 addRegisterClass(MVT::i32, &PPC::GPRCRegClass);
@@ -198,7 +199,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
198199 }
199200 }
200201
201- setOperationAction(ISD::UADDO, isPPC64 ? MVT::i64 : MVT::i32 , Custom);
202+ setOperationAction(ISD::UADDO, RegVT , Custom);
202203
203204 // Match BITREVERSE to customized fast code sequence in the td file.
204205 setOperationAction(ISD::BITREVERSE, MVT::i32, Legal);
@@ -268,32 +269,24 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
268269
269270 if (isPPC64 || Subtarget.hasFPCVT()) {
270271 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);
273273 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);
276275
277276 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);
280278 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);
283280
284281 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);
287283 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);
290285
291286 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);
294288 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);
297290 } else {
298291 setOperationAction(ISD::STRICT_SINT_TO_FP, MVT::i1, Custom);
299292 setOperationAction(ISD::STRICT_UINT_TO_FP, MVT::i1, Custom);
@@ -482,9 +475,8 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
482475 setOperationAction(ISD::BSWAP, MVT::i64, Legal);
483476 } else {
484477 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);
488480 }
489481
490482 // CTPOP or CTTZ were introduced in P8/P9 respectively
@@ -709,7 +701,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
709701 setOperationAction(ISD::STRICT_FP_TO_UINT, MVT::i32, Custom);
710702 setOperationAction(ISD::FP_TO_UINT, MVT::i32, Custom);
711703
712- if (Subtarget.hasLFIWAX() || Subtarget. isPPC64() ) {
704+ if (Subtarget.hasLFIWAX() || isPPC64) {
713705 setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom);
714706 setOperationAction(ISD::STRICT_SINT_TO_FP, MVT::i32, Custom);
715707 }
@@ -3191,12 +3183,11 @@ static void setUsesTOCBasePtr(SelectionDAG &DAG) {
31913183
31923184SDValue PPCTargetLowering::getTOCEntry(SelectionDAG &DAG, const SDLoc &dl,
31933185 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);
32003191 SDValue Ops[] = { GA, Reg };
32013192 return DAG.getMemIntrinsicNode(
32023193 PPCISD::TOC_ENTRY, dl, DAG.getVTList(VT, MVT::Other), Ops, VT,
@@ -4008,8 +3999,8 @@ SDValue PPCTargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
40083999 Entry.Node = Trmp; Args.push_back(Entry);
40094000
40104001 // 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() );
40134004 Args.push_back(Entry);
40144005
40154006 Entry.Node = FPtr; Args.push_back(Entry);
@@ -5237,13 +5228,12 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
52375228 MachineFunction &MF = DAG.getMachineFunction();
52385229 const PPCSubtarget &Subtarget = MF.getSubtarget<PPCSubtarget>();
52395230 const PPCFrameLowering *FL = Subtarget.getFrameLowering();
5240- bool isPPC64 = Subtarget.isPPC64();
5241- int SlotSize = isPPC64 ? 8 : 4;
5231+ int SlotSize = Subtarget.isPPC64() ? 8 : 4;
52425232 int NewRetAddrLoc = SPDiff + FL->getReturnSaveOffset();
52435233 int NewRetAddr = MF.getFrameInfo().CreateFixedObject(SlotSize,
52445234 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() );
52475237 Chain = DAG.getStore(Chain, dl, OldRetAddr, NewRetAddrFrIdx,
52485238 MachinePointerInfo::getFixedStack(MF, NewRetAddr));
52495239 }
@@ -5252,14 +5242,14 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
52525242
52535243/// CalculateTailCallArgDest - Remember Argument for later processing. Calculate
52545244/// 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) {
52595249 int Offset = ArgOffset + SPDiff;
52605250 uint32_t OpSize = (Arg.getValueSizeInBits() + 7) / 8;
52615251 int FI = MF.getFrameInfo().CreateFixedObject(OpSize, Offset, true);
5262- EVT VT = isPPC64 ? MVT::i64 : MVT::i32;
5252+ EVT VT = IsPPC64 ? MVT::i64 : MVT::i32;
52635253 SDValue FIN = DAG.getFrameIndex(FI, VT);
52645254 TailCallArgumentInfo Info;
52655255 Info.Arg = Arg;
@@ -5276,9 +5266,9 @@ SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(
52765266 SDValue &FPOpOut, const SDLoc &dl) const {
52775267 if (SPDiff) {
52785268 // Load the LR and FP stack slot for later adjusting.
5279- EVT VT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32;
52805269 LROpOut = getReturnAddrFrameIndex(DAG);
5281- LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo());
5270+ LROpOut = DAG.getLoad(Subtarget.getScalarIntVT(), dl, Chain, LROpOut,
5271+ MachinePointerInfo());
52825272 Chain = SDValue(LROpOut.getNode(), 1);
52835273 }
52845274 return Chain;
@@ -5320,8 +5310,9 @@ static void LowerMemOpCallTo(
53205310 MemOpChains.push_back(
53215311 DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
53225312 // 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);
53255316}
53265317
53275318static void
@@ -5672,7 +5663,7 @@ static void prepareDescriptorIndirectCall(SelectionDAG &DAG, SDValue &Callee,
56725663 const unsigned TOCAnchorOffset = Subtarget.descriptorTOCAnchorOffset();
56735664 const unsigned EnvPtrOffset = Subtarget.descriptorEnvironmentPointerOffset();
56745665
5675- const MVT RegVT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32 ;
5666+ const MVT RegVT = Subtarget.getScalarIntVT() ;
56765667 const Align Alignment = Subtarget.isPPC64() ? Align(8) : Align(4);
56775668
56785669 // One load for the functions entry point address.
@@ -5724,7 +5715,7 @@ buildCallOperands(SmallVectorImpl<SDValue> &Ops,
57245715 const PPCSubtarget &Subtarget) {
57255716 const bool IsPPC64 = Subtarget.isPPC64();
57265717 // MVT for a general purpose register.
5727- const MVT RegVT = IsPPC64 ? MVT::i64 : MVT::i32 ;
5718+ const MVT RegVT = Subtarget.getScalarIntVT() ;
57285719
57295720 // First operand is always the chain.
57305721 Ops.push_back(Chain);
@@ -6867,7 +6858,7 @@ static bool CC_AIX(unsigned ValNo, MVT ValVT, MVT LocVT,
68676858 const unsigned PtrSize = IsPPC64 ? 8 : 4;
68686859 const Align PtrAlign(PtrSize);
68696860 const Align StackAlign(16);
6870- const MVT RegVT = IsPPC64 ? MVT::i64 : MVT::i32 ;
6861+ const MVT RegVT = Subtarget.getScalarIntVT() ;
68716862
68726863 if (ValVT == MVT::f128)
68736864 report_fatal_error("f128 is unimplemented on AIX.");
@@ -7818,7 +7809,7 @@ SDValue PPCTargetLowering::LowerCall_AIX(
78187809 assert(!CFlags.IsTailCall && "Indirect tail-calls not supported.");
78197810 const MCRegister TOCBaseReg = Subtarget.getTOCPointerRegister();
78207811 const MCRegister StackPtrReg = Subtarget.getStackPointerRegister();
7821- const MVT PtrVT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32 ;
7812+ const MVT PtrVT = Subtarget.getScalarIntVT() ;
78227813 const unsigned TOCSaveOffset =
78237814 Subtarget.getFrameLowering()->getTOCSaveOffset();
78247815
@@ -8383,7 +8374,7 @@ static SDValue convertFPToInt(SDValue Op, SelectionDAG &DAG,
83838374 Src = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Src);
83848375 }
83858376 if ((DestTy == MVT::i8 || DestTy == MVT::i16) && Subtarget.hasP9Vector())
8386- DestTy = Subtarget.isPPC64() ? MVT::i64 : MVT::i32 ;
8377+ DestTy = Subtarget.getScalarIntVT() ;
83878378 unsigned Opc = ISD::DELETED_NODE;
83888379 switch (DestTy.SimpleTy) {
83898380 default: llvm_unreachable("Unhandled FP_TO_INT type in custom expander!");
@@ -11319,11 +11310,11 @@ SDValue PPCTargetLowering::LowerINTRINSIC_VOID(SDValue Op,
1131911310 Val = DAG.getNode(ISD::TRUNCATE, DL, MVT::i64, Val);
1132011311 }
1132111312 unsigned Opcode = Subtarget.isPPC64() ? PPC::CFENCE8 : PPC::CFENCE;
11322- EVT FTy = Subtarget.isPPC64() ? MVT::i64 : MVT::i32;
1132311313 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)),
1132711318 0);
1132811319 }
1132911320 default:
@@ -17361,7 +17352,6 @@ SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
1736117352 // the stack.
1736217353 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
1736317354 FuncInfo->setLRStoreRequired();
17364- bool isPPC64 = Subtarget.isPPC64();
1736517355 auto PtrVT = getPointerTy(MF.getDataLayout());
1736617356
1736717357 if (Depth > 0) {
@@ -17373,7 +17363,7 @@ SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
1737317363 LowerFRAMEADDR(Op, DAG), MachinePointerInfo());
1737417364 SDValue Offset =
1737517365 DAG.getConstant(Subtarget.getFrameLowering()->getReturnSaveOffset(), dl,
17376- isPPC64 ? MVT::i64 : MVT::i32 );
17366+ Subtarget.getScalarIntVT() );
1737717367 return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
1737817368 DAG.getNode(ISD::ADD, dl, PtrVT, FrameAddr, Offset),
1737917369 MachinePointerInfo());
0 commit comments