diff options
Diffstat (limited to 'contrib/llvm/lib/Target/ARC')
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCAsmPrinter.cpp | 2 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCBranchFinalize.cpp | 16 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCFrameLowering.cpp | 62 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCISelLowering.cpp | 6 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCISelLowering.h | 1 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCInstrFormats.td | 2 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCInstrInfo.cpp | 14 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCInstrInfo.td | 58 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCMCInstLower.cpp | 2 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCMCInstLower.h | 2 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCMachineFunctionInfo.h | 5 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/ARCRegisterInfo.cpp | 32 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/Disassembler/ARCDisassembler.cpp | 28 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp | 7 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.h | 2 | ||||
-rw-r--r-- | contrib/llvm/lib/Target/ARC/MCTargetDesc/ARCInfo.h | 2 |
16 files changed, 145 insertions, 96 deletions
diff --git a/contrib/llvm/lib/Target/ARC/ARCAsmPrinter.cpp b/contrib/llvm/lib/Target/ARC/ARCAsmPrinter.cpp index af9dd968b7a6..8c13da0484fd 100644 --- a/contrib/llvm/lib/Target/ARC/ARCAsmPrinter.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCAsmPrinter.cpp @@ -25,7 +25,6 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineModuleInfo.h" -#include "llvm/CodeGen/TargetLoweringObjectFile.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" @@ -34,6 +33,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Target/TargetLoweringObjectFile.h" #include <algorithm> using namespace llvm; diff --git a/contrib/llvm/lib/Target/ARC/ARCBranchFinalize.cpp b/contrib/llvm/lib/Target/ARC/ARCBranchFinalize.cpp index 9341e7bdda41..3b410fa383b7 100644 --- a/contrib/llvm/lib/Target/ARC/ARCBranchFinalize.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCBranchFinalize.cpp @@ -112,7 +112,7 @@ static unsigned getCmpForPseudo(MachineInstr *MI) { } void ARCBranchFinalize::replaceWithBRcc(MachineInstr *MI) const { - DEBUG(dbgs() << "Replacing pseudo branch with BRcc\n"); + LLVM_DEBUG(dbgs() << "Replacing pseudo branch with BRcc\n"); unsigned CC = getCCForBRcc(MI->getOperand(3).getImm()); if (CC != -1U) { BuildMI(*MI->getParent(), MI, MI->getDebugLoc(), @@ -128,8 +128,8 @@ void ARCBranchFinalize::replaceWithBRcc(MachineInstr *MI) const { } void ARCBranchFinalize::replaceWithCmpBcc(MachineInstr *MI) const { - DEBUG(dbgs() << "Branch: " << *MI << "\n"); - DEBUG(dbgs() << "Replacing pseudo branch with Cmp + Bcc\n"); + LLVM_DEBUG(dbgs() << "Branch: " << *MI << "\n"); + LLVM_DEBUG(dbgs() << "Replacing pseudo branch with Cmp + Bcc\n"); BuildMI(*MI->getParent(), MI, MI->getDebugLoc(), TII->get(getCmpForPseudo(MI))) .addReg(MI->getOperand(1).getReg()) @@ -141,8 +141,8 @@ void ARCBranchFinalize::replaceWithCmpBcc(MachineInstr *MI) const { } bool ARCBranchFinalize::runOnMachineFunction(MachineFunction &MF) { - DEBUG(dbgs() << "Running ARC Branch Finalize on " - << MF.getName() << "\n"); + LLVM_DEBUG(dbgs() << "Running ARC Branch Finalize on " << MF.getName() + << "\n"); std::vector<MachineInstr *> Branches; bool Changed = false; unsigned MaxSize = 0; @@ -156,7 +156,7 @@ bool ARCBranchFinalize::runOnMachineFunction(MachineFunction &MF) { for (auto &MI : MBB) { unsigned Size = TII->getInstSizeInBytes(MI); if (Size > 8 || Size == 0) { - DEBUG(dbgs() << "Unknown (or size 0) size for: " << MI << "\n"); + LLVM_DEBUG(dbgs() << "Unknown (or size 0) size for: " << MI << "\n"); } else { MaxSize += Size; } @@ -172,8 +172,8 @@ bool ARCBranchFinalize::runOnMachineFunction(MachineFunction &MF) { isInt<9>(MaxSize) ? replaceWithBRcc(P.first) : replaceWithCmpBcc(P.first); } - DEBUG(dbgs() << "Estimated function size for " << MF.getName() - << ": " << MaxSize << "\n"); + LLVM_DEBUG(dbgs() << "Estimated function size for " << MF.getName() << ": " + << MaxSize << "\n"); return Changed; } diff --git a/contrib/llvm/lib/Target/ARC/ARCFrameLowering.cpp b/contrib/llvm/lib/Target/ARC/ARCFrameLowering.cpp index 195a781950be..ca59cb2baaa7 100644 --- a/contrib/llvm/lib/Target/ARC/ARCFrameLowering.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCFrameLowering.cpp @@ -59,8 +59,8 @@ static void generateStackAdjustment(MachineBasicBlock &MBB, Positive = true; } - DEBUG(dbgs() << "Internal: adjust stack by: " << Amount << "," << AbsAmount - << "\n"); + LLVM_DEBUG(dbgs() << "Internal: adjust stack by: " << Amount << "," + << AbsAmount << "\n"); assert((AbsAmount % 4 == 0) && "Stack adjustments must be 4-byte aligned."); if (isUInt<6>(AbsAmount)) @@ -88,8 +88,7 @@ determineLastCalleeSave(const std::vector<CalleeSavedInfo> &CSI) { void ARCFrameLowering::determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS) const { - DEBUG(dbgs() << "Determine Callee Saves: " << MF.getName() - << "\n"); + LLVM_DEBUG(dbgs() << "Determine Callee Saves: " << MF.getName() << "\n"); TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); SavedRegs.set(ARC::BLINK); } @@ -115,7 +114,7 @@ void ARCFrameLowering::adjustStackToMatchRecords( /// registers onto the stack, when enough callee saved registers are required. void ARCFrameLowering::emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const { - DEBUG(dbgs() << "Emit Prologue: " << MF.getName() << "\n"); + LLVM_DEBUG(dbgs() << "Emit Prologue: " << MF.getName() << "\n"); auto *AFI = MF.getInfo<ARCFunctionInfo>(); MachineModuleInfo &MMI = MF.getMMI(); MCContext &Context = MMI.getContext(); @@ -133,7 +132,7 @@ void ARCFrameLowering::emitPrologue(MachineFunction &MF, unsigned AlreadyAdjusted = 0; if (MF.getFunction().isVarArg()) { // Add in the varargs area here first. - DEBUG(dbgs() << "Varargs\n"); + LLVM_DEBUG(dbgs() << "Varargs\n"); unsigned VarArgsBytes = MFI.getObjectSize(AFI->getVarArgsFrameIndex()); BuildMI(MBB, MBBI, dl, TII->get(ARC::SUB_rru6)) .addReg(ARC::SP) @@ -141,7 +140,7 @@ void ARCFrameLowering::emitPrologue(MachineFunction &MF, .addImm(VarArgsBytes); } if (hasFP(MF)) { - DEBUG(dbgs() << "Saving FP\n"); + LLVM_DEBUG(dbgs() << "Saving FP\n"); BuildMI(MBB, MBBI, dl, TII->get(ARC::ST_AW_rs9)) .addReg(ARC::SP, RegState::Define) .addReg(ARC::FP) @@ -150,7 +149,7 @@ void ARCFrameLowering::emitPrologue(MachineFunction &MF, AlreadyAdjusted += 4; } if (UseSaveRestoreFunclet && Last > ARC::R14) { - DEBUG(dbgs() << "Creating store funclet.\n"); + LLVM_DEBUG(dbgs() << "Creating store funclet.\n"); // BL to __save_r13_to_<TRI->getRegAsmName()> StackSlotsUsedByFunclet = Last - ARC::R12; BuildMI(MBB, MBBI, dl, TII->get(ARC::PUSH_S_BLINK)); @@ -166,20 +165,20 @@ void ARCFrameLowering::emitPrologue(MachineFunction &MF, } // If we haven't saved BLINK, but we need to...do that now. if (MFI.hasCalls() && !SavedBlink) { - DEBUG(dbgs() << "Creating save blink.\n"); + LLVM_DEBUG(dbgs() << "Creating save blink.\n"); BuildMI(MBB, MBBI, dl, TII->get(ARC::PUSH_S_BLINK)); AlreadyAdjusted += 4; } if (AFI->MaxCallStackReq > 0) MFI.setStackSize(MFI.getStackSize() + AFI->MaxCallStackReq); // We have already saved some of the stack... - DEBUG(dbgs() << "Adjusting stack by: " - << (MFI.getStackSize() - AlreadyAdjusted) << "\n"); + LLVM_DEBUG(dbgs() << "Adjusting stack by: " + << (MFI.getStackSize() - AlreadyAdjusted) << "\n"); generateStackAdjustment(MBB, MBBI, *ST.getInstrInfo(), dl, -(MFI.getStackSize() - AlreadyAdjusted), ARC::SP); if (hasFP(MF)) { - DEBUG(dbgs() << "Setting FP from SP.\n"); + LLVM_DEBUG(dbgs() << "Setting FP from SP.\n"); BuildMI(MBB, MBBI, dl, TII->get(isUInt<6>(MFI.getStackSize()) ? ARC::ADD_rru6 : ARC::ADD_rrlimm), @@ -235,7 +234,7 @@ void ARCFrameLowering::emitPrologue(MachineFunction &MF, /// registers onto the stack, when enough callee saved registers are required. void ARCFrameLowering::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const { - DEBUG(dbgs() << "Emit Epilogue: " << MF.getName() << "\n"); + LLVM_DEBUG(dbgs() << "Emit Epilogue: " << MF.getName() << "\n"); auto *AFI = MF.getInfo<ARCFunctionInfo>(); const ARCInstrInfo *TII = MF.getSubtarget<ARCSubtarget>().getInstrInfo(); MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator(); @@ -304,7 +303,7 @@ void ARCFrameLowering::emitEpilogue(MachineFunction &MF, // Relieve the varargs area if necessary. if (MF.getFunction().isVarArg()) { // Add in the varargs area here first. - DEBUG(dbgs() << "Varargs\n"); + LLVM_DEBUG(dbgs() << "Varargs\n"); unsigned VarArgsBytes = MFI.getObjectSize(AFI->getVarArgsFrameIndex()); BuildMI(MBB, MBBI, MBB.findDebugLoc(MBBI), TII->get(ARC::ADD_rru6)) .addReg(ARC::SP) @@ -334,16 +333,16 @@ bool ARCFrameLowering::assignCalleeSavedSpillSlots( if (hasFP(MF)) { // Create a fixed slot at for FP int StackObj = MFI.CreateFixedSpillStackObject(4, CurOffset, true); - DEBUG(dbgs() << "Creating fixed object (" << StackObj << ") for FP at " - << CurOffset << "\n"); + LLVM_DEBUG(dbgs() << "Creating fixed object (" << StackObj << ") for FP at " + << CurOffset << "\n"); (void)StackObj; CurOffset -= 4; } if (MFI.hasCalls() || (UseSaveRestoreFunclet && Last > ARC::R14)) { // Create a fixed slot for BLINK. int StackObj = MFI.CreateFixedSpillStackObject(4, CurOffset, true); - DEBUG(dbgs() << "Creating fixed object (" << StackObj << ") for BLINK at " - << CurOffset << "\n"); + LLVM_DEBUG(dbgs() << "Creating fixed object (" << StackObj + << ") for BLINK at " << CurOffset << "\n"); (void)StackObj; CurOffset -= 4; } @@ -366,12 +365,12 @@ bool ARCFrameLowering::assignCalleeSavedSpillSlots( continue; if (I.getFrameIdx() == 0) { I.setFrameIdx(MFI.CreateFixedSpillStackObject(4, CurOffset, true)); - DEBUG(dbgs() << "Creating fixed object (" << I.getFrameIdx() - << ") for other register at " << CurOffset << "\n"); + LLVM_DEBUG(dbgs() << "Creating fixed object (" << I.getFrameIdx() + << ") for other register at " << CurOffset << "\n"); } else { MFI.setObjectOffset(I.getFrameIdx(), CurOffset); - DEBUG(dbgs() << "Updating fixed object (" << I.getFrameIdx() - << ") for other register at " << CurOffset << "\n"); + LLVM_DEBUG(dbgs() << "Updating fixed object (" << I.getFrameIdx() + << ") for other register at " << CurOffset << "\n"); } CurOffset -= 4; } @@ -382,8 +381,8 @@ bool ARCFrameLowering::spillCalleeSavedRegisters( MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const std::vector<CalleeSavedInfo> &CSI, const TargetRegisterInfo *TRI) const { - DEBUG(dbgs() << "Spill callee saved registers: " - << MBB.getParent()->getName() << "\n"); + LLVM_DEBUG(dbgs() << "Spill callee saved registers: " + << MBB.getParent()->getName() << "\n"); // There are routines for saving at least 3 registers (r13 to r15, etc.) unsigned Last = determineLastCalleeSave(CSI); if (UseSaveRestoreFunclet && Last > ARC::R14) { @@ -399,8 +398,8 @@ bool ARCFrameLowering::spillCalleeSavedRegisters( bool ARCFrameLowering::restoreCalleeSavedRegisters( MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, std::vector<CalleeSavedInfo> &CSI, const TargetRegisterInfo *TRI) const { - DEBUG(dbgs() << "Restore callee saved registers: " - << MBB.getParent()->getName() << "\n"); + LLVM_DEBUG(dbgs() << "Restore callee saved registers: " + << MBB.getParent()->getName() << "\n"); // There are routines for saving at least 3 registers (r13 to r15, etc.) unsigned Last = determineLastCalleeSave(CSI); if (UseSaveRestoreFunclet && Last > ARC::R14) { @@ -414,16 +413,17 @@ bool ARCFrameLowering::restoreCalleeSavedRegisters( void ARCFrameLowering::processFunctionBeforeFrameFinalized( MachineFunction &MF, RegScavenger *RS) const { const TargetRegisterInfo *RegInfo = MF.getSubtarget().getRegisterInfo(); - DEBUG(dbgs() << "Process function before frame finalized: " - << MF.getName() << "\n"); + LLVM_DEBUG(dbgs() << "Process function before frame finalized: " + << MF.getName() << "\n"); MachineFrameInfo &MFI = MF.getFrameInfo(); - DEBUG(dbgs() << "Current stack size: " << MFI.getStackSize() << "\n"); + LLVM_DEBUG(dbgs() << "Current stack size: " << MFI.getStackSize() << "\n"); const TargetRegisterClass *RC = &ARC::GPR32RegClass; if (MFI.hasStackObjects()) { int RegScavFI = MFI.CreateStackObject( RegInfo->getSpillSize(*RC), RegInfo->getSpillAlignment(*RC), false); RS->addScavengingFrameIndex(RegScavFI); - DEBUG(dbgs() << "Created scavenging index RegScavFI=" << RegScavFI << "\n"); + LLVM_DEBUG(dbgs() << "Created scavenging index RegScavFI=" << RegScavFI + << "\n"); } } @@ -440,7 +440,7 @@ static void emitRegUpdate(MachineBasicBlock &MBB, MachineBasicBlock::iterator ARCFrameLowering::eliminateCallFramePseudoInstr( MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const { - DEBUG(dbgs() << "EmitCallFramePseudo: " << MF.getName() << "\n"); + LLVM_DEBUG(dbgs() << "EmitCallFramePseudo: " << MF.getName() << "\n"); const ARCInstrInfo *TII = MF.getSubtarget<ARCSubtarget>().getInstrInfo(); MachineInstr &Old = *I; DebugLoc dl = Old.getDebugLoc(); diff --git a/contrib/llvm/lib/Target/ARC/ARCISelLowering.cpp b/contrib/llvm/lib/Target/ARC/ARCISelLowering.cpp index 5991838a15c4..bf98af801406 100644 --- a/contrib/llvm/lib/Target/ARC/ARCISelLowering.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCISelLowering.cpp @@ -72,7 +72,7 @@ static ARCCC::CondCode ISDCCtoARCCC(ISD::CondCode isdCC) { ARCTargetLowering::ARCTargetLowering(const TargetMachine &TM, const ARCSubtarget &Subtarget) - : TargetLowering(TM), TM(TM), Subtarget(Subtarget) { + : TargetLowering(TM), Subtarget(Subtarget) { // Set up the register classes. addRegisterClass(MVT::i32, &ARC::GPR32RegClass); @@ -486,8 +486,8 @@ SDValue ARCTargetLowering::LowerCallArguments( EVT RegVT = VA.getLocVT(); switch (RegVT.getSimpleVT().SimpleTy) { default: { - DEBUG(errs() << "LowerFormalArguments Unhandled argument type: " - << (unsigned)RegVT.getSimpleVT().SimpleTy << "\n"); + LLVM_DEBUG(errs() << "LowerFormalArguments Unhandled argument type: " + << (unsigned)RegVT.getSimpleVT().SimpleTy << "\n"); llvm_unreachable("Unhandled LowerFormalArguments type."); } case MVT::i32: diff --git a/contrib/llvm/lib/Target/ARC/ARCISelLowering.h b/contrib/llvm/lib/Target/ARC/ARCISelLowering.h index cb06e9dcd79f..fec01b13a866 100644 --- a/contrib/llvm/lib/Target/ARC/ARCISelLowering.h +++ b/contrib/llvm/lib/Target/ARC/ARCISelLowering.h @@ -76,7 +76,6 @@ public: Instruction *I = nullptr) const override; private: - const TargetMachine &TM; const ARCSubtarget &Subtarget; // Lower Operand helpers diff --git a/contrib/llvm/lib/Target/ARC/ARCInstrFormats.td b/contrib/llvm/lib/Target/ARC/ARCInstrFormats.td index 50edddd4ea9f..0a49b83ef16a 100644 --- a/contrib/llvm/lib/Target/ARC/ARCInstrFormats.td +++ b/contrib/llvm/lib/Target/ARC/ARCInstrFormats.td @@ -62,7 +62,7 @@ class InstARC<int sz, dag outs, dag ins, string asmstr, list<dag> pattern> let Namespace = "ARC"; dag OutOperandList = outs; dag InOperandList = ins; - let AsmString = asmstr; + let AsmString = asmstr; let Pattern = pattern; let Size = sz; } diff --git a/contrib/llvm/lib/Target/ARC/ARCInstrInfo.cpp b/contrib/llvm/lib/Target/ARC/ARCInstrInfo.cpp index a299e32c03a0..a8084f16893b 100644 --- a/contrib/llvm/lib/Target/ARC/ARCInstrInfo.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCInstrInfo.cpp @@ -103,6 +103,10 @@ static ARCCC::CondCode GetOppositeBranchCondition(ARCCC::CondCode CC) { return ARCCC::LE; case ARCCC::GE: return ARCCC::LT; + case ARCCC::VS: + return ARCCC::VC; + case ARCCC::VC: + return ARCCC::VS; case ARCCC::LT: return ARCCC::GE; case ARCCC::LE: @@ -169,7 +173,7 @@ bool ARCInstrInfo::analyzeBranch(MachineBasicBlock &MBB, bool CantAnalyze = false; // Skip over DEBUG values and predicated nonterminators. - while (I->isDebugValue() || !I->isTerminator()) { + while (I->isDebugInstr() || !I->isTerminator()) { if (I == MBB.begin()) return false; --I; @@ -294,8 +298,8 @@ void ARCInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB, "Only support 4-byte stores to stack now."); assert(ARC::GPR32RegClass.hasSubClassEq(RC) && "Only support GPR32 stores to stack now."); - DEBUG(dbgs() << "Created store reg=" << printReg(SrcReg, TRI) - << " to FrameIndex=" << FrameIndex << "\n"); + LLVM_DEBUG(dbgs() << "Created store reg=" << printReg(SrcReg, TRI) + << " to FrameIndex=" << FrameIndex << "\n"); BuildMI(MBB, I, dl, get(ARC::ST_rs9)) .addReg(SrcReg, getKillRegState(isKill)) .addFrameIndex(FrameIndex) @@ -321,8 +325,8 @@ void ARCInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB, "Only support 4-byte loads from stack now."); assert(ARC::GPR32RegClass.hasSubClassEq(RC) && "Only support GPR32 stores to stack now."); - DEBUG(dbgs() << "Created load reg=" << printReg(DestReg, TRI) - << " from FrameIndex=" << FrameIndex << "\n"); + LLVM_DEBUG(dbgs() << "Created load reg=" << printReg(DestReg, TRI) + << " from FrameIndex=" << FrameIndex << "\n"); BuildMI(MBB, I, dl, get(ARC::LD_rs9)) .addReg(DestReg, RegState::Define) .addFrameIndex(FrameIndex) diff --git a/contrib/llvm/lib/Target/ARC/ARCInstrInfo.td b/contrib/llvm/lib/Target/ARC/ARCInstrInfo.td index edd853fe150d..525098c4ff66 100644 --- a/contrib/llvm/lib/Target/ARC/ARCInstrInfo.td +++ b/contrib/llvm/lib/Target/ARC/ARCInstrInfo.td @@ -125,18 +125,36 @@ multiclass ArcBinaryInst<bits<5> major, bits<6> mincode, (ins GPR32:$B, GPR32:$C), !strconcat(opasm, "\t$A, $B, $C"), []>; + def _f_rrr : F32_DOP_RR<major, mincode, 1, (outs GPR32:$A), + (ins GPR32:$B, GPR32:$C), + !strconcat(opasm, ".f\t$A, $B, $C"), + []> + { let Defs = [STATUS32]; } // 2 register with unsigned 6-bit immediate variant. def _rru6 : F32_DOP_RU6<major, mincode, 0, (outs GPR32:$A), (ins GPR32:$B, immU6:$U6), !strconcat(opasm, "\t$A, $B, $U6"), []>; + def _f_rru6 : F32_DOP_RU6<major, mincode, 1, (outs GPR32:$A), + (ins GPR32:$B, immU6:$U6), + !strconcat(opasm, ".f\t$A, $B, $U6"), + []> + { let Defs = [STATUS32]; } + // 2 register with 32-bit immediate variant. def _rrlimm : F32_DOP_RLIMM<major, mincode, 0, - (outs GPR32:$A), - (ins GPR32:$B, i32imm:$LImm), - !strconcat(opasm, "\t$A, $B, $LImm"), - []>; + (outs GPR32:$A), + (ins GPR32:$B, i32imm:$LImm), + !strconcat(opasm, "\t$A, $B, $LImm"), + []>; + def _f_rrlimm : F32_DOP_RLIMM<major, mincode, 1, + (outs GPR32:$A), + (ins GPR32:$B, i32imm:$LImm), + !strconcat(opasm, ".f\t$A, $B, $LImm"), + []> + { let Defs = [STATUS32]; } + // 2 matched-register with signed 12-bit immediate variant (add r0, r0, -1). def _rrs12 : F32_DOP_RS12<major, mincode, 0, (outs GPR32:$B), @@ -144,6 +162,12 @@ multiclass ArcBinaryInst<bits<5> major, bits<6> mincode, !strconcat(opasm, "\t$B, $in, $S12"), []> { let Constraints = "$B = $in"; } + def _f_rrs12 : F32_DOP_RS12<major, mincode, 1, + (outs GPR32:$B), + (ins GPR32:$in, immS<12>:$S12), + !strconcat(opasm, ".f\t$B, $in, $S12"), + []> + { let Constraints = "$B = $in"; let Defs = [STATUS32]; } } // Special multivariant GEN4 DOP format instruction that take 2 registers. @@ -168,6 +192,10 @@ multiclass ArcUnaryInst<bits<5> major, bits<6> subop, string opasm> { def _rr : F32_SOP_RR<major, subop, 0, (outs GPR32:$B), (ins GPR32:$C), !strconcat(opasm, "\t$B, $C"), []>; + + def _f_rr : F32_SOP_RR<major, subop, 1, (outs GPR32:$B), (ins GPR32:$C), + !strconcat(opasm, ".f\t$B, $C"), []> + { let Defs = [STATUS32]; } } @@ -328,11 +356,19 @@ let isBranch = 1, isTerminator = 1 in { { let Size = 8; } } // let isBranch, isTerminator -// Indirect, unconditional Jump. -let isBranch = 1, isTerminator = 1, isBarrier = 1, isIndirectBranch = 1 in -def J : F32_DOP_RR<0b00100, 0b100000, 0, - (outs), (ins GPR32:$C), - "j\t[$C]", [(brind i32:$C)]>; +// Unconditional Jump. +let isBranch = 1, isTerminator = 1, isBarrier = 1 in { + // Indirect. + let isIndirectBranch = 1 in + def J : F32_DOP_RR<0b00100, 0b100000, 0, + (outs), (ins GPR32:$C), + "j\t[$C]", [(brind i32:$C)]>; + + // Direct. + def J_LImm : F32_DOP_RLIMM<0b00100, 0b100000, 0, + (outs), (ins i32imm:$LImm), + "j\t$LImm", []>; +} // Call instructions. let isCall = 1, isBarrier = 1, Defs = [BLINK], Uses = [SP] in { @@ -344,6 +380,10 @@ let isCall = 1, isBarrier = 1, Defs = [BLINK], Uses = [SP] in { let isIndirectBranch = 1 in def JL : F32_DOP_RR<0b00100, 0b100010, 0, (outs), (ins GPR32:$C), "jl\t[$C]", [(ARCJumpLink i32:$C)]>; + + // Direct unconditional call. + def JL_LImm : F32_DOP_RLIMM<0b00100, 0b100010, 0, (outs), (ins i32imm:$LImm), + "jl\t$LImm", []>; } // let isCall, isBarrier, Defs, Uses // Pattern to generate BL instruction. diff --git a/contrib/llvm/lib/Target/ARC/ARCMCInstLower.cpp b/contrib/llvm/lib/Target/ARC/ARCMCInstLower.cpp index 4658388924ec..43b087a57204 100644 --- a/contrib/llvm/lib/Target/ARC/ARCMCInstLower.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCMCInstLower.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief This file contains code to lower ARC MachineInstrs to their +/// This file contains code to lower ARC MachineInstrs to their /// corresponding MCInst records. /// //===----------------------------------------------------------------------===// diff --git a/contrib/llvm/lib/Target/ARC/ARCMCInstLower.h b/contrib/llvm/lib/Target/ARC/ARCMCInstLower.h index 22e15cdb351e..9a698f26334a 100644 --- a/contrib/llvm/lib/Target/ARC/ARCMCInstLower.h +++ b/contrib/llvm/lib/Target/ARC/ARCMCInstLower.h @@ -23,7 +23,7 @@ class MachineFunction; class Mangler; class AsmPrinter; -/// \brief This class is used to lower an MachineInstr into an MCInst. +/// This class is used to lower an MachineInstr into an MCInst. class LLVM_LIBRARY_VISIBILITY ARCMCInstLower { using MachineOperandType = MachineOperand::MachineOperandType; MCContext *Ctx; diff --git a/contrib/llvm/lib/Target/ARC/ARCMachineFunctionInfo.h b/contrib/llvm/lib/Target/ARC/ARCMachineFunctionInfo.h index bfb3fdef5ebf..95ad294e3668 100644 --- a/contrib/llvm/lib/Target/ARC/ARCMachineFunctionInfo.h +++ b/contrib/llvm/lib/Target/ARC/ARCMachineFunctionInfo.h @@ -25,16 +25,15 @@ class ARCFunctionInfo : public MachineFunctionInfo { virtual void anchor(); bool ReturnStackOffsetSet; int VarArgsFrameIndex; - unsigned VarArgFrameBytes; unsigned ReturnStackOffset; public: ARCFunctionInfo() - : ReturnStackOffsetSet(false), VarArgsFrameIndex(0), VarArgFrameBytes(0), + : ReturnStackOffsetSet(false), VarArgsFrameIndex(0), ReturnStackOffset(-1U), MaxCallStackReq(0) {} explicit ARCFunctionInfo(MachineFunction &MF) - : ReturnStackOffsetSet(false), VarArgsFrameIndex(0), VarArgFrameBytes(0), + : ReturnStackOffsetSet(false), VarArgsFrameIndex(0), ReturnStackOffset(-1U), MaxCallStackReq(0) { // Functions are 4-byte (2**2) aligned. MF.setAlignment(2); diff --git a/contrib/llvm/lib/Target/ARC/ARCRegisterInfo.cpp b/contrib/llvm/lib/Target/ARC/ARCRegisterInfo.cpp index cb9f89d3499b..38ea3c93a2d4 100644 --- a/contrib/llvm/lib/Target/ARC/ARCRegisterInfo.cpp +++ b/contrib/llvm/lib/Target/ARC/ARCRegisterInfo.cpp @@ -66,9 +66,9 @@ static void ReplaceFrameIndex(MachineBasicBlock::iterator II, MBB.getParent()->getSubtarget().getRegisterInfo(); BaseReg = RS->scavengeRegister(&ARC::GPR32RegClass, II, SPAdj); assert(BaseReg && "Register scavenging failed."); - DEBUG(dbgs() << "Scavenged register " << printReg(BaseReg, TRI) - << " for FrameReg=" << printReg(FrameReg, TRI) - << "+Offset=" << Offset << "\n"); + LLVM_DEBUG(dbgs() << "Scavenged register " << printReg(BaseReg, TRI) + << " for FrameReg=" << printReg(FrameReg, TRI) + << "+Offset=" << Offset << "\n"); (void)TRI; RS->setRegUsed(BaseReg); } @@ -88,7 +88,7 @@ static void ReplaceFrameIndex(MachineBasicBlock::iterator II, assert((Offset % 2 == 0) && "LDH needs 2 byte alignment."); case ARC::LDB_rs9: case ARC::LDB_X_rs9: - DEBUG(dbgs() << "Building LDFI\n"); + LLVM_DEBUG(dbgs() << "Building LDFI\n"); BuildMI(MBB, II, dl, TII.get(MI.getOpcode()), Reg) .addReg(BaseReg, KillState) .addImm(Offset) @@ -99,7 +99,7 @@ static void ReplaceFrameIndex(MachineBasicBlock::iterator II, case ARC::STH_rs9: assert((Offset % 2 == 0) && "STH needs 2 byte alignment."); case ARC::STB_rs9: - DEBUG(dbgs() << "Building STFI\n"); + LLVM_DEBUG(dbgs() << "Building STFI\n"); BuildMI(MBB, II, dl, TII.get(MI.getOpcode())) .addReg(Reg, getKillRegState(MI.getOperand(0).isKill())) .addReg(BaseReg, KillState) @@ -107,7 +107,7 @@ static void ReplaceFrameIndex(MachineBasicBlock::iterator II, .addMemOperand(*MI.memoperands_begin()); break; case ARC::GETFI: - DEBUG(dbgs() << "Building GETFI\n"); + LLVM_DEBUG(dbgs() << "Building GETFI\n"); BuildMI(MBB, II, dl, TII.get(isUInt<6>(Offset) ? ARC::ADD_rru6 : ARC::ADD_rrlimm)) .addReg(Reg, RegState::Define) @@ -175,14 +175,14 @@ void ARCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, int StackSize = MF.getFrameInfo().getStackSize(); int LocalFrameSize = MF.getFrameInfo().getLocalFrameSize(); - DEBUG(dbgs() << "\nFunction : " << MF.getName() << "\n"); - DEBUG(dbgs() << "<--------->\n"); - DEBUG(dbgs() << MI << "\n"); - DEBUG(dbgs() << "FrameIndex : " << FrameIndex << "\n"); - DEBUG(dbgs() << "ObjSize : " << ObjSize << "\n"); - DEBUG(dbgs() << "FrameOffset : " << Offset << "\n"); - DEBUG(dbgs() << "StackSize : " << StackSize << "\n"); - DEBUG(dbgs() << "LocalFrameSize : " << LocalFrameSize << "\n"); + LLVM_DEBUG(dbgs() << "\nFunction : " << MF.getName() << "\n"); + LLVM_DEBUG(dbgs() << "<--------->\n"); + LLVM_DEBUG(dbgs() << MI << "\n"); + LLVM_DEBUG(dbgs() << "FrameIndex : " << FrameIndex << "\n"); + LLVM_DEBUG(dbgs() << "ObjSize : " << ObjSize << "\n"); + LLVM_DEBUG(dbgs() << "FrameOffset : " << Offset << "\n"); + LLVM_DEBUG(dbgs() << "StackSize : " << StackSize << "\n"); + LLVM_DEBUG(dbgs() << "LocalFrameSize : " << LocalFrameSize << "\n"); (void)LocalFrameSize; // Special handling of DBG_VALUE instructions. @@ -200,8 +200,8 @@ void ARCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, // ldb needs no alignment, // ldh needs 2 byte alignment // ld needs 4 byte alignment - DEBUG(dbgs() << "Offset : " << Offset << "\n" - << "<--------->\n"); + LLVM_DEBUG(dbgs() << "Offset : " << Offset << "\n" + << "<--------->\n"); unsigned Reg = MI.getOperand(0).getReg(); assert(ARC::GPR32RegClass.contains(Reg) && "Unexpected register operand"); diff --git a/contrib/llvm/lib/Target/ARC/Disassembler/ARCDisassembler.cpp b/contrib/llvm/lib/Target/ARC/Disassembler/ARCDisassembler.cpp index dd181767d81a..3fc5a033dd5d 100644 --- a/contrib/llvm/lib/Target/ARC/Disassembler/ARCDisassembler.cpp +++ b/contrib/llvm/lib/Target/ARC/Disassembler/ARCDisassembler.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief This file is part of the ARC Disassembler. +/// This file is part of the ARC Disassembler. /// //===----------------------------------------------------------------------===// @@ -31,7 +31,7 @@ using DecodeStatus = MCDisassembler::DecodeStatus; namespace { -/// \brief A disassembler class for ARC. +/// A disassembler class for ARC. class ARCDisassembler : public MCDisassembler { public: std::unique_ptr<MCInstrInfo const> const MCII; @@ -122,7 +122,7 @@ static DecodeStatus DecodeGPR32RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const void *Decoder) { if (RegNo >= 32) { - DEBUG(dbgs() << "Not a GPR32 register."); + LLVM_DEBUG(dbgs() << "Not a GPR32 register."); return MCDisassembler::Fail; } @@ -222,7 +222,7 @@ static DecodeStatus DecodeStLImmInstruction(MCInst &Inst, uint64_t Insn, unsigned SrcC, DstB, LImm; DstB = decodeBField(Insn); if (DstB != 62) { - DEBUG(dbgs() << "Decoding StLImm found non-limm register."); + LLVM_DEBUG(dbgs() << "Decoding StLImm found non-limm register."); return MCDisassembler::Fail; } SrcC = decodeCField(Insn); @@ -237,10 +237,10 @@ static DecodeStatus DecodeLdLImmInstruction(MCInst &Inst, uint64_t Insn, uint64_t Address, const void *Decoder) { unsigned DstA, SrcB, LImm; - DEBUG(dbgs() << "Decoding LdLImm:\n"); + LLVM_DEBUG(dbgs() << "Decoding LdLImm:\n"); SrcB = decodeBField(Insn); if (SrcB != 62) { - DEBUG(dbgs() << "Decoding LdLImm found non-limm register."); + LLVM_DEBUG(dbgs() << "Decoding LdLImm found non-limm register."); return MCDisassembler::Fail; } DstA = decodeAField(Insn); @@ -255,13 +255,13 @@ static DecodeStatus DecodeLdRLImmInstruction(MCInst &Inst, uint64_t Insn, uint64_t Address, const void *Decoder) { unsigned DstA, SrcB; - DEBUG(dbgs() << "Decoding LdRLimm\n"); + LLVM_DEBUG(dbgs() << "Decoding LdRLimm\n"); DstA = decodeAField(Insn); DecodeGPR32RegisterClass(Inst, DstA, Address, Decoder); SrcB = decodeBField(Insn); DecodeGPR32RegisterClass(Inst, SrcB, Address, Decoder); if (decodeCField(Insn) != 62) { - DEBUG(dbgs() << "Decoding LdRLimm found non-limm register."); + LLVM_DEBUG(dbgs() << "Decoding LdRLimm found non-limm register."); return MCDisassembler::Fail; } Inst.addOperand(MCOperand::createImm((uint32_t)(Insn >> 32))); @@ -271,7 +271,7 @@ static DecodeStatus DecodeLdRLImmInstruction(MCInst &Inst, uint64_t Insn, static DecodeStatus DecodeMoveHRegInstruction(MCInst &Inst, uint64_t Insn, uint64_t Address, const void *Decoder) { - DEBUG(dbgs() << "Decoding MOV_S h-register\n"); + LLVM_DEBUG(dbgs() << "Decoding MOV_S h-register\n"); using Field = decltype(Insn); Field h = fieldFromInstruction(Insn, 5, 3) | (fieldFromInstruction(Insn, 0, 2) << 3); @@ -322,10 +322,10 @@ DecodeStatus ARCDisassembler::getInstruction(MCInst &Instr, uint64_t &Size, Result = decodeInstruction(DecoderTable64, Instr, Insn64, Address, this, STI); if (Success == Result) { - DEBUG(dbgs() << "Successfully decoded 64-bit instruction."); + LLVM_DEBUG(dbgs() << "Successfully decoded 64-bit instruction."); return Result; } - DEBUG(dbgs() << "Not a 64-bit instruction, falling back to 32-bit."); + LLVM_DEBUG(dbgs() << "Not a 64-bit instruction, falling back to 32-bit."); } uint32_t Insn32; if (!readInstruction32(Bytes, Address, Size, Insn32)) { @@ -342,10 +342,12 @@ DecodeStatus ARCDisassembler::getInstruction(MCInst &Instr, uint64_t &Size, Result = decodeInstruction(DecoderTable48, Instr, Insn48, Address, this, STI); if (Success == Result) { - DEBUG(dbgs() << "Successfully decoded 16-bit instruction with limm."); + LLVM_DEBUG( + dbgs() << "Successfully decoded 16-bit instruction with limm."); return Result; } - DEBUG(dbgs() << "Not a 16-bit instruction with limm, try without it."); + LLVM_DEBUG( + dbgs() << "Not a 16-bit instruction with limm, try without it."); } uint32_t Insn16; diff --git a/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp b/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp index 4760ac4456d0..0c627d04698b 100644 --- a/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp +++ b/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.cpp @@ -43,9 +43,8 @@ static const char *ARCBRCondCodeToString(ARCCC::BRCondCode BRCC) { return "lo"; case ARCCC::BRHS: return "hs"; - default: - llvm_unreachable("Unhandled ARCCC::BRCondCode"); } + llvm_unreachable("Unhandled ARCCC::BRCondCode"); } static const char *ARCCondCodeToString(ARCCC::CondCode CC) { @@ -66,6 +65,10 @@ static const char *ARCCondCodeToString(ARCCC::CondCode CC) { return "gt"; case ARCCC::GE: return "ge"; + case ARCCC::VS: + return "vs"; + case ARCCC::VC: + return "vc"; case ARCCC::LT: return "lt"; case ARCCC::LE: diff --git a/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.h b/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.h index e26c08104e23..bb3898a67cef 100644 --- a/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.h +++ b/contrib/llvm/lib/Target/ARC/InstPrinter/ARCInstPrinter.h @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief This file contains the declaration of the ARCInstPrinter class, +/// This file contains the declaration of the ARCInstPrinter class, /// which is used to print ARC MCInst to a .s file. /// //===----------------------------------------------------------------------===// diff --git a/contrib/llvm/lib/Target/ARC/MCTargetDesc/ARCInfo.h b/contrib/llvm/lib/Target/ARC/MCTargetDesc/ARCInfo.h index b9ed99885702..401b4c5e6613 100644 --- a/contrib/llvm/lib/Target/ARC/MCTargetDesc/ARCInfo.h +++ b/contrib/llvm/lib/Target/ARC/MCTargetDesc/ARCInfo.h @@ -30,6 +30,8 @@ enum CondCode { N = 0x4, LO = 0x5, HS = 0x6, + VS = 0x7, + VC = 0x8, GT = 0x9, GE = 0xa, LT = 0xb, |