Home | History | Annotate | Line # | Download | only in M68k
      1 //===-- M68kISelLowering.cpp - M68k DAG Lowering Impl ------*- C++ -*--===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 ///
      9 /// \file
     10 /// This file defines the interfaces that M68k uses to lower LLVM code into a
     11 /// selection DAG.
     12 ///
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "M68kISelLowering.h"
     16 #include "M68kCallingConv.h"
     17 #include "M68kMachineFunction.h"
     18 #include "M68kSubtarget.h"
     19 #include "M68kTargetMachine.h"
     20 #include "M68kTargetObjectFile.h"
     21 
     22 #include "llvm/ADT/Statistic.h"
     23 #include "llvm/CodeGen/CallingConvLower.h"
     24 #include "llvm/CodeGen/MachineFrameInfo.h"
     25 #include "llvm/CodeGen/MachineFunction.h"
     26 #include "llvm/CodeGen/MachineInstrBuilder.h"
     27 #include "llvm/CodeGen/MachineJumpTableInfo.h"
     28 #include "llvm/CodeGen/MachineRegisterInfo.h"
     29 #include "llvm/CodeGen/SelectionDAG.h"
     30 #include "llvm/CodeGen/ValueTypes.h"
     31 #include "llvm/IR/CallingConv.h"
     32 #include "llvm/IR/DerivedTypes.h"
     33 #include "llvm/IR/GlobalVariable.h"
     34 #include "llvm/Support/CommandLine.h"
     35 #include "llvm/Support/Debug.h"
     36 #include "llvm/Support/ErrorHandling.h"
     37 #include "llvm/Support/KnownBits.h"
     38 #include "llvm/Support/raw_ostream.h"
     39 
     40 using namespace llvm;
     41 
     42 #define DEBUG_TYPE "M68k-isel"
     43 
     44 STATISTIC(NumTailCalls, "Number of tail calls");
     45 
     46 M68kTargetLowering::M68kTargetLowering(const M68kTargetMachine &TM,
     47                                        const M68kSubtarget &STI)
     48     : TargetLowering(TM), Subtarget(STI), TM(TM) {
     49 
     50   MVT PtrVT = MVT::i32;
     51 
     52   setBooleanContents(ZeroOrOneBooleanContent);
     53 
     54   auto *RegInfo = Subtarget.getRegisterInfo();
     55   setStackPointerRegisterToSaveRestore(RegInfo->getStackRegister());
     56 
     57   // Set up the register classes.
     58   addRegisterClass(MVT::i8, &M68k::DR8RegClass);
     59   addRegisterClass(MVT::i16, &M68k::XR16RegClass);
     60   addRegisterClass(MVT::i32, &M68k::XR32RegClass);
     61 
     62   for (auto VT : MVT::integer_valuetypes()) {
     63     setLoadExtAction(ISD::SEXTLOAD, VT, MVT::i1, Promote);
     64     setLoadExtAction(ISD::ZEXTLOAD, VT, MVT::i1, Promote);
     65     setLoadExtAction(ISD::EXTLOAD, VT, MVT::i1, Promote);
     66   }
     67 
     68   // We don't accept any truncstore of integer registers.
     69   setTruncStoreAction(MVT::i64, MVT::i32, Expand);
     70   setTruncStoreAction(MVT::i64, MVT::i16, Expand);
     71   setTruncStoreAction(MVT::i64, MVT::i8, Expand);
     72   setTruncStoreAction(MVT::i32, MVT::i16, Expand);
     73   setTruncStoreAction(MVT::i32, MVT::i8, Expand);
     74   setTruncStoreAction(MVT::i16, MVT::i8, Expand);
     75 
     76   setOperationAction(ISD::MUL, MVT::i8, Promote);
     77   setOperationAction(ISD::MUL, MVT::i16, Legal);
     78   if (Subtarget.atLeastM68020())
     79     setOperationAction(ISD::MUL, MVT::i32, Legal);
     80   else
     81     setOperationAction(ISD::MUL, MVT::i32, LibCall);
     82   setOperationAction(ISD::MUL, MVT::i64, LibCall);
     83 
     84   for (auto OP :
     85        {ISD::SDIV, ISD::UDIV, ISD::SREM, ISD::UREM, ISD::UDIVREM, ISD::SDIVREM,
     86         ISD::MULHS, ISD::MULHU, ISD::UMUL_LOHI, ISD::SMUL_LOHI}) {
     87     setOperationAction(OP, MVT::i8, Promote);
     88     setOperationAction(OP, MVT::i16, Legal);
     89     setOperationAction(OP, MVT::i32, LibCall);
     90   }
     91 
     92   for (auto OP : {ISD::UMUL_LOHI, ISD::SMUL_LOHI}) {
     93     setOperationAction(OP, MVT::i8, Expand);
     94     setOperationAction(OP, MVT::i16, Expand);
     95   }
     96 
     97   // FIXME It would be better to use a custom lowering
     98   for (auto OP : {ISD::SMULO, ISD::UMULO}) {
     99     setOperationAction(OP, MVT::i8, Expand);
    100     setOperationAction(OP, MVT::i16, Expand);
    101     setOperationAction(OP, MVT::i32, Expand);
    102   }
    103 
    104   // Add/Sub overflow ops with MVT::Glues are lowered to CCR dependences.
    105   for (auto VT : {MVT::i8, MVT::i16, MVT::i32}) {
    106     setOperationAction(ISD::ADDC, VT, Custom);
    107     setOperationAction(ISD::ADDE, VT, Custom);
    108     setOperationAction(ISD::SUBC, VT, Custom);
    109     setOperationAction(ISD::SUBE, VT, Custom);
    110   }
    111 
    112   // SADDO and friends are legal with this setup, i hope
    113   for (auto VT : {MVT::i8, MVT::i16, MVT::i32}) {
    114     setOperationAction(ISD::SADDO, VT, Custom);
    115     setOperationAction(ISD::UADDO, VT, Custom);
    116     setOperationAction(ISD::SSUBO, VT, Custom);
    117     setOperationAction(ISD::USUBO, VT, Custom);
    118   }
    119 
    120   setOperationAction(ISD::BR_JT, MVT::Other, Expand);
    121   setOperationAction(ISD::BRCOND, MVT::Other, Custom);
    122 
    123   for (auto VT : {MVT::i8, MVT::i16, MVT::i32}) {
    124     setOperationAction(ISD::BR_CC, VT, Expand);
    125     setOperationAction(ISD::SELECT, VT, Custom);
    126     setOperationAction(ISD::SELECT_CC, VT, Expand);
    127     setOperationAction(ISD::SETCC, VT, Custom);
    128     setOperationAction(ISD::SETCCCARRY, VT, Custom);
    129   }
    130 
    131   for (auto VT : {MVT::i8, MVT::i16, MVT::i32}) {
    132     setOperationAction(ISD::BSWAP, VT, Expand);
    133     setOperationAction(ISD::CTTZ, VT, Expand);
    134     setOperationAction(ISD::CTLZ, VT, Expand);
    135     setOperationAction(ISD::CTPOP, VT, Expand);
    136   }
    137 
    138   setOperationAction(ISD::ConstantPool, MVT::i32, Custom);
    139   setOperationAction(ISD::JumpTable, MVT::i32, Custom);
    140   setOperationAction(ISD::GlobalAddress, MVT::i32, Custom);
    141   setOperationAction(ISD::GlobalTLSAddress, MVT::i32, Custom);
    142   setOperationAction(ISD::ExternalSymbol, MVT::i32, Custom);
    143   setOperationAction(ISD::BlockAddress, MVT::i32, Custom);
    144 
    145   setOperationAction(ISD::VASTART, MVT::Other, Custom);
    146   setOperationAction(ISD::VAEND, MVT::Other, Expand);
    147   setOperationAction(ISD::VAARG, MVT::Other, Expand);
    148   setOperationAction(ISD::VACOPY, MVT::Other, Expand);
    149 
    150   setOperationAction(ISD::STACKSAVE, MVT::Other, Expand);
    151   setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
    152 
    153   setOperationAction(ISD::DYNAMIC_STACKALLOC, PtrVT, Custom);
    154 
    155   computeRegisterProperties(STI.getRegisterInfo());
    156 
    157   // 2^2 bytes
    158   // FIXME can it be just 2^1?
    159   setMinFunctionAlignment(Align::Constant<2>());
    160 }
    161 
    162 EVT M68kTargetLowering::getSetCCResultType(const DataLayout &DL,
    163                                            LLVMContext &Context, EVT VT) const {
    164   // M68k SETcc producess either 0x00 or 0xFF
    165   return MVT::i8;
    166 }
    167 
    168 MVT M68kTargetLowering::getScalarShiftAmountTy(const DataLayout &DL,
    169                                                EVT Ty) const {
    170   if (Ty.isSimple()) {
    171     return Ty.getSimpleVT();
    172   }
    173   return MVT::getIntegerVT(8 * DL.getPointerSize(0));
    174 }
    175 
    176 #include "M68kGenCallingConv.inc"
    177 
    178 enum StructReturnType { NotStructReturn, RegStructReturn, StackStructReturn };
    179 
    180 static StructReturnType
    181 callIsStructReturn(const SmallVectorImpl<ISD::OutputArg> &Outs) {
    182   if (Outs.empty())
    183     return NotStructReturn;
    184 
    185   const ISD::ArgFlagsTy &Flags = Outs[0].Flags;
    186   if (!Flags.isSRet())
    187     return NotStructReturn;
    188   if (Flags.isInReg())
    189     return RegStructReturn;
    190   return StackStructReturn;
    191 }
    192 
    193 /// Determines whether a function uses struct return semantics.
    194 static StructReturnType
    195 argsAreStructReturn(const SmallVectorImpl<ISD::InputArg> &Ins) {
    196   if (Ins.empty())
    197     return NotStructReturn;
    198 
    199   const ISD::ArgFlagsTy &Flags = Ins[0].Flags;
    200   if (!Flags.isSRet())
    201     return NotStructReturn;
    202   if (Flags.isInReg())
    203     return RegStructReturn;
    204   return StackStructReturn;
    205 }
    206 
    207 /// Make a copy of an aggregate at address specified by "Src" to address
    208 /// "Dst" with size and alignment information specified by the specific
    209 /// parameter attribute. The copy will be passed as a byval function parameter.
    210 static SDValue CreateCopyOfByValArgument(SDValue Src, SDValue Dst,
    211                                          SDValue Chain, ISD::ArgFlagsTy Flags,
    212                                          SelectionDAG &DAG, const SDLoc &DL) {
    213   SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), DL, MVT::i32);
    214 
    215   return DAG.getMemcpy(
    216       Chain, DL, Dst, Src, SizeNode, Flags.getNonZeroByValAlign(),
    217       /*isVolatile=*/false, /*AlwaysInline=*/true,
    218       /*isTailCall=*/false, MachinePointerInfo(), MachinePointerInfo());
    219 }
    220 
    221 /// Return true if the calling convention is one that we can guarantee TCO for.
    222 static bool canGuaranteeTCO(CallingConv::ID CC) { return false; }
    223 
    224 /// Return true if we might ever do TCO for calls with this calling convention.
    225 static bool mayTailCallThisCC(CallingConv::ID CC) {
    226   switch (CC) {
    227   // C calling conventions:
    228   case CallingConv::C:
    229     return true;
    230   default:
    231     return canGuaranteeTCO(CC);
    232   }
    233 }
    234 
    235 /// Return true if the function is being made into a tailcall target by
    236 /// changing its ABI.
    237 static bool shouldGuaranteeTCO(CallingConv::ID CC, bool GuaranteedTailCallOpt) {
    238   return GuaranteedTailCallOpt && canGuaranteeTCO(CC);
    239 }
    240 
    241 /// Return true if the given stack call argument is already available in the
    242 /// same position (relatively) of the caller's incoming argument stack.
    243 static bool MatchingStackOffset(SDValue Arg, unsigned Offset,
    244                                 ISD::ArgFlagsTy Flags, MachineFrameInfo &MFI,
    245                                 const MachineRegisterInfo *MRI,
    246                                 const M68kInstrInfo *TII,
    247                                 const CCValAssign &VA) {
    248   unsigned Bytes = Arg.getValueType().getSizeInBits() / 8;
    249 
    250   for (;;) {
    251     // Look through nodes that don't alter the bits of the incoming value.
    252     unsigned Op = Arg.getOpcode();
    253     if (Op == ISD::ZERO_EXTEND || Op == ISD::ANY_EXTEND || Op == ISD::BITCAST) {
    254       Arg = Arg.getOperand(0);
    255       continue;
    256     }
    257     if (Op == ISD::TRUNCATE) {
    258       const SDValue &TruncInput = Arg.getOperand(0);
    259       if (TruncInput.getOpcode() == ISD::AssertZext &&
    260           cast<VTSDNode>(TruncInput.getOperand(1))->getVT() ==
    261               Arg.getValueType()) {
    262         Arg = TruncInput.getOperand(0);
    263         continue;
    264       }
    265     }
    266     break;
    267   }
    268 
    269   int FI = INT_MAX;
    270   if (Arg.getOpcode() == ISD::CopyFromReg) {
    271     unsigned VR = cast<RegisterSDNode>(Arg.getOperand(1))->getReg();
    272     if (!Register::isVirtualRegister(VR))
    273       return false;
    274     MachineInstr *Def = MRI->getVRegDef(VR);
    275     if (!Def)
    276       return false;
    277     if (!Flags.isByVal()) {
    278       if (!TII->isLoadFromStackSlot(*Def, FI))
    279         return false;
    280     } else {
    281       unsigned Opcode = Def->getOpcode();
    282       if ((Opcode == M68k::LEA32p || Opcode == M68k::LEA32f) &&
    283           Def->getOperand(1).isFI()) {
    284         FI = Def->getOperand(1).getIndex();
    285         Bytes = Flags.getByValSize();
    286       } else
    287         return false;
    288     }
    289   } else if (auto *Ld = dyn_cast<LoadSDNode>(Arg)) {
    290     if (Flags.isByVal())
    291       // ByVal argument is passed in as a pointer but it's now being
    292       // dereferenced. e.g.
    293       // define @foo(%struct.X* %A) {
    294       //   tail call @bar(%struct.X* byval %A)
    295       // }
    296       return false;
    297     SDValue Ptr = Ld->getBasePtr();
    298     FrameIndexSDNode *FINode = dyn_cast<FrameIndexSDNode>(Ptr);
    299     if (!FINode)
    300       return false;
    301     FI = FINode->getIndex();
    302   } else if (Arg.getOpcode() == ISD::FrameIndex && Flags.isByVal()) {
    303     FrameIndexSDNode *FINode = cast<FrameIndexSDNode>(Arg);
    304     FI = FINode->getIndex();
    305     Bytes = Flags.getByValSize();
    306   } else
    307     return false;
    308 
    309   assert(FI != INT_MAX);
    310   if (!MFI.isFixedObjectIndex(FI))
    311     return false;
    312 
    313   if (Offset != MFI.getObjectOffset(FI))
    314     return false;
    315 
    316   if (VA.getLocVT().getSizeInBits() > Arg.getValueType().getSizeInBits()) {
    317     // If the argument location is wider than the argument type, check that any
    318     // extension flags match.
    319     if (Flags.isZExt() != MFI.isObjectZExt(FI) ||
    320         Flags.isSExt() != MFI.isObjectSExt(FI)) {
    321       return false;
    322     }
    323   }
    324 
    325   return Bytes == MFI.getObjectSize(FI);
    326 }
    327 
    328 SDValue
    329 M68kTargetLowering::getReturnAddressFrameIndex(SelectionDAG &DAG) const {
    330   MachineFunction &MF = DAG.getMachineFunction();
    331   M68kMachineFunctionInfo *FuncInfo = MF.getInfo<M68kMachineFunctionInfo>();
    332   int ReturnAddrIndex = FuncInfo->getRAIndex();
    333 
    334   if (ReturnAddrIndex == 0) {
    335     // Set up a frame object for the return address.
    336     unsigned SlotSize = Subtarget.getSlotSize();
    337     ReturnAddrIndex = MF.getFrameInfo().CreateFixedObject(
    338         SlotSize, -(int64_t)SlotSize, false);
    339     FuncInfo->setRAIndex(ReturnAddrIndex);
    340   }
    341 
    342   return DAG.getFrameIndex(ReturnAddrIndex, getPointerTy(DAG.getDataLayout()));
    343 }
    344 
    345 SDValue M68kTargetLowering::EmitTailCallLoadRetAddr(SelectionDAG &DAG,
    346                                                     SDValue &OutRetAddr,
    347                                                     SDValue Chain,
    348                                                     bool IsTailCall, int FPDiff,
    349                                                     const SDLoc &DL) const {
    350   EVT VT = getPointerTy(DAG.getDataLayout());
    351   OutRetAddr = getReturnAddressFrameIndex(DAG);
    352 
    353   // Load the "old" Return address.
    354   OutRetAddr = DAG.getLoad(VT, DL, Chain, OutRetAddr, MachinePointerInfo());
    355   return SDValue(OutRetAddr.getNode(), 1);
    356 }
    357 
    358 SDValue M68kTargetLowering::EmitTailCallStoreRetAddr(
    359     SelectionDAG &DAG, MachineFunction &MF, SDValue Chain, SDValue RetFI,
    360     EVT PtrVT, unsigned SlotSize, int FPDiff, const SDLoc &DL) const {
    361   if (!FPDiff)
    362     return Chain;
    363 
    364   // Calculate the new stack slot for the return address.
    365   int NewFO = MF.getFrameInfo().CreateFixedObject(
    366       SlotSize, (int64_t)FPDiff - SlotSize, false);
    367 
    368   SDValue NewFI = DAG.getFrameIndex(NewFO, PtrVT);
    369   // Store the return address to the appropriate stack slot.
    370   Chain = DAG.getStore(
    371       Chain, DL, RetFI, NewFI,
    372       MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), NewFO));
    373   return Chain;
    374 }
    375 
    376 SDValue
    377 M68kTargetLowering::LowerMemArgument(SDValue Chain, CallingConv::ID CallConv,
    378                                      const SmallVectorImpl<ISD::InputArg> &Ins,
    379                                      const SDLoc &DL, SelectionDAG &DAG,
    380                                      const CCValAssign &VA,
    381                                      MachineFrameInfo &MFI,
    382                                      unsigned ArgIdx) const {
    383   // Create the nodes corresponding to a load from this parameter slot.
    384   ISD::ArgFlagsTy Flags = Ins[ArgIdx].Flags;
    385   EVT ValVT;
    386 
    387   // If value is passed by pointer we have address passed instead of the value
    388   // itself.
    389   if (VA.getLocInfo() == CCValAssign::Indirect)
    390     ValVT = VA.getLocVT();
    391   else
    392     ValVT = VA.getValVT();
    393 
    394   // Because we are dealing with BE architecture we need to offset loading of
    395   // partial types
    396   int Offset = VA.getLocMemOffset();
    397   if (VA.getValVT() == MVT::i8) {
    398     Offset += 3;
    399   } else if (VA.getValVT() == MVT::i16) {
    400     Offset += 2;
    401   }
    402 
    403   // TODO Interrupt handlers
    404   // Calculate SP offset of interrupt parameter, re-arrange the slot normally
    405   // taken by a return address.
    406 
    407   // FIXME For now, all byval parameter objects are marked mutable. This can
    408   // be changed with more analysis. In case of tail call optimization mark all
    409   // arguments mutable. Since they could be overwritten by lowering of arguments
    410   // in case of a tail call.
    411   bool AlwaysUseMutable = shouldGuaranteeTCO(
    412       CallConv, DAG.getTarget().Options.GuaranteedTailCallOpt);
    413   bool IsImmutable = !AlwaysUseMutable && !Flags.isByVal();
    414 
    415   if (Flags.isByVal()) {
    416     unsigned Bytes = Flags.getByValSize();
    417     if (Bytes == 0)
    418       Bytes = 1; // Don't create zero-sized stack objects.
    419     int FI = MFI.CreateFixedObject(Bytes, Offset, IsImmutable);
    420     // TODO Interrupt handlers
    421     // Adjust SP offset of interrupt parameter.
    422     return DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
    423   } else {
    424     int FI =
    425         MFI.CreateFixedObject(ValVT.getSizeInBits() / 8, Offset, IsImmutable);
    426 
    427     // Set SExt or ZExt flag.
    428     if (VA.getLocInfo() == CCValAssign::ZExt) {
    429       MFI.setObjectZExt(FI, true);
    430     } else if (VA.getLocInfo() == CCValAssign::SExt) {
    431       MFI.setObjectSExt(FI, true);
    432     }
    433 
    434     // TODO Interrupt handlers
    435     // Adjust SP offset of interrupt parameter.
    436 
    437     SDValue FIN = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
    438     SDValue Val = DAG.getLoad(
    439         ValVT, DL, Chain, FIN,
    440         MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
    441     return VA.isExtInLoc() ? DAG.getNode(ISD::TRUNCATE, DL, VA.getValVT(), Val)
    442                            : Val;
    443   }
    444 }
    445 
    446 SDValue M68kTargetLowering::LowerMemOpCallTo(SDValue Chain, SDValue StackPtr,
    447                                              SDValue Arg, const SDLoc &DL,
    448                                              SelectionDAG &DAG,
    449                                              const CCValAssign &VA,
    450                                              ISD::ArgFlagsTy Flags) const {
    451   unsigned LocMemOffset = VA.getLocMemOffset();
    452   SDValue PtrOff = DAG.getIntPtrConstant(LocMemOffset, DL);
    453   PtrOff = DAG.getNode(ISD::ADD, DL, getPointerTy(DAG.getDataLayout()),
    454                        StackPtr, PtrOff);
    455   if (Flags.isByVal())
    456     return CreateCopyOfByValArgument(Arg, PtrOff, Chain, Flags, DAG, DL);
    457 
    458   return DAG.getStore(
    459       Chain, DL, Arg, PtrOff,
    460       MachinePointerInfo::getStack(DAG.getMachineFunction(), LocMemOffset));
    461 }
    462 
    463 //===----------------------------------------------------------------------===//
    464 //                                   Call
    465 //===----------------------------------------------------------------------===//
    466 
    467 SDValue M68kTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
    468                                       SmallVectorImpl<SDValue> &InVals) const {
    469   SelectionDAG &DAG = CLI.DAG;
    470   SDLoc &DL = CLI.DL;
    471   SmallVectorImpl<ISD::OutputArg> &Outs = CLI.Outs;
    472   SmallVectorImpl<SDValue> &OutVals = CLI.OutVals;
    473   SmallVectorImpl<ISD::InputArg> &Ins = CLI.Ins;
    474   SDValue Chain = CLI.Chain;
    475   SDValue Callee = CLI.Callee;
    476   CallingConv::ID CallConv = CLI.CallConv;
    477   bool &IsTailCall = CLI.IsTailCall;
    478   bool IsVarArg = CLI.IsVarArg;
    479 
    480   MachineFunction &MF = DAG.getMachineFunction();
    481   StructReturnType SR = callIsStructReturn(Outs);
    482   bool IsSibcall = false;
    483   M68kMachineFunctionInfo *MFI = MF.getInfo<M68kMachineFunctionInfo>();
    484   // const M68kRegisterInfo *TRI = Subtarget.getRegisterInfo();
    485 
    486   if (CallConv == CallingConv::M68k_INTR)
    487     report_fatal_error("M68k interrupts may not be called directly");
    488 
    489   auto Attr = MF.getFunction().getFnAttribute("disable-tail-calls");
    490   if (Attr.getValueAsBool())
    491     IsTailCall = false;
    492 
    493   // FIXME Add tailcalls support
    494 
    495   bool IsMustTail = CLI.CB && CLI.CB->isMustTailCall();
    496   if (IsMustTail) {
    497     // Force this to be a tail call.  The verifier rules are enough to ensure
    498     // that we can lower this successfully without moving the return address
    499     // around.
    500     IsTailCall = true;
    501   } else if (IsTailCall) {
    502     // Check if it's really possible to do a tail call.
    503     IsTailCall = IsEligibleForTailCallOptimization(
    504         Callee, CallConv, IsVarArg, SR != NotStructReturn,
    505         MF.getFunction().hasStructRetAttr(), CLI.RetTy, Outs, OutVals, Ins,
    506         DAG);
    507 
    508     // Sibcalls are automatically detected tailcalls which do not require
    509     // ABI changes.
    510     if (!MF.getTarget().Options.GuaranteedTailCallOpt && IsTailCall)
    511       IsSibcall = true;
    512 
    513     if (IsTailCall)
    514       ++NumTailCalls;
    515   }
    516 
    517   assert(!(IsVarArg && canGuaranteeTCO(CallConv)) &&
    518          "Var args not supported with calling convention fastcc");
    519 
    520   // Analyze operands of the call, assigning locations to each operand.
    521   SmallVector<CCValAssign, 16> ArgLocs;
    522   // It is empty for LibCall
    523   const Function *CalleeFunc = CLI.CB ? CLI.CB->getCalledFunction() : nullptr;
    524   M68kCCState CCInfo(*CalleeFunc, CallConv, IsVarArg, MF, ArgLocs,
    525                      *DAG.getContext());
    526   CCInfo.AnalyzeCallOperands(Outs, CC_M68k);
    527 
    528   // Get a count of how many bytes are to be pushed on the stack.
    529   unsigned NumBytes = CCInfo.getAlignedCallFrameSize();
    530   if (IsSibcall) {
    531     // This is a sibcall. The memory operands are available in caller's
    532     // own caller's stack.
    533     NumBytes = 0;
    534   } else if (MF.getTarget().Options.GuaranteedTailCallOpt &&
    535              canGuaranteeTCO(CallConv)) {
    536     NumBytes = GetAlignedArgumentStackSize(NumBytes, DAG);
    537   }
    538 
    539   int FPDiff = 0;
    540   if (IsTailCall && !IsSibcall && !IsMustTail) {
    541     // Lower arguments at fp - stackoffset + fpdiff.
    542     unsigned NumBytesCallerPushed = MFI->getBytesToPopOnReturn();
    543 
    544     FPDiff = NumBytesCallerPushed - NumBytes;
    545 
    546     // Set the delta of movement of the returnaddr stackslot.
    547     // But only set if delta is greater than previous delta.
    548     if (FPDiff < MFI->getTCReturnAddrDelta())
    549       MFI->setTCReturnAddrDelta(FPDiff);
    550   }
    551 
    552   unsigned NumBytesToPush = NumBytes;
    553   unsigned NumBytesToPop = NumBytes;
    554 
    555   // If we have an inalloca argument, all stack space has already been allocated
    556   // for us and be right at the top of the stack.  We don't support multiple
    557   // arguments passed in memory when using inalloca.
    558   if (!Outs.empty() && Outs.back().Flags.isInAlloca()) {
    559     NumBytesToPush = 0;
    560     if (!ArgLocs.back().isMemLoc())
    561       report_fatal_error("cannot use inalloca attribute on a register "
    562                          "parameter");
    563     if (ArgLocs.back().getLocMemOffset() != 0)
    564       report_fatal_error("any parameter with the inalloca attribute must be "
    565                          "the only memory argument");
    566   }
    567 
    568   if (!IsSibcall)
    569     Chain = DAG.getCALLSEQ_START(Chain, NumBytesToPush,
    570                                  NumBytes - NumBytesToPush, DL);
    571 
    572   SDValue RetFI;
    573   // Load return address for tail calls.
    574   if (IsTailCall && FPDiff)
    575     Chain = EmitTailCallLoadRetAddr(DAG, RetFI, Chain, IsTailCall, FPDiff, DL);
    576 
    577   SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass;
    578   SmallVector<SDValue, 8> MemOpChains;
    579   SDValue StackPtr;
    580 
    581   // Walk the register/memloc assignments, inserting copies/loads.  In the case
    582   // of tail call optimization arguments are handle later.
    583   const M68kRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
    584   for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
    585     ISD::ArgFlagsTy Flags = Outs[i].Flags;
    586 
    587     // Skip inalloca arguments, they have already been written.
    588     if (Flags.isInAlloca())
    589       continue;
    590 
    591     CCValAssign &VA = ArgLocs[i];
    592     EVT RegVT = VA.getLocVT();
    593     SDValue Arg = OutVals[i];
    594     bool IsByVal = Flags.isByVal();
    595 
    596     // Promote the value if needed.
    597     switch (VA.getLocInfo()) {
    598     default:
    599       llvm_unreachable("Unknown loc info!");
    600     case CCValAssign::Full:
    601       break;
    602     case CCValAssign::SExt:
    603       Arg = DAG.getNode(ISD::SIGN_EXTEND, DL, RegVT, Arg);
    604       break;
    605     case CCValAssign::ZExt:
    606       Arg = DAG.getNode(ISD::ZERO_EXTEND, DL, RegVT, Arg);
    607       break;
    608     case CCValAssign::AExt:
    609       Arg = DAG.getNode(ISD::ANY_EXTEND, DL, RegVT, Arg);
    610       break;
    611     case CCValAssign::BCvt:
    612       Arg = DAG.getBitcast(RegVT, Arg);
    613       break;
    614     case CCValAssign::Indirect: {
    615       // Store the argument.
    616       SDValue SpillSlot = DAG.CreateStackTemporary(VA.getValVT());
    617       int FI = cast<FrameIndexSDNode>(SpillSlot)->getIndex();
    618       Chain = DAG.getStore(
    619           Chain, DL, Arg, SpillSlot,
    620           MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
    621       Arg = SpillSlot;
    622       break;
    623     }
    624     }
    625 
    626     if (VA.isRegLoc()) {
    627       RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
    628     } else if (!IsSibcall && (!IsTailCall || IsByVal)) {
    629       assert(VA.isMemLoc());
    630       if (!StackPtr.getNode()) {
    631         StackPtr = DAG.getCopyFromReg(Chain, DL, RegInfo->getStackRegister(),
    632                                       getPointerTy(DAG.getDataLayout()));
    633       }
    634       MemOpChains.push_back(
    635           LowerMemOpCallTo(Chain, StackPtr, Arg, DL, DAG, VA, Flags));
    636     }
    637   }
    638 
    639   if (!MemOpChains.empty())
    640     Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOpChains);
    641 
    642   // FIXME Make sure PIC style GOT works as expected
    643   // The only time GOT is really needed is for Medium-PIC static data
    644   // otherwise we are happy with pc-rel or static references
    645 
    646   if (IsVarArg && IsMustTail) {
    647     const auto &Forwards = MFI->getForwardedMustTailRegParms();
    648     for (const auto &F : Forwards) {
    649       SDValue Val = DAG.getCopyFromReg(Chain, DL, F.VReg, F.VT);
    650       RegsToPass.push_back(std::make_pair(unsigned(F.PReg), Val));
    651     }
    652   }
    653 
    654   // For tail calls lower the arguments to the 'real' stack slots.  Sibcalls
    655   // don't need this because the eligibility check rejects calls that require
    656   // shuffling arguments passed in memory.
    657   if (!IsSibcall && IsTailCall) {
    658     // Force all the incoming stack arguments to be loaded from the stack
    659     // before any new outgoing arguments are stored to the stack, because the
    660     // outgoing stack slots may alias the incoming argument stack slots, and
    661     // the alias isn't otherwise explicit. This is slightly more conservative
    662     // than necessary, because it means that each store effectively depends
    663     // on every argument instead of just those arguments it would clobber.
    664     SDValue ArgChain = DAG.getStackArgumentTokenFactor(Chain);
    665 
    666     SmallVector<SDValue, 8> MemOpChains2;
    667     SDValue FIN;
    668     int FI = 0;
    669     for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
    670       CCValAssign &VA = ArgLocs[i];
    671       if (VA.isRegLoc())
    672         continue;
    673       assert(VA.isMemLoc());
    674       SDValue Arg = OutVals[i];
    675       ISD::ArgFlagsTy Flags = Outs[i].Flags;
    676       // Skip inalloca arguments.  They don't require any work.
    677       if (Flags.isInAlloca())
    678         continue;
    679       // Create frame index.
    680       int32_t Offset = VA.getLocMemOffset() + FPDiff;
    681       uint32_t OpSize = (VA.getLocVT().getSizeInBits() + 7) / 8;
    682       FI = MF.getFrameInfo().CreateFixedObject(OpSize, Offset, true);
    683       FIN = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
    684 
    685       if (Flags.isByVal()) {
    686         // Copy relative to framepointer.
    687         SDValue Source = DAG.getIntPtrConstant(VA.getLocMemOffset(), DL);
    688         if (!StackPtr.getNode()) {
    689           StackPtr = DAG.getCopyFromReg(Chain, DL, RegInfo->getStackRegister(),
    690                                         getPointerTy(DAG.getDataLayout()));
    691         }
    692         Source = DAG.getNode(ISD::ADD, DL, getPointerTy(DAG.getDataLayout()),
    693                              StackPtr, Source);
    694 
    695         MemOpChains2.push_back(
    696             CreateCopyOfByValArgument(Source, FIN, ArgChain, Flags, DAG, DL));
    697       } else {
    698         // Store relative to framepointer.
    699         MemOpChains2.push_back(DAG.getStore(
    700             ArgChain, DL, Arg, FIN,
    701             MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI)));
    702       }
    703     }
    704 
    705     if (!MemOpChains2.empty())
    706       Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOpChains2);
    707 
    708     // Store the return address to the appropriate stack slot.
    709     Chain = EmitTailCallStoreRetAddr(DAG, MF, Chain, RetFI,
    710                                      getPointerTy(DAG.getDataLayout()),
    711                                      Subtarget.getSlotSize(), FPDiff, DL);
    712   }
    713 
    714   // Build a sequence of copy-to-reg nodes chained together with token chain
    715   // and flag operands which copy the outgoing args into registers.
    716   SDValue InFlag;
    717   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) {
    718     Chain = DAG.getCopyToReg(Chain, DL, RegsToPass[i].first,
    719                              RegsToPass[i].second, InFlag);
    720     InFlag = Chain.getValue(1);
    721   }
    722 
    723   if (Callee->getOpcode() == ISD::GlobalAddress) {
    724     // If the callee is a GlobalAddress node (quite common, every direct call
    725     // is) turn it into a TargetGlobalAddress node so that legalize doesn't hack
    726     // it.
    727     GlobalAddressSDNode *G = cast<GlobalAddressSDNode>(Callee);
    728 
    729     // We should use extra load for direct calls to dllimported functions in
    730     // non-JIT mode.
    731     const GlobalValue *GV = G->getGlobal();
    732     if (!GV->hasDLLImportStorageClass()) {
    733       unsigned char OpFlags = Subtarget.classifyGlobalFunctionReference(GV);
    734 
    735       Callee = DAG.getTargetGlobalAddress(
    736           GV, DL, getPointerTy(DAG.getDataLayout()), G->getOffset(), OpFlags);
    737 
    738       if (OpFlags == M68kII::MO_GOTPCREL) {
    739 
    740         // Add a wrapper.
    741         Callee = DAG.getNode(M68kISD::WrapperPC, DL,
    742                              getPointerTy(DAG.getDataLayout()), Callee);
    743 
    744         // Add extra indirection
    745         Callee = DAG.getLoad(
    746             getPointerTy(DAG.getDataLayout()), DL, DAG.getEntryNode(), Callee,
    747             MachinePointerInfo::getGOT(DAG.getMachineFunction()));
    748       }
    749     }
    750   } else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) {
    751     const Module *Mod = DAG.getMachineFunction().getFunction().getParent();
    752     unsigned char OpFlags =
    753         Subtarget.classifyGlobalFunctionReference(nullptr, *Mod);
    754 
    755     Callee = DAG.getTargetExternalSymbol(
    756         S->getSymbol(), getPointerTy(DAG.getDataLayout()), OpFlags);
    757   }
    758 
    759   // Returns a chain & a flag for retval copy to use.
    760   SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
    761   SmallVector<SDValue, 8> Ops;
    762 
    763   if (!IsSibcall && IsTailCall) {
    764     Chain = DAG.getCALLSEQ_END(Chain,
    765                                DAG.getIntPtrConstant(NumBytesToPop, DL, true),
    766                                DAG.getIntPtrConstant(0, DL, true), InFlag, DL);
    767     InFlag = Chain.getValue(1);
    768   }
    769 
    770   Ops.push_back(Chain);
    771   Ops.push_back(Callee);
    772 
    773   if (IsTailCall)
    774     Ops.push_back(DAG.getConstant(FPDiff, DL, MVT::i32));
    775 
    776   // Add argument registers to the end of the list so that they are known live
    777   // into the call.
    778   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i)
    779     Ops.push_back(DAG.getRegister(RegsToPass[i].first,
    780                                   RegsToPass[i].second.getValueType()));
    781 
    782   // Add a register mask operand representing the call-preserved registers.
    783   const uint32_t *Mask = RegInfo->getCallPreservedMask(MF, CallConv);
    784   assert(Mask && "Missing call preserved mask for calling convention");
    785 
    786   Ops.push_back(DAG.getRegisterMask(Mask));
    787 
    788   if (InFlag.getNode())
    789     Ops.push_back(InFlag);
    790 
    791   if (IsTailCall) {
    792     MF.getFrameInfo().setHasTailCall();
    793     return DAG.getNode(M68kISD::TC_RETURN, DL, NodeTys, Ops);
    794   }
    795 
    796   Chain = DAG.getNode(M68kISD::CALL, DL, NodeTys, Ops);
    797   InFlag = Chain.getValue(1);
    798 
    799   // Create the CALLSEQ_END node.
    800   unsigned NumBytesForCalleeToPop;
    801   if (M68k::isCalleePop(CallConv, IsVarArg,
    802                         DAG.getTarget().Options.GuaranteedTailCallOpt)) {
    803     NumBytesForCalleeToPop = NumBytes; // Callee pops everything
    804   } else if (!canGuaranteeTCO(CallConv) && SR == StackStructReturn) {
    805     // If this is a call to a struct-return function, the callee
    806     // pops the hidden struct pointer, so we have to push it back.
    807     NumBytesForCalleeToPop = 4;
    808   } else {
    809     NumBytesForCalleeToPop = 0; // Callee pops nothing.
    810   }
    811 
    812   if (CLI.DoesNotReturn && !getTargetMachine().Options.TrapUnreachable) {
    813     // No need to reset the stack after the call if the call doesn't return. To
    814     // make the MI verify, we'll pretend the callee does it for us.
    815     NumBytesForCalleeToPop = NumBytes;
    816   }
    817 
    818   // Returns a flag for retval copy to use.
    819   if (!IsSibcall) {
    820     Chain = DAG.getCALLSEQ_END(
    821         Chain, DAG.getIntPtrConstant(NumBytesToPop, DL, true),
    822         DAG.getIntPtrConstant(NumBytesForCalleeToPop, DL, true), InFlag, DL);
    823     InFlag = Chain.getValue(1);
    824   }
    825 
    826   // Handle result values, copying them out of physregs into vregs that we
    827   // return.
    828   return LowerCallResult(Chain, InFlag, CallConv, IsVarArg, Ins, DL, DAG,
    829                          InVals);
    830 }
    831 
    832 SDValue M68kTargetLowering::LowerCallResult(
    833     SDValue Chain, SDValue InFlag, CallingConv::ID CallConv, bool IsVarArg,
    834     const SmallVectorImpl<ISD::InputArg> &Ins, const SDLoc &DL,
    835     SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
    836 
    837   // Assign locations to each value returned by this call.
    838   SmallVector<CCValAssign, 16> RVLocs;
    839   CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), RVLocs,
    840                  *DAG.getContext());
    841   CCInfo.AnalyzeCallResult(Ins, RetCC_M68k);
    842 
    843   // Copy all of the result registers out of their specified physreg.
    844   for (unsigned i = 0, e = RVLocs.size(); i != e; ++i) {
    845     CCValAssign &VA = RVLocs[i];
    846     EVT CopyVT = VA.getLocVT();
    847 
    848     /// ??? is this correct?
    849     Chain = DAG.getCopyFromReg(Chain, DL, VA.getLocReg(), CopyVT, InFlag)
    850                 .getValue(1);
    851     SDValue Val = Chain.getValue(0);
    852 
    853     if (VA.isExtInLoc() && VA.getValVT().getScalarType() == MVT::i1)
    854       Val = DAG.getNode(ISD::TRUNCATE, DL, VA.getValVT(), Val);
    855 
    856     InFlag = Chain.getValue(2);
    857     InVals.push_back(Val);
    858   }
    859 
    860   return Chain;
    861 }
    862 
    863 //===----------------------------------------------------------------------===//
    864 //            Formal Arguments Calling Convention Implementation
    865 //===----------------------------------------------------------------------===//
    866 
    867 SDValue M68kTargetLowering::LowerFormalArguments(
    868     SDValue Chain, CallingConv::ID CCID, bool IsVarArg,
    869     const SmallVectorImpl<ISD::InputArg> &Ins, const SDLoc &DL,
    870     SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
    871   MachineFunction &MF = DAG.getMachineFunction();
    872   M68kMachineFunctionInfo *MMFI = MF.getInfo<M68kMachineFunctionInfo>();
    873   // const TargetFrameLowering &TFL = *Subtarget.getFrameLowering();
    874 
    875   MachineFrameInfo &MFI = MF.getFrameInfo();
    876 
    877   // Assign locations to all of the incoming arguments.
    878   SmallVector<CCValAssign, 16> ArgLocs;
    879   M68kCCState CCInfo(MF.getFunction(), CCID, IsVarArg, MF, ArgLocs,
    880                      *DAG.getContext());
    881 
    882   CCInfo.AnalyzeFormalArguments(Ins, CC_M68k);
    883 
    884   unsigned LastVal = ~0U;
    885   SDValue ArgValue;
    886   for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
    887     CCValAssign &VA = ArgLocs[i];
    888     assert(VA.getValNo() != LastVal && "Same value in different locations");
    889 
    890     LastVal = VA.getValNo();
    891 
    892     if (VA.isRegLoc()) {
    893       EVT RegVT = VA.getLocVT();
    894       const TargetRegisterClass *RC;
    895       if (RegVT == MVT::i32)
    896         RC = &M68k::XR32RegClass;
    897       else
    898         llvm_unreachable("Unknown argument type!");
    899 
    900       unsigned Reg = MF.addLiveIn(VA.getLocReg(), RC);
    901       ArgValue = DAG.getCopyFromReg(Chain, DL, Reg, RegVT);
    902 
    903       // If this is an 8 or 16-bit value, it is really passed promoted to 32
    904       // bits.  Insert an assert[sz]ext to capture this, then truncate to the
    905       // right size.
    906       if (VA.getLocInfo() == CCValAssign::SExt) {
    907         ArgValue = DAG.getNode(ISD::AssertSext, DL, RegVT, ArgValue,
    908                                DAG.getValueType(VA.getValVT()));
    909       } else if (VA.getLocInfo() == CCValAssign::ZExt) {
    910         ArgValue = DAG.getNode(ISD::AssertZext, DL, RegVT, ArgValue,
    911                                DAG.getValueType(VA.getValVT()));
    912       } else if (VA.getLocInfo() == CCValAssign::BCvt) {
    913         ArgValue = DAG.getBitcast(VA.getValVT(), ArgValue);
    914       }
    915 
    916       if (VA.isExtInLoc()) {
    917         ArgValue = DAG.getNode(ISD::TRUNCATE, DL, VA.getValVT(), ArgValue);
    918       }
    919     } else {
    920       assert(VA.isMemLoc());
    921       ArgValue = LowerMemArgument(Chain, CCID, Ins, DL, DAG, VA, MFI, i);
    922     }
    923 
    924     // If value is passed via pointer - do a load.
    925     // TODO Make sure this handling on indirect arguments is correct
    926     if (VA.getLocInfo() == CCValAssign::Indirect)
    927       ArgValue =
    928           DAG.getLoad(VA.getValVT(), DL, Chain, ArgValue, MachinePointerInfo());
    929 
    930     InVals.push_back(ArgValue);
    931   }
    932 
    933   for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
    934     // Swift calling convention does not require we copy the sret argument
    935     // into %D0 for the return. We don't set SRetReturnReg for Swift.
    936     if (CCID == CallingConv::Swift)
    937       continue;
    938 
    939     // ABI require that for returning structs by value we copy the sret argument
    940     // into %D0 for the return. Save the argument into a virtual register so
    941     // that we can access it from the return points.
    942     if (Ins[i].Flags.isSRet()) {
    943       unsigned Reg = MMFI->getSRetReturnReg();
    944       if (!Reg) {
    945         MVT PtrTy = getPointerTy(DAG.getDataLayout());
    946         Reg = MF.getRegInfo().createVirtualRegister(getRegClassFor(PtrTy));
    947         MMFI->setSRetReturnReg(Reg);
    948       }
    949       SDValue Copy = DAG.getCopyToReg(DAG.getEntryNode(), DL, Reg, InVals[i]);
    950       Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Copy, Chain);
    951       break;
    952     }
    953   }
    954 
    955   unsigned StackSize = CCInfo.getNextStackOffset();
    956   // Align stack specially for tail calls.
    957   if (shouldGuaranteeTCO(CCID, MF.getTarget().Options.GuaranteedTailCallOpt))
    958     StackSize = GetAlignedArgumentStackSize(StackSize, DAG);
    959 
    960   // If the function takes variable number of arguments, make a frame index for
    961   // the start of the first vararg value... for expansion of llvm.va_start. We
    962   // can skip this if there are no va_start calls.
    963   if (MFI.hasVAStart()) {
    964     MMFI->setVarArgsFrameIndex(MFI.CreateFixedObject(1, StackSize, true));
    965   }
    966 
    967   if (IsVarArg && MFI.hasMustTailInVarArgFunc()) {
    968     // We forward some GPRs and some vector types.
    969     SmallVector<MVT, 2> RegParmTypes;
    970     MVT IntVT = MVT::i32;
    971     RegParmTypes.push_back(IntVT);
    972 
    973     // Compute the set of forwarded registers. The rest are scratch.
    974     // ??? what is this for?
    975     SmallVectorImpl<ForwardedRegister> &Forwards =
    976         MMFI->getForwardedMustTailRegParms();
    977     CCInfo.analyzeMustTailForwardedRegisters(Forwards, RegParmTypes, CC_M68k);
    978 
    979     // Copy all forwards from physical to virtual registers.
    980     for (ForwardedRegister &F : Forwards) {
    981       // FIXME Can we use a less constrained schedule?
    982       SDValue RegVal = DAG.getCopyFromReg(Chain, DL, F.VReg, F.VT);
    983       F.VReg = MF.getRegInfo().createVirtualRegister(getRegClassFor(F.VT));
    984       Chain = DAG.getCopyToReg(Chain, DL, F.VReg, RegVal);
    985     }
    986   }
    987 
    988   // Some CCs need callee pop.
    989   if (M68k::isCalleePop(CCID, IsVarArg,
    990                         MF.getTarget().Options.GuaranteedTailCallOpt)) {
    991     MMFI->setBytesToPopOnReturn(StackSize); // Callee pops everything.
    992   } else {
    993     MMFI->setBytesToPopOnReturn(0); // Callee pops nothing.
    994     // If this is an sret function, the return should pop the hidden pointer.
    995     if (!canGuaranteeTCO(CCID) && argsAreStructReturn(Ins) == StackStructReturn)
    996       MMFI->setBytesToPopOnReturn(4);
    997   }
    998 
    999   MMFI->setArgumentStackSize(StackSize);
   1000 
   1001   return Chain;
   1002 }
   1003 
   1004 //===----------------------------------------------------------------------===//
   1005 //              Return Value Calling Convention Implementation
   1006 //===----------------------------------------------------------------------===//
   1007 
   1008 SDValue
   1009 M68kTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CCID,
   1010                                 bool IsVarArg,
   1011                                 const SmallVectorImpl<ISD::OutputArg> &Outs,
   1012                                 const SmallVectorImpl<SDValue> &OutVals,
   1013                                 const SDLoc &DL, SelectionDAG &DAG) const {
   1014   MachineFunction &MF = DAG.getMachineFunction();
   1015   M68kMachineFunctionInfo *MFI = MF.getInfo<M68kMachineFunctionInfo>();
   1016 
   1017   SmallVector<CCValAssign, 16> RVLocs;
   1018   CCState CCInfo(CCID, IsVarArg, MF, RVLocs, *DAG.getContext());
   1019   CCInfo.AnalyzeReturn(Outs, RetCC_M68k);
   1020 
   1021   SDValue Flag;
   1022   SmallVector<SDValue, 6> RetOps;
   1023   // Operand #0 = Chain (updated below)
   1024   RetOps.push_back(Chain);
   1025   // Operand #1 = Bytes To Pop
   1026   RetOps.push_back(
   1027       DAG.getTargetConstant(MFI->getBytesToPopOnReturn(), DL, MVT::i32));
   1028 
   1029   // Copy the result values into the output registers.
   1030   for (unsigned i = 0, e = RVLocs.size(); i != e; ++i) {
   1031     CCValAssign &VA = RVLocs[i];
   1032     assert(VA.isRegLoc() && "Can only return in registers!");
   1033     SDValue ValToCopy = OutVals[i];
   1034     EVT ValVT = ValToCopy.getValueType();
   1035 
   1036     // Promote values to the appropriate types.
   1037     if (VA.getLocInfo() == CCValAssign::SExt)
   1038       ValToCopy = DAG.getNode(ISD::SIGN_EXTEND, DL, VA.getLocVT(), ValToCopy);
   1039     else if (VA.getLocInfo() == CCValAssign::ZExt)
   1040       ValToCopy = DAG.getNode(ISD::ZERO_EXTEND, DL, VA.getLocVT(), ValToCopy);
   1041     else if (VA.getLocInfo() == CCValAssign::AExt) {
   1042       if (ValVT.isVector() && ValVT.getVectorElementType() == MVT::i1)
   1043         ValToCopy = DAG.getNode(ISD::SIGN_EXTEND, DL, VA.getLocVT(), ValToCopy);
   1044       else
   1045         ValToCopy = DAG.getNode(ISD::ANY_EXTEND, DL, VA.getLocVT(), ValToCopy);
   1046     } else if (VA.getLocInfo() == CCValAssign::BCvt)
   1047       ValToCopy = DAG.getBitcast(VA.getLocVT(), ValToCopy);
   1048 
   1049     Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), ValToCopy, Flag);
   1050     Flag = Chain.getValue(1);
   1051     RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT()));
   1052   }
   1053 
   1054   // Swift calling convention does not require we copy the sret argument
   1055   // into %d0 for the return, and SRetReturnReg is not set for Swift.
   1056 
   1057   // ABI require that for returning structs by value we copy the sret argument
   1058   // into %D0 for the return. Save the argument into a virtual register so that
   1059   // we can access it from the return points.
   1060   //
   1061   // Checking Function.hasStructRetAttr() here is insufficient because the IR
   1062   // may not have an explicit sret argument. If MFI.CanLowerReturn is
   1063   // false, then an sret argument may be implicitly inserted in the SelDAG. In
   1064   // either case MFI->setSRetReturnReg() will have been called.
   1065   if (unsigned SRetReg = MFI->getSRetReturnReg()) {
   1066     // ??? Can i just move this to the top and escape this explanation?
   1067     // When we have both sret and another return value, we should use the
   1068     // original Chain stored in RetOps[0], instead of the current Chain updated
   1069     // in the above loop. If we only have sret, RetOps[0] equals to Chain.
   1070 
   1071     // For the case of sret and another return value, we have
   1072     //   Chain_0 at the function entry
   1073     //   Chain_1 = getCopyToReg(Chain_0) in the above loop
   1074     // If we use Chain_1 in getCopyFromReg, we will have
   1075     //   Val = getCopyFromReg(Chain_1)
   1076     //   Chain_2 = getCopyToReg(Chain_1, Val) from below
   1077 
   1078     // getCopyToReg(Chain_0) will be glued together with
   1079     // getCopyToReg(Chain_1, Val) into Unit A, getCopyFromReg(Chain_1) will be
   1080     // in Unit B, and we will have cyclic dependency between Unit A and Unit B:
   1081     //   Data dependency from Unit B to Unit A due to usage of Val in
   1082     //     getCopyToReg(Chain_1, Val)
   1083     //   Chain dependency from Unit A to Unit B
   1084 
   1085     // So here, we use RetOps[0] (i.e Chain_0) for getCopyFromReg.
   1086     SDValue Val = DAG.getCopyFromReg(RetOps[0], DL, SRetReg,
   1087                                      getPointerTy(MF.getDataLayout()));
   1088 
   1089     // ??? How will this work if CC does not use registers for args passing?
   1090     // ??? What if I return multiple structs?
   1091     unsigned RetValReg = M68k::D0;
   1092     Chain = DAG.getCopyToReg(Chain, DL, RetValReg, Val, Flag);
   1093     Flag = Chain.getValue(1);
   1094 
   1095     RetOps.push_back(
   1096         DAG.getRegister(RetValReg, getPointerTy(DAG.getDataLayout())));
   1097   }
   1098 
   1099   RetOps[0] = Chain; // Update chain.
   1100 
   1101   // Add the flag if we have it.
   1102   if (Flag.getNode())
   1103     RetOps.push_back(Flag);
   1104 
   1105   return DAG.getNode(M68kISD::RET, DL, MVT::Other, RetOps);
   1106 }
   1107 
   1108 //===----------------------------------------------------------------------===//
   1109 //                Fast Calling Convention (tail call) implementation
   1110 //===----------------------------------------------------------------------===//
   1111 
   1112 //  Like std call, callee cleans arguments, convention except that ECX is
   1113 //  reserved for storing the tail called function address. Only 2 registers are
   1114 //  free for argument passing (inreg). Tail call optimization is performed
   1115 //  provided:
   1116 //                * tailcallopt is enabled
   1117 //                * caller/callee are fastcc
   1118 //  On M68k_64 architecture with GOT-style position independent code only
   1119 //  local (within module) calls are supported at the moment. To keep the stack
   1120 //  aligned according to platform abi the function GetAlignedArgumentStackSize
   1121 //  ensures that argument delta is always multiples of stack alignment. (Dynamic
   1122 //  linkers need this - darwin's dyld for example) If a tail called function
   1123 //  callee has more arguments than the caller the caller needs to make sure that
   1124 //  there is room to move the RETADDR to. This is achieved by reserving an area
   1125 //  the size of the argument delta right after the original RETADDR, but before
   1126 //  the saved framepointer or the spilled registers e.g. caller(arg1, arg2)
   1127 //  calls callee(arg1, arg2,arg3,arg4) stack layout:
   1128 //    arg1
   1129 //    arg2
   1130 //    RETADDR
   1131 //    [ new RETADDR
   1132 //      move area ]
   1133 //    (possible EBP)
   1134 //    ESI
   1135 //    EDI
   1136 //    local1 ..
   1137 
   1138 /// Make the stack size align e.g 16n + 12 aligned for a 16-byte align
   1139 /// requirement.
   1140 unsigned
   1141 M68kTargetLowering::GetAlignedArgumentStackSize(unsigned StackSize,
   1142                                                 SelectionDAG &DAG) const {
   1143   const TargetFrameLowering &TFI = *Subtarget.getFrameLowering();
   1144   unsigned StackAlignment = TFI.getStackAlignment();
   1145   uint64_t AlignMask = StackAlignment - 1;
   1146   int64_t Offset = StackSize;
   1147   unsigned SlotSize = Subtarget.getSlotSize();
   1148   if ((Offset & AlignMask) <= (StackAlignment - SlotSize)) {
   1149     // Number smaller than 12 so just add the difference.
   1150     Offset += ((StackAlignment - SlotSize) - (Offset & AlignMask));
   1151   } else {
   1152     // Mask out lower bits, add stackalignment once plus the 12 bytes.
   1153     Offset =
   1154         ((~AlignMask) & Offset) + StackAlignment + (StackAlignment - SlotSize);
   1155   }
   1156   return Offset;
   1157 }
   1158 
   1159 /// Check whether the call is eligible for tail call optimization. Targets
   1160 /// that want to do tail call optimization should implement this function.
   1161 bool M68kTargetLowering::IsEligibleForTailCallOptimization(
   1162     SDValue Callee, CallingConv::ID CalleeCC, bool IsVarArg,
   1163     bool IsCalleeStructRet, bool IsCallerStructRet, Type *RetTy,
   1164     const SmallVectorImpl<ISD::OutputArg> &Outs,
   1165     const SmallVectorImpl<SDValue> &OutVals,
   1166     const SmallVectorImpl<ISD::InputArg> &Ins, SelectionDAG &DAG) const {
   1167   if (!mayTailCallThisCC(CalleeCC))
   1168     return false;
   1169 
   1170   // If -tailcallopt is specified, make fastcc functions tail-callable.
   1171   MachineFunction &MF = DAG.getMachineFunction();
   1172   const auto &CallerF = MF.getFunction();
   1173 
   1174   CallingConv::ID CallerCC = CallerF.getCallingConv();
   1175   bool CCMatch = CallerCC == CalleeCC;
   1176 
   1177   if (DAG.getTarget().Options.GuaranteedTailCallOpt) {
   1178     if (canGuaranteeTCO(CalleeCC) && CCMatch)
   1179       return true;
   1180     return false;
   1181   }
   1182 
   1183   // Look for obvious safe cases to perform tail call optimization that do not
   1184   // require ABI changes. This is what gcc calls sibcall.
   1185 
   1186   // Can't do sibcall if stack needs to be dynamically re-aligned. PEI needs to
   1187   // emit a special epilogue.
   1188   const M68kRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
   1189   if (RegInfo->hasStackRealignment(MF))
   1190     return false;
   1191 
   1192   // Also avoid sibcall optimization if either caller or callee uses struct
   1193   // return semantics.
   1194   if (IsCalleeStructRet || IsCallerStructRet)
   1195     return false;
   1196 
   1197   // Do not sibcall optimize vararg calls unless all arguments are passed via
   1198   // registers.
   1199   LLVMContext &C = *DAG.getContext();
   1200   if (IsVarArg && !Outs.empty()) {
   1201 
   1202     SmallVector<CCValAssign, 16> ArgLocs;
   1203     CCState CCInfo(CalleeCC, IsVarArg, MF, ArgLocs, C);
   1204 
   1205     CCInfo.AnalyzeCallOperands(Outs, CC_M68k);
   1206     for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i)
   1207       if (!ArgLocs[i].isRegLoc())
   1208         return false;
   1209   }
   1210 
   1211   // Check that the call results are passed in the same way.
   1212   if (!CCState::resultsCompatible(CalleeCC, CallerCC, MF, C, Ins, RetCC_M68k,
   1213                                   RetCC_M68k))
   1214     return false;
   1215 
   1216   // The callee has to preserve all registers the caller needs to preserve.
   1217   const M68kRegisterInfo *TRI = Subtarget.getRegisterInfo();
   1218   const uint32_t *CallerPreserved = TRI->getCallPreservedMask(MF, CallerCC);
   1219   if (!CCMatch) {
   1220     const uint32_t *CalleePreserved = TRI->getCallPreservedMask(MF, CalleeCC);
   1221     if (!TRI->regmaskSubsetEqual(CallerPreserved, CalleePreserved))
   1222       return false;
   1223   }
   1224 
   1225   unsigned StackArgsSize = 0;
   1226 
   1227   // If the callee takes no arguments then go on to check the results of the
   1228   // call.
   1229   if (!Outs.empty()) {
   1230     // Check if stack adjustment is needed. For now, do not do this if any
   1231     // argument is passed on the stack.
   1232     SmallVector<CCValAssign, 16> ArgLocs;
   1233     CCState CCInfo(CalleeCC, IsVarArg, MF, ArgLocs, C);
   1234 
   1235     CCInfo.AnalyzeCallOperands(Outs, CC_M68k);
   1236     StackArgsSize = CCInfo.getNextStackOffset();
   1237 
   1238     if (CCInfo.getNextStackOffset()) {
   1239       // Check if the arguments are already laid out in the right way as
   1240       // the caller's fixed stack objects.
   1241       MachineFrameInfo &MFI = MF.getFrameInfo();
   1242       const MachineRegisterInfo *MRI = &MF.getRegInfo();
   1243       const M68kInstrInfo *TII = Subtarget.getInstrInfo();
   1244       for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
   1245         CCValAssign &VA = ArgLocs[i];
   1246         SDValue Arg = OutVals[i];
   1247         ISD::ArgFlagsTy Flags = Outs[i].Flags;
   1248         if (VA.getLocInfo() == CCValAssign::Indirect)
   1249           return false;
   1250         if (!VA.isRegLoc()) {
   1251           if (!MatchingStackOffset(Arg, VA.getLocMemOffset(), Flags, MFI, MRI,
   1252                                    TII, VA))
   1253             return false;
   1254         }
   1255       }
   1256     }
   1257 
   1258     bool PositionIndependent = isPositionIndependent();
   1259     // If the tailcall address may be in a register, then make sure it's
   1260     // possible to register allocate for it. The call address can
   1261     // only target %A0 or %A1 since the tail call must be scheduled after
   1262     // callee-saved registers are restored. These happen to be the same
   1263     // registers used to pass 'inreg' arguments so watch out for those.
   1264     if ((!isa<GlobalAddressSDNode>(Callee) &&
   1265          !isa<ExternalSymbolSDNode>(Callee)) ||
   1266         PositionIndependent) {
   1267       unsigned NumInRegs = 0;
   1268       // In PIC we need an extra register to formulate the address computation
   1269       // for the callee.
   1270       unsigned MaxInRegs = PositionIndependent ? 1 : 2;
   1271 
   1272       for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
   1273         CCValAssign &VA = ArgLocs[i];
   1274         if (!VA.isRegLoc())
   1275           continue;
   1276         unsigned Reg = VA.getLocReg();
   1277         switch (Reg) {
   1278         default:
   1279           break;
   1280         case M68k::A0:
   1281         case M68k::A1:
   1282           if (++NumInRegs == MaxInRegs)
   1283             return false;
   1284           break;
   1285         }
   1286       }
   1287     }
   1288 
   1289     const MachineRegisterInfo &MRI = MF.getRegInfo();
   1290     if (!parametersInCSRMatch(MRI, CallerPreserved, ArgLocs, OutVals))
   1291       return false;
   1292   }
   1293 
   1294   bool CalleeWillPop = M68k::isCalleePop(
   1295       CalleeCC, IsVarArg, MF.getTarget().Options.GuaranteedTailCallOpt);
   1296 
   1297   if (unsigned BytesToPop =
   1298           MF.getInfo<M68kMachineFunctionInfo>()->getBytesToPopOnReturn()) {
   1299     // If we have bytes to pop, the callee must pop them.
   1300     bool CalleePopMatches = CalleeWillPop && BytesToPop == StackArgsSize;
   1301     if (!CalleePopMatches)
   1302       return false;
   1303   } else if (CalleeWillPop && StackArgsSize > 0) {
   1304     // If we don't have bytes to pop, make sure the callee doesn't pop any.
   1305     return false;
   1306   }
   1307 
   1308   return true;
   1309 }
   1310 
   1311 //===----------------------------------------------------------------------===//
   1312 // Custom Lower
   1313 //===----------------------------------------------------------------------===//
   1314 
   1315 SDValue M68kTargetLowering::LowerOperation(SDValue Op,
   1316                                            SelectionDAG &DAG) const {
   1317   switch (Op.getOpcode()) {
   1318   default:
   1319     llvm_unreachable("Should not custom lower this!");
   1320   case ISD::SADDO:
   1321   case ISD::UADDO:
   1322   case ISD::SSUBO:
   1323   case ISD::USUBO:
   1324   case ISD::SMULO:
   1325   case ISD::UMULO:
   1326     return LowerXALUO(Op, DAG);
   1327   case ISD::SETCC:
   1328     return LowerSETCC(Op, DAG);
   1329   case ISD::SETCCCARRY:
   1330     return LowerSETCCCARRY(Op, DAG);
   1331   case ISD::SELECT:
   1332     return LowerSELECT(Op, DAG);
   1333   case ISD::BRCOND:
   1334     return LowerBRCOND(Op, DAG);
   1335   case ISD::ADDC:
   1336   case ISD::ADDE:
   1337   case ISD::SUBC:
   1338   case ISD::SUBE:
   1339     return LowerADDC_ADDE_SUBC_SUBE(Op, DAG);
   1340   case ISD::ConstantPool:
   1341     return LowerConstantPool(Op, DAG);
   1342   case ISD::GlobalAddress:
   1343     return LowerGlobalAddress(Op, DAG);
   1344   case ISD::ExternalSymbol:
   1345     return LowerExternalSymbol(Op, DAG);
   1346   case ISD::BlockAddress:
   1347     return LowerBlockAddress(Op, DAG);
   1348   case ISD::JumpTable:
   1349     return LowerJumpTable(Op, DAG);
   1350   case ISD::VASTART:
   1351     return LowerVASTART(Op, DAG);
   1352   case ISD::DYNAMIC_STACKALLOC:
   1353     return LowerDYNAMIC_STACKALLOC(Op, DAG);
   1354   }
   1355 }
   1356 
   1357 bool M68kTargetLowering::decomposeMulByConstant(LLVMContext &Context, EVT VT,
   1358                                                 SDValue C) const {
   1359   // Shifts and add instructions in M68000 and M68010 support
   1360   // up to 32 bits, but mul only has 16-bit variant. So it's almost
   1361   // certainly beneficial to lower 8/16/32-bit mul to their
   1362   // add / shifts counterparts. But for 64-bits mul, it might be
   1363   // safer to just leave it to compiler runtime implementations.
   1364   return VT.bitsLE(MVT::i32) || Subtarget.atLeastM68020();
   1365 }
   1366 
   1367 SDValue M68kTargetLowering::LowerXALUO(SDValue Op, SelectionDAG &DAG) const {
   1368   // Lower the "add/sub/mul with overflow" instruction into a regular ins plus
   1369   // a "setcc" instruction that checks the overflow flag. The "brcond" lowering
   1370   // looks for this combo and may remove the "setcc" instruction if the "setcc"
   1371   // has only one use.
   1372   SDNode *N = Op.getNode();
   1373   SDValue LHS = N->getOperand(0);
   1374   SDValue RHS = N->getOperand(1);
   1375   unsigned BaseOp = 0;
   1376   unsigned Cond = 0;
   1377   SDLoc DL(Op);
   1378   switch (Op.getOpcode()) {
   1379   default:
   1380     llvm_unreachable("Unknown ovf instruction!");
   1381   case ISD::SADDO:
   1382     BaseOp = M68kISD::ADD;
   1383     Cond = M68k::COND_VS;
   1384     break;
   1385   case ISD::UADDO:
   1386     BaseOp = M68kISD::ADD;
   1387     Cond = M68k::COND_CS;
   1388     break;
   1389   case ISD::SSUBO:
   1390     BaseOp = M68kISD::SUB;
   1391     Cond = M68k::COND_VS;
   1392     break;
   1393   case ISD::USUBO:
   1394     BaseOp = M68kISD::SUB;
   1395     Cond = M68k::COND_CS;
   1396     break;
   1397   }
   1398 
   1399   // Also sets CCR.
   1400   SDVTList VTs = DAG.getVTList(N->getValueType(0), MVT::i8);
   1401   SDValue Arith = DAG.getNode(BaseOp, DL, VTs, LHS, RHS);
   1402   SDValue SetCC = DAG.getNode(M68kISD::SETCC, DL, N->getValueType(1),
   1403                               DAG.getConstant(Cond, DL, MVT::i8),
   1404                               SDValue(Arith.getNode(), 1));
   1405 
   1406   return DAG.getNode(ISD::MERGE_VALUES, DL, N->getVTList(), Arith, SetCC);
   1407 }
   1408 
   1409 /// Create a BT (Bit Test) node - Test bit \p BitNo in \p Src and set condition
   1410 /// according to equal/not-equal condition code \p CC.
   1411 static SDValue getBitTestCondition(SDValue Src, SDValue BitNo, ISD::CondCode CC,
   1412                                    const SDLoc &DL, SelectionDAG &DAG) {
   1413   // If Src is i8, promote it to i32 with any_extend.  There is no i8 BT
   1414   // instruction.  Since the shift amount is in-range-or-undefined, we know
   1415   // that doing a bittest on the i32 value is ok.
   1416   if (Src.getValueType() == MVT::i8 || Src.getValueType() == MVT::i16)
   1417     Src = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i32, Src);
   1418 
   1419   // If the operand types disagree, extend the shift amount to match.  Since
   1420   // BT ignores high bits (like shifts) we can use anyextend.
   1421   if (Src.getValueType() != BitNo.getValueType())
   1422     BitNo = DAG.getNode(ISD::ANY_EXTEND, DL, Src.getValueType(), BitNo);
   1423 
   1424   SDValue BT = DAG.getNode(M68kISD::BT, DL, MVT::i32, Src, BitNo);
   1425 
   1426   // NOTE BTST sets CCR.Z flag
   1427   M68k::CondCode Cond = CC == ISD::SETEQ ? M68k::COND_NE : M68k::COND_EQ;
   1428   return DAG.getNode(M68kISD::SETCC, DL, MVT::i8,
   1429                      DAG.getConstant(Cond, DL, MVT::i8), BT);
   1430 }
   1431 
   1432 /// Result of 'and' is compared against zero. Change to a BT node if possible.
   1433 static SDValue LowerAndToBT(SDValue And, ISD::CondCode CC, const SDLoc &DL,
   1434                             SelectionDAG &DAG) {
   1435   SDValue Op0 = And.getOperand(0);
   1436   SDValue Op1 = And.getOperand(1);
   1437   if (Op0.getOpcode() == ISD::TRUNCATE)
   1438     Op0 = Op0.getOperand(0);
   1439   if (Op1.getOpcode() == ISD::TRUNCATE)
   1440     Op1 = Op1.getOperand(0);
   1441 
   1442   SDValue LHS, RHS;
   1443   if (Op1.getOpcode() == ISD::SHL)
   1444     std::swap(Op0, Op1);
   1445   if (Op0.getOpcode() == ISD::SHL) {
   1446     if (isOneConstant(Op0.getOperand(0))) {
   1447       // If we looked past a truncate, check that it's only truncating away
   1448       // known zeros.
   1449       unsigned BitWidth = Op0.getValueSizeInBits();
   1450       unsigned AndBitWidth = And.getValueSizeInBits();
   1451       if (BitWidth > AndBitWidth) {
   1452         auto Known = DAG.computeKnownBits(Op0);
   1453         if (Known.countMinLeadingZeros() < BitWidth - AndBitWidth)
   1454           return SDValue();
   1455       }
   1456       LHS = Op1;
   1457       RHS = Op0.getOperand(1);
   1458     }
   1459   } else if (auto *AndRHS = dyn_cast<ConstantSDNode>(Op1)) {
   1460     uint64_t AndRHSVal = AndRHS->getZExtValue();
   1461     SDValue AndLHS = Op0;
   1462 
   1463     if (AndRHSVal == 1 && AndLHS.getOpcode() == ISD::SRL) {
   1464       LHS = AndLHS.getOperand(0);
   1465       RHS = AndLHS.getOperand(1);
   1466     }
   1467 
   1468     // Use BT if the immediate can't be encoded in a TEST instruction.
   1469     if (!isUInt<32>(AndRHSVal) && isPowerOf2_64(AndRHSVal)) {
   1470       LHS = AndLHS;
   1471       RHS = DAG.getConstant(Log2_64_Ceil(AndRHSVal), DL, LHS.getValueType());
   1472     }
   1473   }
   1474 
   1475   if (LHS.getNode())
   1476     return getBitTestCondition(LHS, RHS, CC, DL, DAG);
   1477 
   1478   return SDValue();
   1479 }
   1480 
   1481 static M68k::CondCode TranslateIntegerM68kCC(ISD::CondCode SetCCOpcode) {
   1482   switch (SetCCOpcode) {
   1483   default:
   1484     llvm_unreachable("Invalid integer condition!");
   1485   case ISD::SETEQ:
   1486     return M68k::COND_EQ;
   1487   case ISD::SETGT:
   1488     return M68k::COND_GT;
   1489   case ISD::SETGE:
   1490     return M68k::COND_GE;
   1491   case ISD::SETLT:
   1492     return M68k::COND_LT;
   1493   case ISD::SETLE:
   1494     return M68k::COND_LE;
   1495   case ISD::SETNE:
   1496     return M68k::COND_NE;
   1497   case ISD::SETULT:
   1498     return M68k::COND_CS;
   1499   case ISD::SETUGE:
   1500     return M68k::COND_CC;
   1501   case ISD::SETUGT:
   1502     return M68k::COND_HI;
   1503   case ISD::SETULE:
   1504     return M68k::COND_LS;
   1505   }
   1506 }
   1507 
   1508 /// Do a one-to-one translation of a ISD::CondCode to the M68k-specific
   1509 /// condition code, returning the condition code and the LHS/RHS of the
   1510 /// comparison to make.
   1511 static unsigned TranslateM68kCC(ISD::CondCode SetCCOpcode, const SDLoc &DL,
   1512                                 bool IsFP, SDValue &LHS, SDValue &RHS,
   1513                                 SelectionDAG &DAG) {
   1514   if (!IsFP) {
   1515     if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(RHS)) {
   1516       if (SetCCOpcode == ISD::SETGT && RHSC->isAllOnesValue()) {
   1517         // X > -1   -> X == 0, jump !sign.
   1518         RHS = DAG.getConstant(0, DL, RHS.getValueType());
   1519         return M68k::COND_PL;
   1520       }
   1521       if (SetCCOpcode == ISD::SETLT && RHSC->isNullValue()) {
   1522         // X < 0   -> X == 0, jump on sign.
   1523         return M68k::COND_MI;
   1524       }
   1525       if (SetCCOpcode == ISD::SETLT && RHSC->getZExtValue() == 1) {
   1526         // X < 1   -> X <= 0
   1527         RHS = DAG.getConstant(0, DL, RHS.getValueType());
   1528         return M68k::COND_LE;
   1529       }
   1530     }
   1531 
   1532     return TranslateIntegerM68kCC(SetCCOpcode);
   1533   }
   1534 
   1535   // First determine if it is required or is profitable to flip the operands.
   1536 
   1537   // If LHS is a foldable load, but RHS is not, flip the condition.
   1538   if (ISD::isNON_EXTLoad(LHS.getNode()) && !ISD::isNON_EXTLoad(RHS.getNode())) {
   1539     SetCCOpcode = getSetCCSwappedOperands(SetCCOpcode);
   1540     std::swap(LHS, RHS);
   1541   }
   1542 
   1543   switch (SetCCOpcode) {
   1544   default:
   1545     break;
   1546   case ISD::SETOLT:
   1547   case ISD::SETOLE:
   1548   case ISD::SETUGT:
   1549   case ISD::SETUGE:
   1550     std::swap(LHS, RHS);
   1551     break;
   1552   }
   1553 
   1554   // On a floating point condition, the flags are set as follows:
   1555   // ZF  PF  CF   op
   1556   //  0 | 0 | 0 | X > Y
   1557   //  0 | 0 | 1 | X < Y
   1558   //  1 | 0 | 0 | X == Y
   1559   //  1 | 1 | 1 | unordered
   1560   switch (SetCCOpcode) {
   1561   default:
   1562     llvm_unreachable("Condcode should be pre-legalized away");
   1563   case ISD::SETUEQ:
   1564   case ISD::SETEQ:
   1565     return M68k::COND_EQ;
   1566   case ISD::SETOLT: // flipped
   1567   case ISD::SETOGT:
   1568   case ISD::SETGT:
   1569     return M68k::COND_HI;
   1570   case ISD::SETOLE: // flipped
   1571   case ISD::SETOGE:
   1572   case ISD::SETGE:
   1573     return M68k::COND_CC;
   1574   case ISD::SETUGT: // flipped
   1575   case ISD::SETULT:
   1576   case ISD::SETLT:
   1577     return M68k::COND_CS;
   1578   case ISD::SETUGE: // flipped
   1579   case ISD::SETULE:
   1580   case ISD::SETLE:
   1581     return M68k::COND_LS;
   1582   case ISD::SETONE:
   1583   case ISD::SETNE:
   1584     return M68k::COND_NE;
   1585   case ISD::SETOEQ:
   1586   case ISD::SETUNE:
   1587     return M68k::COND_INVALID;
   1588   }
   1589 }
   1590 
   1591 // Convert (truncate (srl X, N) to i1) to (bt X, N)
   1592 static SDValue LowerTruncateToBT(SDValue Op, ISD::CondCode CC, const SDLoc &DL,
   1593                                  SelectionDAG &DAG) {
   1594 
   1595   assert(Op.getOpcode() == ISD::TRUNCATE && Op.getValueType() == MVT::i1 &&
   1596          "Expected TRUNCATE to i1 node");
   1597 
   1598   if (Op.getOperand(0).getOpcode() != ISD::SRL)
   1599     return SDValue();
   1600 
   1601   SDValue ShiftRight = Op.getOperand(0);
   1602   return getBitTestCondition(ShiftRight.getOperand(0), ShiftRight.getOperand(1),
   1603                              CC, DL, DAG);
   1604 }
   1605 
   1606 /// \brief return true if \c Op has a use that doesn't just read flags.
   1607 static bool hasNonFlagsUse(SDValue Op) {
   1608   for (SDNode::use_iterator UI = Op->use_begin(), UE = Op->use_end(); UI != UE;
   1609        ++UI) {
   1610     SDNode *User = *UI;
   1611     unsigned UOpNo = UI.getOperandNo();
   1612     if (User->getOpcode() == ISD::TRUNCATE && User->hasOneUse()) {
   1613       // Look pass truncate.
   1614       UOpNo = User->use_begin().getOperandNo();
   1615       User = *User->use_begin();
   1616     }
   1617 
   1618     if (User->getOpcode() != ISD::BRCOND && User->getOpcode() != ISD::SETCC &&
   1619         !(User->getOpcode() == ISD::SELECT && UOpNo == 0))
   1620       return true;
   1621   }
   1622   return false;
   1623 }
   1624 
   1625 SDValue M68kTargetLowering::EmitTest(SDValue Op, unsigned M68kCC,
   1626                                      const SDLoc &DL, SelectionDAG &DAG) const {
   1627 
   1628   // CF and OF aren't always set the way we want. Determine which
   1629   // of these we need.
   1630   bool NeedCF = false;
   1631   bool NeedOF = false;
   1632   switch (M68kCC) {
   1633   default:
   1634     break;
   1635   case M68k::COND_HI:
   1636   case M68k::COND_CC:
   1637   case M68k::COND_CS:
   1638   case M68k::COND_LS:
   1639     NeedCF = true;
   1640     break;
   1641   case M68k::COND_GT:
   1642   case M68k::COND_GE:
   1643   case M68k::COND_LT:
   1644   case M68k::COND_LE:
   1645   case M68k::COND_VS:
   1646   case M68k::COND_VC: {
   1647     // Check if we really need to set the
   1648     // Overflow flag. If NoSignedWrap is present
   1649     // that is not actually needed.
   1650     switch (Op->getOpcode()) {
   1651     case ISD::ADD:
   1652     case ISD::SUB:
   1653     case ISD::MUL:
   1654     case ISD::SHL: {
   1655       if (Op.getNode()->getFlags().hasNoSignedWrap())
   1656         break;
   1657       LLVM_FALLTHROUGH;
   1658     }
   1659     default:
   1660       NeedOF = true;
   1661       break;
   1662     }
   1663     break;
   1664   }
   1665   }
   1666   // See if we can use the CCR value from the operand instead of
   1667   // doing a separate TEST. TEST always sets OF and CF to 0, so unless
   1668   // we prove that the arithmetic won't overflow, we can't use OF or CF.
   1669   if (Op.getResNo() != 0 || NeedOF || NeedCF) {
   1670     // Emit a CMP with 0, which is the TEST pattern.
   1671     return DAG.getNode(M68kISD::CMP, DL, MVT::i8,
   1672                        DAG.getConstant(0, DL, Op.getValueType()), Op);
   1673   }
   1674   unsigned Opcode = 0;
   1675   unsigned NumOperands = 0;
   1676 
   1677   // Truncate operations may prevent the merge of the SETCC instruction
   1678   // and the arithmetic instruction before it. Attempt to truncate the operands
   1679   // of the arithmetic instruction and use a reduced bit-width instruction.
   1680   bool NeedTruncation = false;
   1681   SDValue ArithOp = Op;
   1682   if (Op->getOpcode() == ISD::TRUNCATE && Op->hasOneUse()) {
   1683     SDValue Arith = Op->getOperand(0);
   1684     // Both the trunc and the arithmetic op need to have one user each.
   1685     if (Arith->hasOneUse())
   1686       switch (Arith.getOpcode()) {
   1687       default:
   1688         break;
   1689       case ISD::ADD:
   1690       case ISD::SUB:
   1691       case ISD::AND:
   1692       case ISD::OR:
   1693       case ISD::XOR: {
   1694         NeedTruncation = true;
   1695         ArithOp = Arith;
   1696       }
   1697       }
   1698   }
   1699 
   1700   // NOTICE: In the code below we use ArithOp to hold the arithmetic operation
   1701   // which may be the result of a CAST.  We use the variable 'Op', which is the
   1702   // non-casted variable when we check for possible users.
   1703   switch (ArithOp.getOpcode()) {
   1704   case ISD::ADD:
   1705     Opcode = M68kISD::ADD;
   1706     NumOperands = 2;
   1707     break;
   1708   case ISD::SHL:
   1709   case ISD::SRL:
   1710     // If we have a constant logical shift that's only used in a comparison
   1711     // against zero turn it into an equivalent AND. This allows turning it into
   1712     // a TEST instruction later.
   1713     if ((M68kCC == M68k::COND_EQ || M68kCC == M68k::COND_NE) &&
   1714         Op->hasOneUse() && isa<ConstantSDNode>(Op->getOperand(1)) &&
   1715         !hasNonFlagsUse(Op)) {
   1716       EVT VT = Op.getValueType();
   1717       unsigned BitWidth = VT.getSizeInBits();
   1718       unsigned ShAmt = Op->getConstantOperandVal(1);
   1719       if (ShAmt >= BitWidth) // Avoid undefined shifts.
   1720         break;
   1721       APInt Mask = ArithOp.getOpcode() == ISD::SRL
   1722                        ? APInt::getHighBitsSet(BitWidth, BitWidth - ShAmt)
   1723                        : APInt::getLowBitsSet(BitWidth, BitWidth - ShAmt);
   1724       if (!Mask.isSignedIntN(32)) // Avoid large immediates.
   1725         break;
   1726       Op = DAG.getNode(ISD::AND, DL, VT, Op->getOperand(0),
   1727                        DAG.getConstant(Mask, DL, VT));
   1728     }
   1729     break;
   1730 
   1731   case ISD::AND:
   1732     // If the primary 'and' result isn't used, don't bother using
   1733     // M68kISD::AND, because a TEST instruction will be better.
   1734     if (!hasNonFlagsUse(Op)) {
   1735       SDValue Op0 = ArithOp->getOperand(0);
   1736       SDValue Op1 = ArithOp->getOperand(1);
   1737       EVT VT = ArithOp.getValueType();
   1738       bool IsAndn = isBitwiseNot(Op0) || isBitwiseNot(Op1);
   1739       bool IsLegalAndnType = VT == MVT::i32 || VT == MVT::i64;
   1740 
   1741       // But if we can combine this into an ANDN operation, then create an AND
   1742       // now and allow it to be pattern matched into an ANDN.
   1743       if (/*!Subtarget.hasBMI() ||*/ !IsAndn || !IsLegalAndnType)
   1744         break;
   1745     }
   1746     LLVM_FALLTHROUGH;
   1747   case ISD::SUB:
   1748   case ISD::OR:
   1749   case ISD::XOR:
   1750     // Due to the ISEL shortcoming noted above, be conservative if this op is
   1751     // likely to be selected as part of a load-modify-store instruction.
   1752     for (const auto *U : Op.getNode()->uses())
   1753       if (U->getOpcode() == ISD::STORE)
   1754         goto default_case;
   1755 
   1756     // Otherwise use a regular CCR-setting instruction.
   1757     switch (ArithOp.getOpcode()) {
   1758     default:
   1759       llvm_unreachable("unexpected operator!");
   1760     case ISD::SUB:
   1761       Opcode = M68kISD::SUB;
   1762       break;
   1763     case ISD::XOR:
   1764       Opcode = M68kISD::XOR;
   1765       break;
   1766     case ISD::AND:
   1767       Opcode = M68kISD::AND;
   1768       break;
   1769     case ISD::OR:
   1770       Opcode = M68kISD::OR;
   1771       break;
   1772     }
   1773 
   1774     NumOperands = 2;
   1775     break;
   1776   case M68kISD::ADD:
   1777   case M68kISD::SUB:
   1778   case M68kISD::OR:
   1779   case M68kISD::XOR:
   1780   case M68kISD::AND:
   1781     return SDValue(Op.getNode(), 1);
   1782   default:
   1783   default_case:
   1784     break;
   1785   }
   1786 
   1787   // If we found that truncation is beneficial, perform the truncation and
   1788   // update 'Op'.
   1789   if (NeedTruncation) {
   1790     EVT VT = Op.getValueType();
   1791     SDValue WideVal = Op->getOperand(0);
   1792     EVT WideVT = WideVal.getValueType();
   1793     unsigned ConvertedOp = 0;
   1794     // Use a target machine opcode to prevent further DAGCombine
   1795     // optimizations that may separate the arithmetic operations
   1796     // from the setcc node.
   1797     switch (WideVal.getOpcode()) {
   1798     default:
   1799       break;
   1800     case ISD::ADD:
   1801       ConvertedOp = M68kISD::ADD;
   1802       break;
   1803     case ISD::SUB:
   1804       ConvertedOp = M68kISD::SUB;
   1805       break;
   1806     case ISD::AND:
   1807       ConvertedOp = M68kISD::AND;
   1808       break;
   1809     case ISD::OR:
   1810       ConvertedOp = M68kISD::OR;
   1811       break;
   1812     case ISD::XOR:
   1813       ConvertedOp = M68kISD::XOR;
   1814       break;
   1815     }
   1816 
   1817     if (ConvertedOp) {
   1818       const TargetLowering &TLI = DAG.getTargetLoweringInfo();
   1819       if (TLI.isOperationLegal(WideVal.getOpcode(), WideVT)) {
   1820         SDValue V0 = DAG.getNode(ISD::TRUNCATE, DL, VT, WideVal.getOperand(0));
   1821         SDValue V1 = DAG.getNode(ISD::TRUNCATE, DL, VT, WideVal.getOperand(1));
   1822         Op = DAG.getNode(ConvertedOp, DL, VT, V0, V1);
   1823       }
   1824     }
   1825   }
   1826 
   1827   if (Opcode == 0) {
   1828     // Emit a CMP with 0, which is the TEST pattern.
   1829     return DAG.getNode(M68kISD::CMP, DL, MVT::i8,
   1830                        DAG.getConstant(0, DL, Op.getValueType()), Op);
   1831   }
   1832   SDVTList VTs = DAG.getVTList(Op.getValueType(), MVT::i8);
   1833   SmallVector<SDValue, 4> Ops(Op->op_begin(), Op->op_begin() + NumOperands);
   1834 
   1835   SDValue New = DAG.getNode(Opcode, DL, VTs, Ops);
   1836   DAG.ReplaceAllUsesWith(Op, New);
   1837   return SDValue(New.getNode(), 1);
   1838 }
   1839 
   1840 /// \brief Return true if the condition is an unsigned comparison operation.
   1841 static bool isM68kCCUnsigned(unsigned M68kCC) {
   1842   switch (M68kCC) {
   1843   default:
   1844     llvm_unreachable("Invalid integer condition!");
   1845   case M68k::COND_EQ:
   1846   case M68k::COND_NE:
   1847   case M68k::COND_CS:
   1848   case M68k::COND_HI:
   1849   case M68k::COND_LS:
   1850   case M68k::COND_CC:
   1851     return true;
   1852   case M68k::COND_GT:
   1853   case M68k::COND_GE:
   1854   case M68k::COND_LT:
   1855   case M68k::COND_LE:
   1856     return false;
   1857   }
   1858 }
   1859 
   1860 SDValue M68kTargetLowering::EmitCmp(SDValue Op0, SDValue Op1, unsigned M68kCC,
   1861                                     const SDLoc &DL, SelectionDAG &DAG) const {
   1862   if (isNullConstant(Op1))
   1863     return EmitTest(Op0, M68kCC, DL, DAG);
   1864 
   1865   assert(!(isa<ConstantSDNode>(Op1) && Op0.getValueType() == MVT::i1) &&
   1866          "Unexpected comparison operation for MVT::i1 operands");
   1867 
   1868   if ((Op0.getValueType() == MVT::i8 || Op0.getValueType() == MVT::i16 ||
   1869        Op0.getValueType() == MVT::i32 || Op0.getValueType() == MVT::i64)) {
   1870     // Only promote the compare up to I32 if it is a 16 bit operation
   1871     // with an immediate.  16 bit immediates are to be avoided.
   1872     if ((Op0.getValueType() == MVT::i16 &&
   1873          (isa<ConstantSDNode>(Op0) || isa<ConstantSDNode>(Op1))) &&
   1874         !DAG.getMachineFunction().getFunction().hasMinSize()) {
   1875       unsigned ExtendOp =
   1876           isM68kCCUnsigned(M68kCC) ? ISD::ZERO_EXTEND : ISD::SIGN_EXTEND;
   1877       Op0 = DAG.getNode(ExtendOp, DL, MVT::i32, Op0);
   1878       Op1 = DAG.getNode(ExtendOp, DL, MVT::i32, Op1);
   1879     }
   1880     // Use SUB instead of CMP to enable CSE between SUB and CMP.
   1881     SDVTList VTs = DAG.getVTList(Op0.getValueType(), MVT::i8);
   1882     SDValue Sub = DAG.getNode(M68kISD::SUB, DL, VTs, Op0, Op1);
   1883     return SDValue(Sub.getNode(), 1);
   1884   }
   1885   return DAG.getNode(M68kISD::CMP, DL, MVT::i8, Op0, Op1);
   1886 }
   1887 
   1888 /// Result of 'and' or 'trunc to i1' is compared against zero.
   1889 /// Change to a BT node if possible.
   1890 SDValue M68kTargetLowering::LowerToBT(SDValue Op, ISD::CondCode CC,
   1891                                       const SDLoc &DL,
   1892                                       SelectionDAG &DAG) const {
   1893   if (Op.getOpcode() == ISD::AND)
   1894     return LowerAndToBT(Op, CC, DL, DAG);
   1895   if (Op.getOpcode() == ISD::TRUNCATE && Op.getValueType() == MVT::i1)
   1896     return LowerTruncateToBT(Op, CC, DL, DAG);
   1897   return SDValue();
   1898 }
   1899 
   1900 SDValue M68kTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
   1901   MVT VT = Op.getSimpleValueType();
   1902   assert(VT == MVT::i8 && "SetCC type must be 8-bit integer");
   1903 
   1904   SDValue Op0 = Op.getOperand(0);
   1905   SDValue Op1 = Op.getOperand(1);
   1906   SDLoc DL(Op);
   1907   ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(2))->get();
   1908 
   1909   // Optimize to BT if possible.
   1910   // Lower (X & (1 << N)) == 0 to BT(X, N).
   1911   // Lower ((X >>u N) & 1) != 0 to BT(X, N).
   1912   // Lower ((X >>s N) & 1) != 0 to BT(X, N).
   1913   // Lower (trunc (X >> N) to i1) to BT(X, N).
   1914   if (Op0.hasOneUse() && isNullConstant(Op1) &&
   1915       (CC == ISD::SETEQ || CC == ISD::SETNE)) {
   1916     if (SDValue NewSetCC = LowerToBT(Op0, CC, DL, DAG)) {
   1917       if (VT == MVT::i1)
   1918         return DAG.getNode(ISD::TRUNCATE, DL, MVT::i1, NewSetCC);
   1919       return NewSetCC;
   1920     }
   1921   }
   1922 
   1923   // Look for X == 0, X == 1, X != 0, or X != 1.  We can simplify some forms of
   1924   // these.
   1925   if ((isOneConstant(Op1) || isNullConstant(Op1)) &&
   1926       (CC == ISD::SETEQ || CC == ISD::SETNE)) {
   1927 
   1928     // If the input is a setcc, then reuse the input setcc or use a new one with
   1929     // the inverted condition.
   1930     if (Op0.getOpcode() == M68kISD::SETCC) {
   1931       M68k::CondCode CCode = (M68k::CondCode)Op0.getConstantOperandVal(0);
   1932       bool Invert = (CC == ISD::SETNE) ^ isNullConstant(Op1);
   1933       if (!Invert)
   1934         return Op0;
   1935 
   1936       CCode = M68k::GetOppositeBranchCondition(CCode);
   1937       SDValue SetCC =
   1938           DAG.getNode(M68kISD::SETCC, DL, MVT::i8,
   1939                       DAG.getConstant(CCode, DL, MVT::i8), Op0.getOperand(1));
   1940       if (VT == MVT::i1)
   1941         return DAG.getNode(ISD::TRUNCATE, DL, MVT::i1, SetCC);
   1942       return SetCC;
   1943     }
   1944   }
   1945   if (Op0.getValueType() == MVT::i1 && (CC == ISD::SETEQ || CC == ISD::SETNE)) {
   1946     if (isOneConstant(Op1)) {
   1947       ISD::CondCode NewCC = ISD::GlobalISel::getSetCCInverse(CC, true);
   1948       return DAG.getSetCC(DL, VT, Op0, DAG.getConstant(0, DL, MVT::i1), NewCC);
   1949     }
   1950     if (!isNullConstant(Op1)) {
   1951       SDValue Xor = DAG.getNode(ISD::XOR, DL, MVT::i1, Op0, Op1);
   1952       return DAG.getSetCC(DL, VT, Xor, DAG.getConstant(0, DL, MVT::i1), CC);
   1953     }
   1954   }
   1955 
   1956   bool IsFP = Op1.getSimpleValueType().isFloatingPoint();
   1957   unsigned M68kCC = TranslateM68kCC(CC, DL, IsFP, Op0, Op1, DAG);
   1958   if (M68kCC == M68k::COND_INVALID)
   1959     return SDValue();
   1960 
   1961   SDValue CCR = EmitCmp(Op0, Op1, M68kCC, DL, DAG);
   1962   return DAG.getNode(M68kISD::SETCC, DL, MVT::i8,
   1963                      DAG.getConstant(M68kCC, DL, MVT::i8), CCR);
   1964 }
   1965 
   1966 SDValue M68kTargetLowering::LowerSETCCCARRY(SDValue Op,
   1967                                             SelectionDAG &DAG) const {
   1968   SDValue LHS = Op.getOperand(0);
   1969   SDValue RHS = Op.getOperand(1);
   1970   SDValue Carry = Op.getOperand(2);
   1971   SDValue Cond = Op.getOperand(3);
   1972   SDLoc DL(Op);
   1973 
   1974   assert(LHS.getSimpleValueType().isInteger() && "SETCCCARRY is integer only.");
   1975   M68k::CondCode CC = TranslateIntegerM68kCC(cast<CondCodeSDNode>(Cond)->get());
   1976 
   1977   EVT CarryVT = Carry.getValueType();
   1978   APInt NegOne = APInt::getAllOnesValue(CarryVT.getScalarSizeInBits());
   1979   Carry = DAG.getNode(M68kISD::ADD, DL, DAG.getVTList(CarryVT, MVT::i32), Carry,
   1980                       DAG.getConstant(NegOne, DL, CarryVT));
   1981 
   1982   SDVTList VTs = DAG.getVTList(LHS.getValueType(), MVT::i32);
   1983   SDValue Cmp =
   1984       DAG.getNode(M68kISD::SUBX, DL, VTs, LHS, RHS, Carry.getValue(1));
   1985 
   1986   return DAG.getNode(M68kISD::SETCC, DL, MVT::i8,
   1987                      DAG.getConstant(CC, DL, MVT::i8), Cmp.getValue(1));
   1988 }
   1989 
   1990 /// Return true if opcode is a M68k logical comparison.
   1991 static bool isM68kLogicalCmp(SDValue Op) {
   1992   unsigned Opc = Op.getNode()->getOpcode();
   1993   if (Opc == M68kISD::CMP)
   1994     return true;
   1995   if (Op.getResNo() == 1 &&
   1996       (Opc == M68kISD::ADD || Opc == M68kISD::SUB || Opc == M68kISD::ADDX ||
   1997        Opc == M68kISD::SUBX || Opc == M68kISD::SMUL || Opc == M68kISD::UMUL ||
   1998        Opc == M68kISD::OR || Opc == M68kISD::XOR || Opc == M68kISD::AND))
   1999     return true;
   2000 
   2001   if (Op.getResNo() == 2 && Opc == M68kISD::UMUL)
   2002     return true;
   2003 
   2004   return false;
   2005 }
   2006 
   2007 static bool isTruncWithZeroHighBitsInput(SDValue V, SelectionDAG &DAG) {
   2008   if (V.getOpcode() != ISD::TRUNCATE)
   2009     return false;
   2010 
   2011   SDValue VOp0 = V.getOperand(0);
   2012   unsigned InBits = VOp0.getValueSizeInBits();
   2013   unsigned Bits = V.getValueSizeInBits();
   2014   return DAG.MaskedValueIsZero(VOp0,
   2015                                APInt::getHighBitsSet(InBits, InBits - Bits));
   2016 }
   2017 
   2018 SDValue M68kTargetLowering::LowerSELECT(SDValue Op, SelectionDAG &DAG) const {
   2019   bool addTest = true;
   2020   SDValue Cond = Op.getOperand(0);
   2021   SDValue Op1 = Op.getOperand(1);
   2022   SDValue Op2 = Op.getOperand(2);
   2023   SDLoc DL(Op);
   2024   SDValue CC;
   2025 
   2026   if (Cond.getOpcode() == ISD::SETCC) {
   2027     if (SDValue NewCond = LowerSETCC(Cond, DAG))
   2028       Cond = NewCond;
   2029   }
   2030 
   2031   // (select (x == 0), -1, y) -> (sign_bit (x - 1)) | y
   2032   // (select (x == 0), y, -1) -> ~(sign_bit (x - 1)) | y
   2033   // (select (x != 0), y, -1) -> (sign_bit (x - 1)) | y
   2034   // (select (x != 0), -1, y) -> ~(sign_bit (x - 1)) | y
   2035   if (Cond.getOpcode() == M68kISD::SETCC &&
   2036       Cond.getOperand(1).getOpcode() == M68kISD::CMP &&
   2037       isNullConstant(Cond.getOperand(1).getOperand(0))) {
   2038     SDValue Cmp = Cond.getOperand(1);
   2039 
   2040     unsigned CondCode =
   2041         cast<ConstantSDNode>(Cond.getOperand(0))->getZExtValue();
   2042 
   2043     if ((isAllOnesConstant(Op1) || isAllOnesConstant(Op2)) &&
   2044         (CondCode == M68k::COND_EQ || CondCode == M68k::COND_NE)) {
   2045       SDValue Y = isAllOnesConstant(Op2) ? Op1 : Op2;
   2046 
   2047       SDValue CmpOp0 = Cmp.getOperand(1);
   2048       // Apply further optimizations for special cases
   2049       // (select (x != 0), -1, 0) -> neg & sbb
   2050       // (select (x == 0), 0, -1) -> neg & sbb
   2051       if (isNullConstant(Y) &&
   2052           (isAllOnesConstant(Op1) == (CondCode == M68k::COND_NE))) {
   2053 
   2054         SDVTList VTs = DAG.getVTList(CmpOp0.getValueType(), MVT::i32);
   2055 
   2056         SDValue Neg =
   2057             DAG.getNode(M68kISD::SUB, DL, VTs,
   2058                         DAG.getConstant(0, DL, CmpOp0.getValueType()), CmpOp0);
   2059 
   2060         SDValue Res = DAG.getNode(M68kISD::SETCC_CARRY, DL, Op.getValueType(),
   2061                                   DAG.getConstant(M68k::COND_CS, DL, MVT::i8),
   2062                                   SDValue(Neg.getNode(), 1));
   2063         return Res;
   2064       }
   2065 
   2066       Cmp = DAG.getNode(M68kISD::CMP, DL, MVT::i8,
   2067                         DAG.getConstant(1, DL, CmpOp0.getValueType()), CmpOp0);
   2068 
   2069       SDValue Res = // Res = 0 or -1.
   2070           DAG.getNode(M68kISD::SETCC_CARRY, DL, Op.getValueType(),
   2071                       DAG.getConstant(M68k::COND_CS, DL, MVT::i8), Cmp);
   2072 
   2073       if (isAllOnesConstant(Op1) != (CondCode == M68k::COND_EQ))
   2074         Res = DAG.getNOT(DL, Res, Res.getValueType());
   2075 
   2076       if (!isNullConstant(Op2))
   2077         Res = DAG.getNode(ISD::OR, DL, Res.getValueType(), Res, Y);
   2078       return Res;
   2079     }
   2080   }
   2081 
   2082   // Look past (and (setcc_carry (cmp ...)), 1).
   2083   if (Cond.getOpcode() == ISD::AND &&
   2084       Cond.getOperand(0).getOpcode() == M68kISD::SETCC_CARRY &&
   2085       isOneConstant(Cond.getOperand(1)))
   2086     Cond = Cond.getOperand(0);
   2087 
   2088   // If condition flag is set by a M68kISD::CMP, then use it as the condition
   2089   // setting operand in place of the M68kISD::SETCC.
   2090   unsigned CondOpcode = Cond.getOpcode();
   2091   if (CondOpcode == M68kISD::SETCC || CondOpcode == M68kISD::SETCC_CARRY) {
   2092     CC = Cond.getOperand(0);
   2093 
   2094     SDValue Cmp = Cond.getOperand(1);
   2095     unsigned Opc = Cmp.getOpcode();
   2096 
   2097     bool IllegalFPCMov = false;
   2098 
   2099     if ((isM68kLogicalCmp(Cmp) && !IllegalFPCMov) || Opc == M68kISD::BT) {
   2100       Cond = Cmp;
   2101       addTest = false;
   2102     }
   2103   } else if (CondOpcode == ISD::USUBO || CondOpcode == ISD::SSUBO ||
   2104              CondOpcode == ISD::UADDO || CondOpcode == ISD::SADDO ||
   2105              CondOpcode == ISD::UMULO || CondOpcode == ISD::SMULO) {
   2106     SDValue LHS = Cond.getOperand(0);
   2107     SDValue RHS = Cond.getOperand(1);
   2108     unsigned MxOpcode;
   2109     unsigned MxCond;
   2110     SDVTList VTs;
   2111     switch (CondOpcode) {
   2112     case ISD::UADDO:
   2113       MxOpcode = M68kISD::ADD;
   2114       MxCond = M68k::COND_CS;
   2115       break;
   2116     case ISD::SADDO:
   2117       MxOpcode = M68kISD::ADD;
   2118       MxCond = M68k::COND_VS;
   2119       break;
   2120     case ISD::USUBO:
   2121       MxOpcode = M68kISD::SUB;
   2122       MxCond = M68k::COND_CS;
   2123       break;
   2124     case ISD::SSUBO:
   2125       MxOpcode = M68kISD::SUB;
   2126       MxCond = M68k::COND_VS;
   2127       break;
   2128     case ISD::UMULO:
   2129       MxOpcode = M68kISD::UMUL;
   2130       MxCond = M68k::COND_VS;
   2131       break;
   2132     case ISD::SMULO:
   2133       MxOpcode = M68kISD::SMUL;
   2134       MxCond = M68k::COND_VS;
   2135       break;
   2136     default:
   2137       llvm_unreachable("unexpected overflowing operator");
   2138     }
   2139     if (CondOpcode == ISD::UMULO)
   2140       VTs = DAG.getVTList(LHS.getValueType(), LHS.getValueType(), MVT::i32);
   2141     else
   2142       VTs = DAG.getVTList(LHS.getValueType(), MVT::i32);
   2143 
   2144     SDValue MxOp = DAG.getNode(MxOpcode, DL, VTs, LHS, RHS);
   2145 
   2146     if (CondOpcode == ISD::UMULO)
   2147       Cond = MxOp.getValue(2);
   2148     else
   2149       Cond = MxOp.getValue(1);
   2150 
   2151     CC = DAG.getConstant(MxCond, DL, MVT::i8);
   2152     addTest = false;
   2153   }
   2154 
   2155   if (addTest) {
   2156     // Look past the truncate if the high bits are known zero.
   2157     if (isTruncWithZeroHighBitsInput(Cond, DAG))
   2158       Cond = Cond.getOperand(0);
   2159 
   2160     // We know the result of AND is compared against zero. Try to match
   2161     // it to BT.
   2162     if (Cond.getOpcode() == ISD::AND && Cond.hasOneUse()) {
   2163       if (SDValue NewSetCC = LowerToBT(Cond, ISD::SETNE, DL, DAG)) {
   2164         CC = NewSetCC.getOperand(0);
   2165         Cond = NewSetCC.getOperand(1);
   2166         addTest = false;
   2167       }
   2168     }
   2169   }
   2170 
   2171   if (addTest) {
   2172     CC = DAG.getConstant(M68k::COND_NE, DL, MVT::i8);
   2173     Cond = EmitTest(Cond, M68k::COND_NE, DL, DAG);
   2174   }
   2175 
   2176   // a <  b ? -1 :  0 -> RES = ~setcc_carry
   2177   // a <  b ?  0 : -1 -> RES = setcc_carry
   2178   // a >= b ? -1 :  0 -> RES = setcc_carry
   2179   // a >= b ?  0 : -1 -> RES = ~setcc_carry
   2180   if (Cond.getOpcode() == M68kISD::SUB) {
   2181     unsigned CondCode = cast<ConstantSDNode>(CC)->getZExtValue();
   2182 
   2183     if ((CondCode == M68k::COND_CC || CondCode == M68k::COND_CS) &&
   2184         (isAllOnesConstant(Op1) || isAllOnesConstant(Op2)) &&
   2185         (isNullConstant(Op1) || isNullConstant(Op2))) {
   2186       SDValue Res =
   2187           DAG.getNode(M68kISD::SETCC_CARRY, DL, Op.getValueType(),
   2188                       DAG.getConstant(M68k::COND_CS, DL, MVT::i8), Cond);
   2189       if (isAllOnesConstant(Op1) != (CondCode == M68k::COND_CS))
   2190         return DAG.getNOT(DL, Res, Res.getValueType());
   2191       return Res;
   2192     }
   2193   }
   2194 
   2195   // M68k doesn't have an i8 cmov. If both operands are the result of a
   2196   // truncate widen the cmov and push the truncate through. This avoids
   2197   // introducing a new branch during isel and doesn't add any extensions.
   2198   if (Op.getValueType() == MVT::i8 && Op1.getOpcode() == ISD::TRUNCATE &&
   2199       Op2.getOpcode() == ISD::TRUNCATE) {
   2200     SDValue T1 = Op1.getOperand(0), T2 = Op2.getOperand(0);
   2201     if (T1.getValueType() == T2.getValueType() &&
   2202         // Blacklist CopyFromReg to avoid partial register stalls.
   2203         T1.getOpcode() != ISD::CopyFromReg &&
   2204         T2.getOpcode() != ISD::CopyFromReg) {
   2205       SDVTList VTs = DAG.getVTList(T1.getValueType(), MVT::Glue);
   2206       SDValue Cmov = DAG.getNode(M68kISD::CMOV, DL, VTs, T2, T1, CC, Cond);
   2207       return DAG.getNode(ISD::TRUNCATE, DL, Op.getValueType(), Cmov);
   2208     }
   2209   }
   2210 
   2211   // M68kISD::CMOV means set the result (which is operand 1) to the RHS if
   2212   // condition is true.
   2213   SDVTList VTs = DAG.getVTList(Op.getValueType(), MVT::Glue);
   2214   SDValue Ops[] = {Op2, Op1, CC, Cond};
   2215   return DAG.getNode(M68kISD::CMOV, DL, VTs, Ops);
   2216 }
   2217 
   2218 /// Return true if node is an ISD::AND or ISD::OR of two M68k::SETcc nodes
   2219 /// each of which has no other use apart from the AND / OR.
   2220 static bool isAndOrOfSetCCs(SDValue Op, unsigned &Opc) {
   2221   Opc = Op.getOpcode();
   2222   if (Opc != ISD::OR && Opc != ISD::AND)
   2223     return false;
   2224   return (M68k::IsSETCC(Op.getOperand(0).getOpcode()) &&
   2225           Op.getOperand(0).hasOneUse() &&
   2226           M68k::IsSETCC(Op.getOperand(1).getOpcode()) &&
   2227           Op.getOperand(1).hasOneUse());
   2228 }
   2229 
   2230 /// Return true if node is an ISD::XOR of a M68kISD::SETCC and 1 and that the
   2231 /// SETCC node has a single use.
   2232 static bool isXor1OfSetCC(SDValue Op) {
   2233   if (Op.getOpcode() != ISD::XOR)
   2234     return false;
   2235   if (isOneConstant(Op.getOperand(1)))
   2236     return Op.getOperand(0).getOpcode() == M68kISD::SETCC &&
   2237            Op.getOperand(0).hasOneUse();
   2238   return false;
   2239 }
   2240 
   2241 SDValue M68kTargetLowering::LowerBRCOND(SDValue Op, SelectionDAG &DAG) const {
   2242   bool AddTest = true;
   2243   SDValue Chain = Op.getOperand(0);
   2244   SDValue Cond = Op.getOperand(1);
   2245   SDValue Dest = Op.getOperand(2);
   2246   SDLoc DL(Op);
   2247   SDValue CC;
   2248   bool Inverted = false;
   2249 
   2250   if (Cond.getOpcode() == ISD::SETCC) {
   2251     // Check for setcc([su]{add,sub}o == 0).
   2252     if (cast<CondCodeSDNode>(Cond.getOperand(2))->get() == ISD::SETEQ &&
   2253         isNullConstant(Cond.getOperand(1)) &&
   2254         Cond.getOperand(0).getResNo() == 1 &&
   2255         (Cond.getOperand(0).getOpcode() == ISD::SADDO ||
   2256          Cond.getOperand(0).getOpcode() == ISD::UADDO ||
   2257          Cond.getOperand(0).getOpcode() == ISD::SSUBO ||
   2258          Cond.getOperand(0).getOpcode() == ISD::USUBO)) {
   2259       Inverted = true;
   2260       Cond = Cond.getOperand(0);
   2261     } else {
   2262       if (SDValue NewCond = LowerSETCC(Cond, DAG))
   2263         Cond = NewCond;
   2264     }
   2265   }
   2266 
   2267   // Look pass (and (setcc_carry (cmp ...)), 1).
   2268   if (Cond.getOpcode() == ISD::AND &&
   2269       Cond.getOperand(0).getOpcode() == M68kISD::SETCC_CARRY &&
   2270       isOneConstant(Cond.getOperand(1)))
   2271     Cond = Cond.getOperand(0);
   2272 
   2273   // If condition flag is set by a M68kISD::CMP, then use it as the condition
   2274   // setting operand in place of the M68kISD::SETCC.
   2275   unsigned CondOpcode = Cond.getOpcode();
   2276   if (CondOpcode == M68kISD::SETCC || CondOpcode == M68kISD::SETCC_CARRY) {
   2277     CC = Cond.getOperand(0);
   2278 
   2279     SDValue Cmp = Cond.getOperand(1);
   2280     unsigned Opc = Cmp.getOpcode();
   2281 
   2282     if (isM68kLogicalCmp(Cmp) || Opc == M68kISD::BT) {
   2283       Cond = Cmp;
   2284       AddTest = false;
   2285     } else {
   2286       switch (cast<ConstantSDNode>(CC)->getZExtValue()) {
   2287       default:
   2288         break;
   2289       case M68k::COND_VS:
   2290       case M68k::COND_CS:
   2291         // These can only come from an arithmetic instruction with overflow,
   2292         // e.g. SADDO, UADDO.
   2293         Cond = Cond.getNode()->getOperand(1);
   2294         AddTest = false;
   2295         break;
   2296       }
   2297     }
   2298   }
   2299   CondOpcode = Cond.getOpcode();
   2300   if (CondOpcode == ISD::UADDO || CondOpcode == ISD::SADDO ||
   2301       CondOpcode == ISD::USUBO || CondOpcode == ISD::SSUBO) {
   2302     SDValue LHS = Cond.getOperand(0);
   2303     SDValue RHS = Cond.getOperand(1);
   2304     unsigned MxOpcode;
   2305     unsigned MxCond;
   2306     SDVTList VTs;
   2307     // Keep this in sync with LowerXALUO, otherwise we might create redundant
   2308     // instructions that can't be removed afterwards (i.e. M68kISD::ADD and
   2309     // M68kISD::INC).
   2310     switch (CondOpcode) {
   2311     case ISD::UADDO:
   2312       MxOpcode = M68kISD::ADD;
   2313       MxCond = M68k::COND_CS;
   2314       break;
   2315     case ISD::SADDO:
   2316       MxOpcode = M68kISD::ADD;
   2317       MxCond = M68k::COND_VS;
   2318       break;
   2319     case ISD::USUBO:
   2320       MxOpcode = M68kISD::SUB;
   2321       MxCond = M68k::COND_CS;
   2322       break;
   2323     case ISD::SSUBO:
   2324       MxOpcode = M68kISD::SUB;
   2325       MxCond = M68k::COND_VS;
   2326       break;
   2327     case ISD::UMULO:
   2328       MxOpcode = M68kISD::UMUL;
   2329       MxCond = M68k::COND_VS;
   2330       break;
   2331     case ISD::SMULO:
   2332       MxOpcode = M68kISD::SMUL;
   2333       MxCond = M68k::COND_VS;
   2334       break;
   2335     default:
   2336       llvm_unreachable("unexpected overflowing operator");
   2337     }
   2338 
   2339     if (Inverted)
   2340       MxCond = M68k::GetOppositeBranchCondition((M68k::CondCode)MxCond);
   2341 
   2342     if (CondOpcode == ISD::UMULO)
   2343       VTs = DAG.getVTList(LHS.getValueType(), LHS.getValueType(), MVT::i8);
   2344     else
   2345       VTs = DAG.getVTList(LHS.getValueType(), MVT::i8);
   2346 
   2347     SDValue MxOp = DAG.getNode(MxOpcode, DL, VTs, LHS, RHS);
   2348 
   2349     if (CondOpcode == ISD::UMULO)
   2350       Cond = MxOp.getValue(2);
   2351     else
   2352       Cond = MxOp.getValue(1);
   2353 
   2354     CC = DAG.getConstant(MxCond, DL, MVT::i8);
   2355     AddTest = false;
   2356   } else {
   2357     unsigned CondOpc;
   2358     if (Cond.hasOneUse() && isAndOrOfSetCCs(Cond, CondOpc)) {
   2359       SDValue Cmp = Cond.getOperand(0).getOperand(1);
   2360       if (CondOpc == ISD::OR) {
   2361         // Also, recognize the pattern generated by an FCMP_UNE. We can emit
   2362         // two branches instead of an explicit OR instruction with a
   2363         // separate test.
   2364         if (Cmp == Cond.getOperand(1).getOperand(1) && isM68kLogicalCmp(Cmp)) {
   2365           CC = Cond.getOperand(0).getOperand(0);
   2366           Chain = DAG.getNode(M68kISD::BRCOND, DL, Op.getValueType(), Chain,
   2367                               Dest, CC, Cmp);
   2368           CC = Cond.getOperand(1).getOperand(0);
   2369           Cond = Cmp;
   2370           AddTest = false;
   2371         }
   2372       } else { // ISD::AND
   2373         // Also, recognize the pattern generated by an FCMP_OEQ. We can emit
   2374         // two branches instead of an explicit AND instruction with a
   2375         // separate test. However, we only do this if this block doesn't
   2376         // have a fall-through edge, because this requires an explicit
   2377         // jmp when the condition is false.
   2378         if (Cmp == Cond.getOperand(1).getOperand(1) && isM68kLogicalCmp(Cmp) &&
   2379             Op.getNode()->hasOneUse()) {
   2380           M68k::CondCode CCode =
   2381               (M68k::CondCode)Cond.getOperand(0).getConstantOperandVal(0);
   2382           CCode = M68k::GetOppositeBranchCondition(CCode);
   2383           CC = DAG.getConstant(CCode, DL, MVT::i8);
   2384           SDNode *User = *Op.getNode()->use_begin();
   2385           // Look for an unconditional branch following this conditional branch.
   2386           // We need this because we need to reverse the successors in order
   2387           // to implement FCMP_OEQ.
   2388           if (User->getOpcode() == ISD::BR) {
   2389             SDValue FalseBB = User->getOperand(1);
   2390             SDNode *NewBR =
   2391                 DAG.UpdateNodeOperands(User, User->getOperand(0), Dest);
   2392             assert(NewBR == User);
   2393             (void)NewBR;
   2394             Dest = FalseBB;
   2395 
   2396             Chain = DAG.getNode(M68kISD::BRCOND, DL, Op.getValueType(), Chain,
   2397                                 Dest, CC, Cmp);
   2398             M68k::CondCode CCode =
   2399                 (M68k::CondCode)Cond.getOperand(1).getConstantOperandVal(0);
   2400             CCode = M68k::GetOppositeBranchCondition(CCode);
   2401             CC = DAG.getConstant(CCode, DL, MVT::i8);
   2402             Cond = Cmp;
   2403             AddTest = false;
   2404           }
   2405         }
   2406       }
   2407     } else if (Cond.hasOneUse() && isXor1OfSetCC(Cond)) {
   2408       // Recognize for xorb (setcc), 1 patterns. The xor inverts the condition.
   2409       // It should be transformed during dag combiner except when the condition
   2410       // is set by a arithmetics with overflow node.
   2411       M68k::CondCode CCode =
   2412           (M68k::CondCode)Cond.getOperand(0).getConstantOperandVal(0);
   2413       CCode = M68k::GetOppositeBranchCondition(CCode);
   2414       CC = DAG.getConstant(CCode, DL, MVT::i8);
   2415       Cond = Cond.getOperand(0).getOperand(1);
   2416       AddTest = false;
   2417     }
   2418   }
   2419 
   2420   if (AddTest) {
   2421     // Look pass the truncate if the high bits are known zero.
   2422     if (isTruncWithZeroHighBitsInput(Cond, DAG))
   2423       Cond = Cond.getOperand(0);
   2424 
   2425     // We know the result is compared against zero. Try to match it to BT.
   2426     if (Cond.hasOneUse()) {
   2427       if (SDValue NewSetCC = LowerToBT(Cond, ISD::SETNE, DL, DAG)) {
   2428         CC = NewSetCC.getOperand(0);
   2429         Cond = NewSetCC.getOperand(1);
   2430         AddTest = false;
   2431       }
   2432     }
   2433   }
   2434 
   2435   if (AddTest) {
   2436     M68k::CondCode MxCond = Inverted ? M68k::COND_EQ : M68k::COND_NE;
   2437     CC = DAG.getConstant(MxCond, DL, MVT::i8);
   2438     Cond = EmitTest(Cond, MxCond, DL, DAG);
   2439   }
   2440   return DAG.getNode(M68kISD::BRCOND, DL, Op.getValueType(), Chain, Dest, CC,
   2441                      Cond);
   2442 }
   2443 
   2444 SDValue M68kTargetLowering::LowerADDC_ADDE_SUBC_SUBE(SDValue Op,
   2445                                                      SelectionDAG &DAG) const {
   2446   MVT VT = Op.getNode()->getSimpleValueType(0);
   2447 
   2448   // Let legalize expand this if it isn't a legal type yet.
   2449   if (!DAG.getTargetLoweringInfo().isTypeLegal(VT))
   2450     return SDValue();
   2451 
   2452   SDVTList VTs = DAG.getVTList(VT, MVT::i8);
   2453 
   2454   unsigned Opc;
   2455   bool ExtraOp = false;
   2456   switch (Op.getOpcode()) {
   2457   default:
   2458     llvm_unreachable("Invalid code");
   2459   case ISD::ADDC:
   2460     Opc = M68kISD::ADD;
   2461     break;
   2462   case ISD::ADDE:
   2463     Opc = M68kISD::ADDX;
   2464     ExtraOp = true;
   2465     break;
   2466   case ISD::SUBC:
   2467     Opc = M68kISD::SUB;
   2468     break;
   2469   case ISD::SUBE:
   2470     Opc = M68kISD::SUBX;
   2471     ExtraOp = true;
   2472     break;
   2473   }
   2474 
   2475   if (!ExtraOp)
   2476     return DAG.getNode(Opc, SDLoc(Op), VTs, Op.getOperand(0), Op.getOperand(1));
   2477   return DAG.getNode(Opc, SDLoc(Op), VTs, Op.getOperand(0), Op.getOperand(1),
   2478                      Op.getOperand(2));
   2479 }
   2480 
   2481 // ConstantPool, JumpTable, GlobalAddress, and ExternalSymbol are lowered as
   2482 // their target countpart wrapped in the M68kISD::Wrapper node. Suppose N is
   2483 // one of the above mentioned nodes. It has to be wrapped because otherwise
   2484 // Select(N) returns N. So the raw TargetGlobalAddress nodes, etc. can only
   2485 // be used to form addressing mode. These wrapped nodes will be selected
   2486 // into MOV32ri.
   2487 SDValue M68kTargetLowering::LowerConstantPool(SDValue Op,
   2488                                               SelectionDAG &DAG) const {
   2489   ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(Op);
   2490 
   2491   // In PIC mode (unless we're in PCRel PIC mode) we add an offset to the
   2492   // global base reg.
   2493   unsigned char OpFlag = Subtarget.classifyLocalReference(nullptr);
   2494 
   2495   unsigned WrapperKind = M68kISD::Wrapper;
   2496   if (M68kII::isPCRelGlobalReference(OpFlag)) {
   2497     WrapperKind = M68kISD::WrapperPC;
   2498   }
   2499 
   2500   MVT PtrVT = getPointerTy(DAG.getDataLayout());
   2501   SDValue Result = DAG.getTargetConstantPool(
   2502       CP->getConstVal(), PtrVT, CP->getAlign(), CP->getOffset(), OpFlag);
   2503 
   2504   SDLoc DL(CP);
   2505   Result = DAG.getNode(WrapperKind, DL, PtrVT, Result);
   2506 
   2507   // With PIC, the address is actually $g + Offset.
   2508   if (M68kII::isGlobalRelativeToPICBase(OpFlag)) {
   2509     Result = DAG.getNode(ISD::ADD, DL, PtrVT,
   2510                          DAG.getNode(M68kISD::GLOBAL_BASE_REG, SDLoc(), PtrVT),
   2511                          Result);
   2512   }
   2513 
   2514   return Result;
   2515 }
   2516 
   2517 SDValue M68kTargetLowering::LowerExternalSymbol(SDValue Op,
   2518                                                 SelectionDAG &DAG) const {
   2519   const char *Sym = cast<ExternalSymbolSDNode>(Op)->getSymbol();
   2520 
   2521   // In PIC mode (unless we're in PCRel PIC mode) we add an offset to the
   2522   // global base reg.
   2523   const Module *Mod = DAG.getMachineFunction().getFunction().getParent();
   2524   unsigned char OpFlag = Subtarget.classifyExternalReference(*Mod);
   2525 
   2526   unsigned WrapperKind = M68kISD::Wrapper;
   2527   if (M68kII::isPCRelGlobalReference(OpFlag)) {
   2528     WrapperKind = M68kISD::WrapperPC;
   2529   }
   2530 
   2531   auto PtrVT = getPointerTy(DAG.getDataLayout());
   2532   SDValue Result = DAG.getTargetExternalSymbol(Sym, PtrVT, OpFlag);
   2533 
   2534   SDLoc DL(Op);
   2535   Result = DAG.getNode(WrapperKind, DL, PtrVT, Result);
   2536 
   2537   // With PIC, the address is actually $g + Offset.
   2538   if (M68kII::isGlobalRelativeToPICBase(OpFlag)) {
   2539     Result = DAG.getNode(ISD::ADD, DL, PtrVT,
   2540                          DAG.getNode(M68kISD::GLOBAL_BASE_REG, SDLoc(), PtrVT),
   2541                          Result);
   2542   }
   2543 
   2544   // For symbols that require a load from a stub to get the address, emit the
   2545   // load.
   2546   if (M68kII::isGlobalStubReference(OpFlag)) {
   2547     Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Result,
   2548                          MachinePointerInfo::getGOT(DAG.getMachineFunction()));
   2549   }
   2550 
   2551   return Result;
   2552 }
   2553 
   2554 SDValue M68kTargetLowering::LowerBlockAddress(SDValue Op,
   2555                                               SelectionDAG &DAG) const {
   2556   unsigned char OpFlags = Subtarget.classifyBlockAddressReference();
   2557   const BlockAddress *BA = cast<BlockAddressSDNode>(Op)->getBlockAddress();
   2558   int64_t Offset = cast<BlockAddressSDNode>(Op)->getOffset();
   2559   SDLoc DL(Op);
   2560   auto PtrVT = getPointerTy(DAG.getDataLayout());
   2561 
   2562   // Create the TargetBlockAddressAddress node.
   2563   SDValue Result = DAG.getTargetBlockAddress(BA, PtrVT, Offset, OpFlags);
   2564 
   2565   if (M68kII::isPCRelBlockReference(OpFlags)) {
   2566     Result = DAG.getNode(M68kISD::WrapperPC, DL, PtrVT, Result);
   2567   } else {
   2568     Result = DAG.getNode(M68kISD::Wrapper, DL, PtrVT, Result);
   2569   }
   2570 
   2571   // With PIC, the address is actually $g + Offset.
   2572   if (M68kII::isGlobalRelativeToPICBase(OpFlags)) {
   2573     Result =
   2574         DAG.getNode(ISD::ADD, DL, PtrVT,
   2575                     DAG.getNode(M68kISD::GLOBAL_BASE_REG, DL, PtrVT), Result);
   2576   }
   2577 
   2578   return Result;
   2579 }
   2580 
   2581 SDValue M68kTargetLowering::LowerGlobalAddress(const GlobalValue *GV,
   2582                                                const SDLoc &DL, int64_t Offset,
   2583                                                SelectionDAG &DAG) const {
   2584   unsigned char OpFlags = Subtarget.classifyGlobalReference(GV);
   2585   auto PtrVT = getPointerTy(DAG.getDataLayout());
   2586 
   2587   // Create the TargetGlobalAddress node, folding in the constant
   2588   // offset if it is legal.
   2589   SDValue Result;
   2590   if (M68kII::isDirectGlobalReference(OpFlags)) {
   2591     Result = DAG.getTargetGlobalAddress(GV, DL, PtrVT, Offset);
   2592     Offset = 0;
   2593   } else {
   2594     Result = DAG.getTargetGlobalAddress(GV, DL, PtrVT, 0, OpFlags);
   2595   }
   2596 
   2597   if (M68kII::isPCRelGlobalReference(OpFlags))
   2598     Result = DAG.getNode(M68kISD::WrapperPC, DL, PtrVT, Result);
   2599   else
   2600     Result = DAG.getNode(M68kISD::Wrapper, DL, PtrVT, Result);
   2601 
   2602   // With PIC, the address is actually $g + Offset.
   2603   if (M68kII::isGlobalRelativeToPICBase(OpFlags)) {
   2604     Result =
   2605         DAG.getNode(ISD::ADD, DL, PtrVT,
   2606                     DAG.getNode(M68kISD::GLOBAL_BASE_REG, DL, PtrVT), Result);
   2607   }
   2608 
   2609   // For globals that require a load from a stub to get the address, emit the
   2610   // load.
   2611   if (M68kII::isGlobalStubReference(OpFlags)) {
   2612     Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Result,
   2613                          MachinePointerInfo::getGOT(DAG.getMachineFunction()));
   2614   }
   2615 
   2616   // If there was a non-zero offset that we didn't fold, create an explicit
   2617   // addition for it.
   2618   if (Offset != 0) {
   2619     Result = DAG.getNode(ISD::ADD, DL, PtrVT, Result,
   2620                          DAG.getConstant(Offset, DL, PtrVT));
   2621   }
   2622 
   2623   return Result;
   2624 }
   2625 
   2626 SDValue M68kTargetLowering::LowerGlobalAddress(SDValue Op,
   2627                                                SelectionDAG &DAG) const {
   2628   const GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
   2629   int64_t Offset = cast<GlobalAddressSDNode>(Op)->getOffset();
   2630   return LowerGlobalAddress(GV, SDLoc(Op), Offset, DAG);
   2631 }
   2632 
   2633 //===----------------------------------------------------------------------===//
   2634 // Custom Lower Jump Table
   2635 //===----------------------------------------------------------------------===//
   2636 
   2637 SDValue M68kTargetLowering::LowerJumpTable(SDValue Op,
   2638                                            SelectionDAG &DAG) const {
   2639   JumpTableSDNode *JT = cast<JumpTableSDNode>(Op);
   2640 
   2641   // In PIC mode (unless we're in PCRel PIC mode) we add an offset to the
   2642   // global base reg.
   2643   unsigned char OpFlag = Subtarget.classifyLocalReference(nullptr);
   2644 
   2645   unsigned WrapperKind = M68kISD::Wrapper;
   2646   if (M68kII::isPCRelGlobalReference(OpFlag)) {
   2647     WrapperKind = M68kISD::WrapperPC;
   2648   }
   2649 
   2650   auto PtrVT = getPointerTy(DAG.getDataLayout());
   2651   SDValue Result = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, OpFlag);
   2652   SDLoc DL(JT);
   2653   Result = DAG.getNode(WrapperKind, DL, PtrVT, Result);
   2654 
   2655   // With PIC, the address is actually $g + Offset.
   2656   if (M68kII::isGlobalRelativeToPICBase(OpFlag)) {
   2657     Result = DAG.getNode(ISD::ADD, DL, PtrVT,
   2658                          DAG.getNode(M68kISD::GLOBAL_BASE_REG, SDLoc(), PtrVT),
   2659                          Result);
   2660   }
   2661 
   2662   return Result;
   2663 }
   2664 
   2665 unsigned M68kTargetLowering::getJumpTableEncoding() const {
   2666   return Subtarget.getJumpTableEncoding();
   2667 }
   2668 
   2669 const MCExpr *M68kTargetLowering::LowerCustomJumpTableEntry(
   2670     const MachineJumpTableInfo *MJTI, const MachineBasicBlock *MBB,
   2671     unsigned uid, MCContext &Ctx) const {
   2672   return MCSymbolRefExpr::create(MBB->getSymbol(), MCSymbolRefExpr::VK_GOTOFF,
   2673                                  Ctx);
   2674 }
   2675 
   2676 SDValue M68kTargetLowering::getPICJumpTableRelocBase(SDValue Table,
   2677                                                      SelectionDAG &DAG) const {
   2678   if (getJumpTableEncoding() == MachineJumpTableInfo::EK_Custom32)
   2679     return DAG.getNode(M68kISD::GLOBAL_BASE_REG, SDLoc(),
   2680                        getPointerTy(DAG.getDataLayout()));
   2681 
   2682   // MachineJumpTableInfo::EK_LabelDifference32 entry
   2683   return Table;
   2684 }
   2685 
   2686 // NOTE This only used for MachineJumpTableInfo::EK_LabelDifference32 entries
   2687 const MCExpr *M68kTargetLowering::getPICJumpTableRelocBaseExpr(
   2688     const MachineFunction *MF, unsigned JTI, MCContext &Ctx) const {
   2689   return MCSymbolRefExpr::create(MF->getJTISymbol(JTI, Ctx), Ctx);
   2690 }
   2691 
   2692 M68kTargetLowering::ConstraintType
   2693 M68kTargetLowering::getConstraintType(StringRef Constraint) const {
   2694   if (Constraint.size() > 0) {
   2695     switch (Constraint[0]) {
   2696     case 'a':
   2697     case 'd':
   2698       return C_RegisterClass;
   2699     case 'I':
   2700     case 'J':
   2701     case 'K':
   2702     case 'L':
   2703     case 'M':
   2704     case 'N':
   2705     case 'O':
   2706     case 'P':
   2707       return C_Immediate;
   2708     case 'C':
   2709       if (Constraint.size() == 2)
   2710         switch (Constraint[1]) {
   2711         case '0':
   2712         case 'i':
   2713         case 'j':
   2714           return C_Immediate;
   2715         default:
   2716           break;
   2717         }
   2718       break;
   2719     default:
   2720       break;
   2721     }
   2722   }
   2723 
   2724   return TargetLowering::getConstraintType(Constraint);
   2725 }
   2726 
   2727 void M68kTargetLowering::LowerAsmOperandForConstraint(SDValue Op,
   2728                                                       std::string &Constraint,
   2729                                                       std::vector<SDValue> &Ops,
   2730                                                       SelectionDAG &DAG) const {
   2731   SDValue Result;
   2732 
   2733   if (Constraint.size() == 1) {
   2734     // Constant constraints
   2735     switch (Constraint[0]) {
   2736     case 'I':
   2737     case 'J':
   2738     case 'K':
   2739     case 'L':
   2740     case 'M':
   2741     case 'N':
   2742     case 'O':
   2743     case 'P': {
   2744       auto *C = dyn_cast<ConstantSDNode>(Op);
   2745       if (!C)
   2746         return;
   2747 
   2748       int64_t Val = C->getSExtValue();
   2749       switch (Constraint[0]) {
   2750       case 'I': // constant integer in the range [1,8]
   2751         if (Val > 0 && Val <= 8)
   2752           break;
   2753         return;
   2754       case 'J': // constant signed 16-bit integer
   2755         if (isInt<16>(Val))
   2756           break;
   2757         return;
   2758       case 'K': // constant that is NOT in the range of [-0x80, 0x80)
   2759         if (Val < -0x80 || Val >= 0x80)
   2760           break;
   2761         return;
   2762       case 'L': // constant integer in the range [-8,-1]
   2763         if (Val < 0 && Val >= -8)
   2764           break;
   2765         return;
   2766       case 'M': // constant that is NOT in the range of [-0x100, 0x100]
   2767         if (Val < -0x100 || Val >= 0x100)
   2768           break;
   2769         return;
   2770       case 'N': // constant integer in the range [24,31]
   2771         if (Val >= 24 && Val <= 31)
   2772           break;
   2773         return;
   2774       case 'O': // constant integer 16
   2775         if (Val == 16)
   2776           break;
   2777         return;
   2778       case 'P': // constant integer in the range [8,15]
   2779         if (Val >= 8 && Val <= 15)
   2780           break;
   2781         return;
   2782       default:
   2783         llvm_unreachable("Unhandled constant constraint");
   2784       }
   2785 
   2786       Result = DAG.getTargetConstant(Val, SDLoc(Op), Op.getValueType());
   2787       break;
   2788     }
   2789     default:
   2790       break;
   2791     }
   2792   }
   2793 
   2794   if (Constraint.size() == 2) {
   2795     switch (Constraint[0]) {
   2796     case 'C':
   2797       // Constant constraints start with 'C'
   2798       switch (Constraint[1]) {
   2799       case '0':
   2800       case 'i':
   2801       case 'j': {
   2802         auto *C = dyn_cast<ConstantSDNode>(Op);
   2803         if (!C)
   2804           break;
   2805 
   2806         int64_t Val = C->getSExtValue();
   2807         switch (Constraint[1]) {
   2808         case '0': // constant integer 0
   2809           if (!Val)
   2810             break;
   2811           return;
   2812         case 'i': // constant integer
   2813           break;
   2814         case 'j': // integer constant that doesn't fit in 16 bits
   2815           if (!isInt<16>(C->getSExtValue()))
   2816             break;
   2817           return;
   2818         default:
   2819           llvm_unreachable("Unhandled constant constraint");
   2820         }
   2821 
   2822         Result = DAG.getTargetConstant(Val, SDLoc(Op), Op.getValueType());
   2823         break;
   2824       }
   2825       default:
   2826         break;
   2827       }
   2828       break;
   2829     default:
   2830       break;
   2831     }
   2832   }
   2833 
   2834   if (Result.getNode()) {
   2835     Ops.push_back(Result);
   2836     return;
   2837   }
   2838 
   2839   TargetLowering::LowerAsmOperandForConstraint(Op, Constraint, Ops, DAG);
   2840 }
   2841 
   2842 std::pair<unsigned, const TargetRegisterClass *>
   2843 M68kTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
   2844                                                  StringRef Constraint,
   2845                                                  MVT VT) const {
   2846   if (Constraint.size() == 1) {
   2847     switch (Constraint[0]) {
   2848     case 'r':
   2849     case 'd':
   2850       switch (VT.SimpleTy) {
   2851       case MVT::i8:
   2852         return std::make_pair(0U, &M68k::DR8RegClass);
   2853       case MVT::i16:
   2854         return std::make_pair(0U, &M68k::DR16RegClass);
   2855       case MVT::i32:
   2856         return std::make_pair(0U, &M68k::DR32RegClass);
   2857       default:
   2858         break;
   2859       }
   2860       break;
   2861     case 'a':
   2862       switch (VT.SimpleTy) {
   2863       case MVT::i16:
   2864         return std::make_pair(0U, &M68k::AR16RegClass);
   2865       case MVT::i32:
   2866         return std::make_pair(0U, &M68k::AR32RegClass);
   2867       default:
   2868         break;
   2869       }
   2870       break;
   2871     default:
   2872       break;
   2873     }
   2874   }
   2875 
   2876   return TargetLowering::getRegForInlineAsmConstraint(TRI, Constraint, VT);
   2877 }
   2878 
   2879 /// Determines whether the callee is required to pop its own arguments.
   2880 /// Callee pop is necessary to support tail calls.
   2881 bool M68k::isCalleePop(CallingConv::ID CallingConv, bool IsVarArg,
   2882                        bool GuaranteeTCO) {
   2883   return false;
   2884 }
   2885 
   2886 // Return true if it is OK for this CMOV pseudo-opcode to be cascaded
   2887 // together with other CMOV pseudo-opcodes into a single basic-block with
   2888 // conditional jump around it.
   2889 static bool isCMOVPseudo(MachineInstr &MI) {
   2890   switch (MI.getOpcode()) {
   2891   case M68k::CMOV8d:
   2892   case M68k::CMOV16d:
   2893   case M68k::CMOV32r:
   2894     return true;
   2895 
   2896   default:
   2897     return false;
   2898   }
   2899 }
   2900 
   2901 // The CCR operand of SelectItr might be missing a kill marker
   2902 // because there were multiple uses of CCR, and ISel didn't know
   2903 // which to mark. Figure out whether SelectItr should have had a
   2904 // kill marker, and set it if it should. Returns the correct kill
   2905 // marker value.
   2906 static bool checkAndUpdateCCRKill(MachineBasicBlock::iterator SelectItr,
   2907                                   MachineBasicBlock *BB,
   2908                                   const TargetRegisterInfo *TRI) {
   2909   // Scan forward through BB for a use/def of CCR.
   2910   MachineBasicBlock::iterator miI(std::next(SelectItr));
   2911   for (MachineBasicBlock::iterator miE = BB->end(); miI != miE; ++miI) {
   2912     const MachineInstr &mi = *miI;
   2913     if (mi.readsRegister(M68k::CCR))
   2914       return false;
   2915     if (mi.definesRegister(M68k::CCR))
   2916       break; // Should have kill-flag - update below.
   2917   }
   2918 
   2919   // If we hit the end of the block, check whether CCR is live into a
   2920   // successor.
   2921   if (miI == BB->end())
   2922     for (const auto *SBB : BB->successors())
   2923       if (SBB->isLiveIn(M68k::CCR))
   2924         return false;
   2925 
   2926   // We found a def, or hit the end of the basic block and CCR wasn't live
   2927   // out. SelectMI should have a kill flag on CCR.
   2928   SelectItr->addRegisterKilled(M68k::CCR, TRI);
   2929   return true;
   2930 }
   2931 
   2932 MachineBasicBlock *
   2933 M68kTargetLowering::EmitLoweredSelect(MachineInstr &MI,
   2934                                       MachineBasicBlock *MBB) const {
   2935   const TargetInstrInfo *TII = Subtarget.getInstrInfo();
   2936   DebugLoc DL = MI.getDebugLoc();
   2937 
   2938   // To "insert" a SELECT_CC instruction, we actually have to insert the
   2939   // diamond control-flow pattern.  The incoming instruction knows the
   2940   // destination vreg to set, the condition code register to branch on, the
   2941   // true/false values to select between, and a branch opcode to use.
   2942   const BasicBlock *BB = MBB->getBasicBlock();
   2943   MachineFunction::iterator It = ++MBB->getIterator();
   2944 
   2945   //  ThisMBB:
   2946   //  ...
   2947   //   TrueVal = ...
   2948   //   cmp ccX, r1, r2
   2949   //   bcc Copy1MBB
   2950   //   fallthrough --> Copy0MBB
   2951   MachineBasicBlock *ThisMBB = MBB;
   2952   MachineFunction *F = MBB->getParent();
   2953 
   2954   // This code lowers all pseudo-CMOV instructions. Generally it lowers these
   2955   // as described above, by inserting a MBB, and then making a PHI at the join
   2956   // point to select the true and false operands of the CMOV in the PHI.
   2957   //
   2958   // The code also handles two different cases of multiple CMOV opcodes
   2959   // in a row.
   2960   //
   2961   // Case 1:
   2962   // In this case, there are multiple CMOVs in a row, all which are based on
   2963   // the same condition setting (or the exact opposite condition setting).
   2964   // In this case we can lower all the CMOVs using a single inserted MBB, and
   2965   // then make a number of PHIs at the join point to model the CMOVs. The only
   2966   // trickiness here, is that in a case like:
   2967   //
   2968   // t2 = CMOV cond1 t1, f1
   2969   // t3 = CMOV cond1 t2, f2
   2970   //
   2971   // when rewriting this into PHIs, we have to perform some renaming on the
   2972   // temps since you cannot have a PHI operand refer to a PHI result earlier
   2973   // in the same block.  The "simple" but wrong lowering would be:
   2974   //
   2975   // t2 = PHI t1(BB1), f1(BB2)
   2976   // t3 = PHI t2(BB1), f2(BB2)
   2977   //
   2978   // but clearly t2 is not defined in BB1, so that is incorrect. The proper
   2979   // renaming is to note that on the path through BB1, t2 is really just a
   2980   // copy of t1, and do that renaming, properly generating:
   2981   //
   2982   // t2 = PHI t1(BB1), f1(BB2)
   2983   // t3 = PHI t1(BB1), f2(BB2)
   2984   //
   2985   // Case 2, we lower cascaded CMOVs such as
   2986   //
   2987   //   (CMOV (CMOV F, T, cc1), T, cc2)
   2988   //
   2989   // to two successives branches.
   2990   MachineInstr *CascadedCMOV = nullptr;
   2991   MachineInstr *LastCMOV = &MI;
   2992   M68k::CondCode CC = M68k::CondCode(MI.getOperand(3).getImm());
   2993   M68k::CondCode OppCC = M68k::GetOppositeBranchCondition(CC);
   2994   MachineBasicBlock::iterator NextMIIt =
   2995       std::next(MachineBasicBlock::iterator(MI));
   2996 
   2997   // Check for case 1, where there are multiple CMOVs with the same condition
   2998   // first.  Of the two cases of multiple CMOV lowerings, case 1 reduces the
   2999   // number of jumps the most.
   3000 
   3001   if (isCMOVPseudo(MI)) {
   3002     // See if we have a string of CMOVS with the same condition.
   3003     while (NextMIIt != MBB->end() && isCMOVPseudo(*NextMIIt) &&
   3004            (NextMIIt->getOperand(3).getImm() == CC ||
   3005             NextMIIt->getOperand(3).getImm() == OppCC)) {
   3006       LastCMOV = &*NextMIIt;
   3007       ++NextMIIt;
   3008     }
   3009   }
   3010 
   3011   // This checks for case 2, but only do this if we didn't already find
   3012   // case 1, as indicated by LastCMOV == MI.
   3013   if (LastCMOV == &MI && NextMIIt != MBB->end() &&
   3014       NextMIIt->getOpcode() == MI.getOpcode() &&
   3015       NextMIIt->getOperand(2).getReg() == MI.getOperand(2).getReg() &&
   3016       NextMIIt->getOperand(1).getReg() == MI.getOperand(0).getReg() &&
   3017       NextMIIt->getOperand(1).isKill()) {
   3018     CascadedCMOV = &*NextMIIt;
   3019   }
   3020 
   3021   MachineBasicBlock *Jcc1MBB = nullptr;
   3022 
   3023   // If we have a cascaded CMOV, we lower it to two successive branches to
   3024   // the same block.  CCR is used by both, so mark it as live in the second.
   3025   if (CascadedCMOV) {
   3026     Jcc1MBB = F->CreateMachineBasicBlock(BB);
   3027     F->insert(It, Jcc1MBB);
   3028     Jcc1MBB->addLiveIn(M68k::CCR);
   3029   }
   3030 
   3031   MachineBasicBlock *Copy0MBB = F->CreateMachineBasicBlock(BB);
   3032   MachineBasicBlock *SinkMBB = F->CreateMachineBasicBlock(BB);
   3033   F->insert(It, Copy0MBB);
   3034   F->insert(It, SinkMBB);
   3035 
   3036   // If the CCR register isn't dead in the terminator, then claim that it's
   3037   // live into the sink and copy blocks.
   3038   const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
   3039 
   3040   MachineInstr *LastCCRSUser = CascadedCMOV ? CascadedCMOV : LastCMOV;
   3041   if (!LastCCRSUser->killsRegister(M68k::CCR) &&
   3042       !checkAndUpdateCCRKill(LastCCRSUser, MBB, TRI)) {
   3043     Copy0MBB->addLiveIn(M68k::CCR);
   3044     SinkMBB->addLiveIn(M68k::CCR);
   3045   }
   3046 
   3047   // Transfer the remainder of MBB and its successor edges to SinkMBB.
   3048   SinkMBB->splice(SinkMBB->begin(), MBB,
   3049                   std::next(MachineBasicBlock::iterator(LastCMOV)), MBB->end());
   3050   SinkMBB->transferSuccessorsAndUpdatePHIs(MBB);
   3051 
   3052   // Add the true and fallthrough blocks as its successors.
   3053   if (CascadedCMOV) {
   3054     // The fallthrough block may be Jcc1MBB, if we have a cascaded CMOV.
   3055     MBB->addSuccessor(Jcc1MBB);
   3056 
   3057     // In that case, Jcc1MBB will itself fallthrough the Copy0MBB, and
   3058     // jump to the SinkMBB.
   3059     Jcc1MBB->addSuccessor(Copy0MBB);
   3060     Jcc1MBB->addSuccessor(SinkMBB);
   3061   } else {
   3062     MBB->addSuccessor(Copy0MBB);
   3063   }
   3064 
   3065   // The true block target of the first (or only) branch is always SinkMBB.
   3066   MBB->addSuccessor(SinkMBB);
   3067 
   3068   // Create the conditional branch instruction.
   3069   unsigned Opc = M68k::GetCondBranchFromCond(CC);
   3070   BuildMI(MBB, DL, TII->get(Opc)).addMBB(SinkMBB);
   3071 
   3072   if (CascadedCMOV) {
   3073     unsigned Opc2 = M68k::GetCondBranchFromCond(
   3074         (M68k::CondCode)CascadedCMOV->getOperand(3).getImm());
   3075     BuildMI(Jcc1MBB, DL, TII->get(Opc2)).addMBB(SinkMBB);
   3076   }
   3077 
   3078   //  Copy0MBB:
   3079   //   %FalseValue = ...
   3080   //   # fallthrough to SinkMBB
   3081   Copy0MBB->addSuccessor(SinkMBB);
   3082 
   3083   //  SinkMBB:
   3084   //   %Result = phi [ %FalseValue, Copy0MBB ], [ %TrueValue, ThisMBB ]
   3085   //  ...
   3086   MachineBasicBlock::iterator MIItBegin = MachineBasicBlock::iterator(MI);
   3087   MachineBasicBlock::iterator MIItEnd =
   3088       std::next(MachineBasicBlock::iterator(LastCMOV));
   3089   MachineBasicBlock::iterator SinkInsertionPoint = SinkMBB->begin();
   3090   DenseMap<unsigned, std::pair<unsigned, unsigned>> RegRewriteTable;
   3091   MachineInstrBuilder MIB;
   3092 
   3093   // As we are creating the PHIs, we have to be careful if there is more than
   3094   // one.  Later CMOVs may reference the results of earlier CMOVs, but later
   3095   // PHIs have to reference the individual true/false inputs from earlier PHIs.
   3096   // That also means that PHI construction must work forward from earlier to
   3097   // later, and that the code must maintain a mapping from earlier PHI's
   3098   // destination registers, and the registers that went into the PHI.
   3099 
   3100   for (MachineBasicBlock::iterator MIIt = MIItBegin; MIIt != MIItEnd; ++MIIt) {
   3101     unsigned DestReg = MIIt->getOperand(0).getReg();
   3102     unsigned Op1Reg = MIIt->getOperand(1).getReg();
   3103     unsigned Op2Reg = MIIt->getOperand(2).getReg();
   3104 
   3105     // If this CMOV we are generating is the opposite condition from
   3106     // the jump we generated, then we have to swap the operands for the
   3107     // PHI that is going to be generated.
   3108     if (MIIt->getOperand(3).getImm() == OppCC)
   3109       std::swap(Op1Reg, Op2Reg);
   3110 
   3111     if (RegRewriteTable.find(Op1Reg) != RegRewriteTable.end())
   3112       Op1Reg = RegRewriteTable[Op1Reg].first;
   3113 
   3114     if (RegRewriteTable.find(Op2Reg) != RegRewriteTable.end())
   3115       Op2Reg = RegRewriteTable[Op2Reg].second;
   3116 
   3117     MIB =
   3118         BuildMI(*SinkMBB, SinkInsertionPoint, DL, TII->get(M68k::PHI), DestReg)
   3119             .addReg(Op1Reg)
   3120             .addMBB(Copy0MBB)
   3121             .addReg(Op2Reg)
   3122             .addMBB(ThisMBB);
   3123 
   3124     // Add this PHI to the rewrite table.
   3125     RegRewriteTable[DestReg] = std::make_pair(Op1Reg, Op2Reg);
   3126   }
   3127 
   3128   // If we have a cascaded CMOV, the second Jcc provides the same incoming
   3129   // value as the first Jcc (the True operand of the SELECT_CC/CMOV nodes).
   3130   if (CascadedCMOV) {
   3131     MIB.addReg(MI.getOperand(2).getReg()).addMBB(Jcc1MBB);
   3132     // Copy the PHI result to the register defined by the second CMOV.
   3133     BuildMI(*SinkMBB, std::next(MachineBasicBlock::iterator(MIB.getInstr())),
   3134             DL, TII->get(TargetOpcode::COPY),
   3135             CascadedCMOV->getOperand(0).getReg())
   3136         .addReg(MI.getOperand(0).getReg());
   3137     CascadedCMOV->eraseFromParent();
   3138   }
   3139 
   3140   // Now remove the CMOV(s).
   3141   for (MachineBasicBlock::iterator MIIt = MIItBegin; MIIt != MIItEnd;)
   3142     (MIIt++)->eraseFromParent();
   3143 
   3144   return SinkMBB;
   3145 }
   3146 
   3147 MachineBasicBlock *
   3148 M68kTargetLowering::EmitLoweredSegAlloca(MachineInstr &MI,
   3149                                          MachineBasicBlock *BB) const {
   3150   llvm_unreachable("Cannot lower Segmented Stack Alloca with stack-split on");
   3151 }
   3152 
   3153 MachineBasicBlock *
   3154 M68kTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
   3155                                                 MachineBasicBlock *BB) const {
   3156   switch (MI.getOpcode()) {
   3157   default:
   3158     llvm_unreachable("Unexpected instr type to insert");
   3159   case M68k::CMOV8d:
   3160   case M68k::CMOV16d:
   3161   case M68k::CMOV32r:
   3162     return EmitLoweredSelect(MI, BB);
   3163   case M68k::SALLOCA:
   3164     return EmitLoweredSegAlloca(MI, BB);
   3165   }
   3166 }
   3167 
   3168 SDValue M68kTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
   3169   MachineFunction &MF = DAG.getMachineFunction();
   3170   auto PtrVT = getPointerTy(MF.getDataLayout());
   3171   M68kMachineFunctionInfo *FuncInfo = MF.getInfo<M68kMachineFunctionInfo>();
   3172 
   3173   const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
   3174   SDLoc DL(Op);
   3175 
   3176   // vastart just stores the address of the VarArgsFrameIndex slot into the
   3177   // memory location argument.
   3178   SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
   3179   return DAG.getStore(Op.getOperand(0), DL, FR, Op.getOperand(1),
   3180                       MachinePointerInfo(SV));
   3181 }
   3182 
   3183 // Lower dynamic stack allocation to _alloca call for Cygwin/Mingw targets.
   3184 // Calls to _alloca are needed to probe the stack when allocating more than 4k
   3185 // bytes in one go. Touching the stack at 4K increments is necessary to ensure
   3186 // that the guard pages used by the OS virtual memory manager are allocated in
   3187 // correct sequence.
   3188 SDValue M68kTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
   3189                                                     SelectionDAG &DAG) const {
   3190   MachineFunction &MF = DAG.getMachineFunction();
   3191   bool SplitStack = MF.shouldSplitStack();
   3192 
   3193   SDLoc DL(Op);
   3194 
   3195   // Get the inputs.
   3196   SDNode *Node = Op.getNode();
   3197   SDValue Chain = Op.getOperand(0);
   3198   SDValue Size = Op.getOperand(1);
   3199   unsigned Align = cast<ConstantSDNode>(Op.getOperand(2))->getZExtValue();
   3200   EVT VT = Node->getValueType(0);
   3201 
   3202   // Chain the dynamic stack allocation so that it doesn't modify the stack
   3203   // pointer when other instructions are using the stack.
   3204   Chain = DAG.getCALLSEQ_START(Chain, 0, 0, DL);
   3205 
   3206   SDValue Result;
   3207   if (SplitStack) {
   3208     auto &MRI = MF.getRegInfo();
   3209     auto SPTy = getPointerTy(DAG.getDataLayout());
   3210     auto *ARClass = getRegClassFor(SPTy);
   3211     unsigned Vreg = MRI.createVirtualRegister(ARClass);
   3212     Chain = DAG.getCopyToReg(Chain, DL, Vreg, Size);
   3213     Result = DAG.getNode(M68kISD::SEG_ALLOCA, DL, SPTy, Chain,
   3214                          DAG.getRegister(Vreg, SPTy));
   3215   } else {
   3216     auto &TLI = DAG.getTargetLoweringInfo();
   3217     unsigned SPReg = TLI.getStackPointerRegisterToSaveRestore();
   3218     assert(SPReg && "Target cannot require DYNAMIC_STACKALLOC expansion and"
   3219                     " not tell us which reg is the stack pointer!");
   3220 
   3221     SDValue SP = DAG.getCopyFromReg(Chain, DL, SPReg, VT);
   3222     Chain = SP.getValue(1);
   3223     const TargetFrameLowering &TFI = *Subtarget.getFrameLowering();
   3224     unsigned StackAlign = TFI.getStackAlignment();
   3225     Result = DAG.getNode(ISD::SUB, DL, VT, SP, Size); // Value
   3226     if (Align > StackAlign)
   3227       Result = DAG.getNode(ISD::AND, DL, VT, Result,
   3228                            DAG.getConstant(-(uint64_t)Align, DL, VT));
   3229     Chain = DAG.getCopyToReg(Chain, DL, SPReg, Result); // Output chain
   3230   }
   3231 
   3232   Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(0, DL, true),
   3233                              DAG.getIntPtrConstant(0, DL, true), SDValue(), DL);
   3234 
   3235   SDValue Ops[2] = {Result, Chain};
   3236   return DAG.getMergeValues(Ops, DL);
   3237 }
   3238 
   3239 //===----------------------------------------------------------------------===//
   3240 // DAG Combine
   3241 //===----------------------------------------------------------------------===//
   3242 
   3243 static SDValue getSETCC(M68k::CondCode Cond, SDValue CCR, const SDLoc &dl,
   3244                         SelectionDAG &DAG) {
   3245   return DAG.getNode(M68kISD::SETCC, dl, MVT::i8,
   3246                      DAG.getConstant(Cond, dl, MVT::i8), CCR);
   3247 }
   3248 // When legalizing carry, we create carries via add X, -1
   3249 // If that comes from an actual carry, via setcc, we use the
   3250 // carry directly.
   3251 static SDValue combineCarryThroughADD(SDValue CCR) {
   3252   if (CCR.getOpcode() == M68kISD::ADD) {
   3253     if (isAllOnesConstant(CCR.getOperand(1))) {
   3254       SDValue Carry = CCR.getOperand(0);
   3255       while (Carry.getOpcode() == ISD::TRUNCATE ||
   3256              Carry.getOpcode() == ISD::ZERO_EXTEND ||
   3257              Carry.getOpcode() == ISD::SIGN_EXTEND ||
   3258              Carry.getOpcode() == ISD::ANY_EXTEND ||
   3259              (Carry.getOpcode() == ISD::AND &&
   3260               isOneConstant(Carry.getOperand(1))))
   3261         Carry = Carry.getOperand(0);
   3262       if (Carry.getOpcode() == M68kISD::SETCC ||
   3263           Carry.getOpcode() == M68kISD::SETCC_CARRY) {
   3264         if (Carry.getConstantOperandVal(0) == M68k::COND_CS)
   3265           return Carry.getOperand(1);
   3266       }
   3267     }
   3268   }
   3269 
   3270   return SDValue();
   3271 }
   3272 
   3273 /// Optimize a CCR definition used according to the condition code \p CC into
   3274 /// a simpler CCR value, potentially returning a new \p CC and replacing uses
   3275 /// of chain values.
   3276 static SDValue combineSetCCCCR(SDValue CCR, M68k::CondCode &CC,
   3277                                SelectionDAG &DAG,
   3278                                const M68kSubtarget &Subtarget) {
   3279   if (CC == M68k::COND_CS)
   3280     if (SDValue Flags = combineCarryThroughADD(CCR))
   3281       return Flags;
   3282 
   3283   return SDValue();
   3284 }
   3285 
   3286 // Optimize  RES = M68kISD::SETCC CONDCODE, CCR_INPUT
   3287 static SDValue combineM68kSetCC(SDNode *N, SelectionDAG &DAG,
   3288                                 const M68kSubtarget &Subtarget) {
   3289   SDLoc DL(N);
   3290   M68k::CondCode CC = M68k::CondCode(N->getConstantOperandVal(0));
   3291   SDValue CCR = N->getOperand(1);
   3292 
   3293   // Try to simplify the CCR and condition code operands.
   3294   if (SDValue Flags = combineSetCCCCR(CCR, CC, DAG, Subtarget))
   3295     return getSETCC(CC, Flags, DL, DAG);
   3296 
   3297   return SDValue();
   3298 }
   3299 static SDValue combineM68kBrCond(SDNode *N, SelectionDAG &DAG,
   3300                                  const M68kSubtarget &Subtarget) {
   3301   SDLoc DL(N);
   3302   M68k::CondCode CC = M68k::CondCode(N->getConstantOperandVal(2));
   3303   SDValue CCR = N->getOperand(3);
   3304 
   3305   // Try to simplify the CCR and condition code operands.
   3306   // Make sure to not keep references to operands, as combineSetCCCCR can
   3307   // RAUW them under us.
   3308   if (SDValue Flags = combineSetCCCCR(CCR, CC, DAG, Subtarget)) {
   3309     SDValue Cond = DAG.getConstant(CC, DL, MVT::i8);
   3310     return DAG.getNode(M68kISD::BRCOND, DL, N->getVTList(), N->getOperand(0),
   3311                        N->getOperand(1), Cond, Flags);
   3312   }
   3313 
   3314   return SDValue();
   3315 }
   3316 
   3317 static SDValue combineSUBX(SDNode *N, SelectionDAG &DAG) {
   3318   if (SDValue Flags = combineCarryThroughADD(N->getOperand(2))) {
   3319     MVT VT = N->getSimpleValueType(0);
   3320     SDVTList VTs = DAG.getVTList(VT, MVT::i32);
   3321     return DAG.getNode(M68kISD::SUBX, SDLoc(N), VTs, N->getOperand(0),
   3322                        N->getOperand(1), Flags);
   3323   }
   3324 
   3325   return SDValue();
   3326 }
   3327 
   3328 // Optimize RES, CCR = M68kISD::ADDX LHS, RHS, CCR
   3329 static SDValue combineADDX(SDNode *N, SelectionDAG &DAG,
   3330                            TargetLowering::DAGCombinerInfo &DCI) {
   3331   if (SDValue Flags = combineCarryThroughADD(N->getOperand(2))) {
   3332     MVT VT = N->getSimpleValueType(0);
   3333     SDVTList VTs = DAG.getVTList(VT, MVT::i32);
   3334     return DAG.getNode(M68kISD::ADDX, SDLoc(N), VTs, N->getOperand(0),
   3335                        N->getOperand(1), Flags);
   3336   }
   3337 
   3338   return SDValue();
   3339 }
   3340 
   3341 SDValue M68kTargetLowering::PerformDAGCombine(SDNode *N,
   3342                                               DAGCombinerInfo &DCI) const {
   3343   SelectionDAG &DAG = DCI.DAG;
   3344   switch (N->getOpcode()) {
   3345   case M68kISD::SUBX:
   3346     return combineSUBX(N, DAG);
   3347   case M68kISD::ADDX:
   3348     return combineADDX(N, DAG, DCI);
   3349   case M68kISD::SETCC:
   3350     return combineM68kSetCC(N, DAG, Subtarget);
   3351   case M68kISD::BRCOND:
   3352     return combineM68kBrCond(N, DAG, Subtarget);
   3353   }
   3354 
   3355   return SDValue();
   3356 }
   3357 
   3358 //===----------------------------------------------------------------------===//
   3359 // M68kISD Node Names
   3360 //===----------------------------------------------------------------------===//
   3361 const char *M68kTargetLowering::getTargetNodeName(unsigned Opcode) const {
   3362   switch (Opcode) {
   3363   case M68kISD::CALL:
   3364     return "M68kISD::CALL";
   3365   case M68kISD::TAIL_CALL:
   3366     return "M68kISD::TAIL_CALL";
   3367   case M68kISD::RET:
   3368     return "M68kISD::RET";
   3369   case M68kISD::TC_RETURN:
   3370     return "M68kISD::TC_RETURN";
   3371   case M68kISD::ADD:
   3372     return "M68kISD::ADD";
   3373   case M68kISD::SUB:
   3374     return "M68kISD::SUB";
   3375   case M68kISD::ADDX:
   3376     return "M68kISD::ADDX";
   3377   case M68kISD::SUBX:
   3378     return "M68kISD::SUBX";
   3379   case M68kISD::SMUL:
   3380     return "M68kISD::SMUL";
   3381   case M68kISD::UMUL:
   3382     return "M68kISD::UMUL";
   3383   case M68kISD::OR:
   3384     return "M68kISD::OR";
   3385   case M68kISD::XOR:
   3386     return "M68kISD::XOR";
   3387   case M68kISD::AND:
   3388     return "M68kISD::AND";
   3389   case M68kISD::CMP:
   3390     return "M68kISD::CMP";
   3391   case M68kISD::BT:
   3392     return "M68kISD::BT";
   3393   case M68kISD::SELECT:
   3394     return "M68kISD::SELECT";
   3395   case M68kISD::CMOV:
   3396     return "M68kISD::CMOV";
   3397   case M68kISD::BRCOND:
   3398     return "M68kISD::BRCOND";
   3399   case M68kISD::SETCC:
   3400     return "M68kISD::SETCC";
   3401   case M68kISD::SETCC_CARRY:
   3402     return "M68kISD::SETCC_CARRY";
   3403   case M68kISD::GLOBAL_BASE_REG:
   3404     return "M68kISD::GLOBAL_BASE_REG";
   3405   case M68kISD::Wrapper:
   3406     return "M68kISD::Wrapper";
   3407   case M68kISD::WrapperPC:
   3408     return "M68kISD::WrapperPC";
   3409   case M68kISD::SEG_ALLOCA:
   3410     return "M68kISD::SEG_ALLOCA";
   3411   default:
   3412     return NULL;
   3413   }
   3414 }
   3415