diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp | 199 | 
1 files changed, 100 insertions, 99 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp b/contrib/llvm-project/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp index a9cedf1dd97c..21d5f7653a68 100644 --- a/contrib/llvm-project/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp +++ b/contrib/llvm-project/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp @@ -55,11 +55,10 @@ class VEAsmParser : public MCTargetAsmParser {                                 OperandVector &Operands, MCStreamer &Out,                                 uint64_t &ErrorInfo,                                 bool MatchingInlineAsm) override; -  bool parseRegister(MCRegister &RegNo, SMLoc &StartLoc, -                     SMLoc &EndLoc) override; +  bool parseRegister(MCRegister &Reg, SMLoc &StartLoc, SMLoc &EndLoc) override;    int parseRegisterName(unsigned (*matchFn)(StringRef)); -  OperandMatchResultTy tryParseRegister(MCRegister &RegNo, SMLoc &StartLoc, -                                        SMLoc &EndLoc) override; +  ParseStatus tryParseRegister(MCRegister &Reg, SMLoc &StartLoc, +                               SMLoc &EndLoc) override;    bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name,                          SMLoc NameLoc, OperandVector &Operands) override;    ParseStatus parseDirective(AsmToken DirectiveID) override; @@ -68,13 +67,13 @@ class VEAsmParser : public MCTargetAsmParser {                                        unsigned Kind) override;    // Custom parse functions for VE specific operands. -  OperandMatchResultTy parseMEMOperand(OperandVector &Operands); -  OperandMatchResultTy parseMEMAsOperand(OperandVector &Operands); -  OperandMatchResultTy parseCCOpOperand(OperandVector &Operands); -  OperandMatchResultTy parseRDOpOperand(OperandVector &Operands); -  OperandMatchResultTy parseMImmOperand(OperandVector &Operands); -  OperandMatchResultTy parseOperand(OperandVector &Operands, StringRef Name); -  OperandMatchResultTy parseVEAsmOperand(std::unique_ptr<VEOperand> &Operand); +  ParseStatus parseMEMOperand(OperandVector &Operands); +  ParseStatus parseMEMAsOperand(OperandVector &Operands); +  ParseStatus parseCCOpOperand(OperandVector &Operands); +  ParseStatus parseRDOpOperand(OperandVector &Operands); +  ParseStatus parseMImmOperand(OperandVector &Operands); +  ParseStatus parseOperand(OperandVector &Operands, StringRef Name); +  ParseStatus parseVEAsmOperand(std::unique_ptr<VEOperand> &Operand);    // Helper function to parse expression with a symbol.    const MCExpr *extractModifierFromExpr(const MCExpr *E, @@ -797,9 +796,9 @@ bool VEAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,    llvm_unreachable("Implement any new match types added!");  } -bool VEAsmParser::parseRegister(MCRegister &RegNo, SMLoc &StartLoc, +bool VEAsmParser::parseRegister(MCRegister &Reg, SMLoc &StartLoc,                                  SMLoc &EndLoc) { -  if (tryParseRegister(RegNo, StartLoc, EndLoc) != MatchOperand_Success) +  if (!tryParseRegister(Reg, StartLoc, EndLoc).isSuccess())      return Error(StartLoc, "invalid register name");    return false;  } @@ -828,28 +827,27 @@ static unsigned MatchRegisterName(StringRef Name);  /// \note Generated by TableGen.  static unsigned MatchRegisterAltName(StringRef Name); -OperandMatchResultTy VEAsmParser::tryParseRegister(MCRegister &RegNo, -                                                   SMLoc &StartLoc, -                                                   SMLoc &EndLoc) { +ParseStatus VEAsmParser::tryParseRegister(MCRegister &Reg, SMLoc &StartLoc, +                                          SMLoc &EndLoc) {    const AsmToken Tok = Parser.getTok();    StartLoc = Tok.getLoc();    EndLoc = Tok.getEndLoc(); -  RegNo = 0; +  Reg = VE::NoRegister;    if (getLexer().getKind() != AsmToken::Percent) -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    Parser.Lex(); -  RegNo = parseRegisterName(&MatchRegisterName); -  if (RegNo == VE::NoRegister) -    RegNo = parseRegisterName(&MatchRegisterAltName); +  Reg = parseRegisterName(&MatchRegisterName); +  if (Reg == VE::NoRegister) +    Reg = parseRegisterName(&MatchRegisterAltName); -  if (RegNo != VE::NoRegister) { +  if (Reg != VE::NoRegister) {      Parser.Lex(); -    return MatchOperand_Success; +    return ParseStatus::Success;    }    getLexer().UnLex(Tok); -  return MatchOperand_NoMatch; +  return ParseStatus::NoMatch;  }  static StringRef parseCC(StringRef Name, unsigned Prefix, unsigned Suffix, @@ -925,31 +923,35 @@ StringRef VEAsmParser::splitMnemonic(StringRef Name, SMLoc NameLoc,          (Name[Next + 1] == 'd' || Name[Next + 1] == 's'))        ICC = false;      Mnemonic = parseCC(Name, Start, Next, ICC, true, NameLoc, Operands); -  } else if (Name.startswith("cmov.l.") || Name.startswith("cmov.w.") || -             Name.startswith("cmov.d.") || Name.startswith("cmov.s.")) { +  } else if (Name.starts_with("cmov.l.") || Name.starts_with("cmov.w.") || +             Name.starts_with("cmov.d.") || Name.starts_with("cmov.s.")) {      bool ICC = Name[5] == 'l' || Name[5] == 'w';      Mnemonic = parseCC(Name, 7, Name.size(), ICC, false, NameLoc, Operands); -  } else if (Name.startswith("cvt.w.d.sx") || Name.startswith("cvt.w.d.zx") || -             Name.startswith("cvt.w.s.sx") || Name.startswith("cvt.w.s.zx")) { +  } else if (Name.starts_with("cvt.w.d.sx") || Name.starts_with("cvt.w.d.zx") || +             Name.starts_with("cvt.w.s.sx") || Name.starts_with("cvt.w.s.zx")) {      Mnemonic = parseRD(Name, 10, NameLoc, Operands); -  } else if (Name.startswith("cvt.l.d")) { +  } else if (Name.starts_with("cvt.l.d")) {      Mnemonic = parseRD(Name, 7, NameLoc, Operands); -  } else if (Name.startswith("vcvt.w.d.sx") || Name.startswith("vcvt.w.d.zx") || -             Name.startswith("vcvt.w.s.sx") || Name.startswith("vcvt.w.s.zx")) { +  } else if (Name.starts_with("vcvt.w.d.sx") || +             Name.starts_with("vcvt.w.d.zx") || +             Name.starts_with("vcvt.w.s.sx") || +             Name.starts_with("vcvt.w.s.zx")) {      Mnemonic = parseRD(Name, 11, NameLoc, Operands); -  } else if (Name.startswith("vcvt.l.d")) { +  } else if (Name.starts_with("vcvt.l.d")) {      Mnemonic = parseRD(Name, 8, NameLoc, Operands); -  } else if (Name.startswith("pvcvt.w.s.lo") || -             Name.startswith("pvcvt.w.s.up")) { +  } else if (Name.starts_with("pvcvt.w.s.lo") || +             Name.starts_with("pvcvt.w.s.up")) {      Mnemonic = parseRD(Name, 12, NameLoc, Operands); -  } else if (Name.startswith("pvcvt.w.s")) { +  } else if (Name.starts_with("pvcvt.w.s")) {      Mnemonic = parseRD(Name, 9, NameLoc, Operands); -  } else if (Name.startswith("vfmk.l.") || Name.startswith("vfmk.w.") || -             Name.startswith("vfmk.d.") || Name.startswith("vfmk.s.")) { +  } else if (Name.starts_with("vfmk.l.") || Name.starts_with("vfmk.w.") || +             Name.starts_with("vfmk.d.") || Name.starts_with("vfmk.s.")) {      bool ICC = Name[5] == 'l' || Name[5] == 'w' ? true : false;      Mnemonic = parseCC(Name, 7, Name.size(), ICC, true, NameLoc, Operands); -  } else if (Name.startswith("pvfmk.w.lo.") || Name.startswith("pvfmk.w.up.") || -             Name.startswith("pvfmk.s.lo.") || Name.startswith("pvfmk.s.up.")) { +  } else if (Name.starts_with("pvfmk.w.lo.") || +             Name.starts_with("pvfmk.w.up.") || +             Name.starts_with("pvfmk.s.lo.") || +             Name.starts_with("pvfmk.s.up.")) {      bool ICC = Name[6] == 'l' || Name[6] == 'w' ? true : false;      Mnemonic = parseCC(Name, 11, Name.size(), ICC, true, NameLoc, Operands);    } else { @@ -976,7 +978,7 @@ bool VEAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,    if (getLexer().isNot(AsmToken::EndOfStatement)) {      // Read the first operand. -    if (parseOperand(Operands, Mnemonic) != MatchOperand_Success) { +    if (!parseOperand(Operands, Mnemonic).isSuccess()) {        SMLoc Loc = getLexer().getLoc();        return Error(Loc, "unexpected token");      } @@ -984,7 +986,7 @@ bool VEAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,      while (getLexer().is(AsmToken::Comma)) {        Parser.Lex(); // Eat the comma.        // Parse and remember the operand. -      if (parseOperand(Operands, Mnemonic) != MatchOperand_Success) { +      if (!parseOperand(Operands, Mnemonic).isSuccess()) {          SMLoc Loc = getLexer().getLoc();          return Error(Loc, "unexpected token");        } @@ -1195,7 +1197,7 @@ bool VEAsmParser::parseExpression(const MCExpr *&EVal) {    return false;  } -OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) { +ParseStatus VEAsmParser::parseMEMOperand(OperandVector &Operands) {    LLVM_DEBUG(dbgs() << "parseMEMOperand\n");    const AsmToken &Tok = Parser.getTok();    SMLoc S = Tok.getLoc(); @@ -1212,7 +1214,7 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {    std::unique_ptr<VEOperand> Offset;    switch (getLexer().getKind()) {    default: -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    case AsmToken::Minus:    case AsmToken::Integer: @@ -1222,7 +1224,7 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {      if (!parseExpression(EVal))        Offset = VEOperand::CreateImm(EVal, S, E);      else -      return MatchOperand_NoMatch; +      return ParseStatus::NoMatch;      break;    } @@ -1235,12 +1237,12 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {    switch (getLexer().getKind()) {    default: -    return MatchOperand_ParseFail; +    return ParseStatus::Failure;    case AsmToken::EndOfStatement:      Operands.push_back(VEOperand::MorphToMEMzii(          MCConstantExpr::create(0, getContext()), std::move(Offset))); -    return MatchOperand_Success; +    return ParseStatus::Success;    case AsmToken::LParen:      Parser.Lex(); // Eat the ( @@ -1253,14 +1255,14 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {    switch (getLexer().getKind()) {    default:      if (parseRegister(IndexReg, S, E)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      break;    case AsmToken::Minus:    case AsmToken::Integer:    case AsmToken::Dot:      if (getParser().parseExpression(IndexValue, E)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      break;    case AsmToken::Comma: @@ -1271,14 +1273,14 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {    switch (getLexer().getKind()) {    default: -    return MatchOperand_ParseFail; +    return ParseStatus::Failure;    case AsmToken::RParen:      Parser.Lex(); // Eat the )      Operands.push_back(          IndexValue ? VEOperand::MorphToMEMzii(IndexValue, std::move(Offset))                     : VEOperand::MorphToMEMzri(IndexReg, std::move(Offset))); -    return MatchOperand_Success; +    return ParseStatus::Success;    case AsmToken::Comma:      Parser.Lex(); // Eat the , @@ -1287,10 +1289,10 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {    MCRegister BaseReg;    if (parseRegister(BaseReg, S, E)) -    return MatchOperand_ParseFail; +    return ParseStatus::Failure;    if (!Parser.getTok().is(AsmToken::RParen)) -    return MatchOperand_ParseFail; +    return ParseStatus::Failure;    Parser.Lex(); // Eat the )    Operands.push_back( @@ -1298,10 +1300,10 @@ OperandMatchResultTy VEAsmParser::parseMEMOperand(OperandVector &Operands) {            ? VEOperand::MorphToMEMrii(BaseReg, IndexValue, std::move(Offset))            : VEOperand::MorphToMEMrri(BaseReg, IndexReg, std::move(Offset))); -  return MatchOperand_Success; +  return ParseStatus::Success;  } -OperandMatchResultTy VEAsmParser::parseMEMAsOperand(OperandVector &Operands) { +ParseStatus VEAsmParser::parseMEMAsOperand(OperandVector &Operands) {    LLVM_DEBUG(dbgs() << "parseMEMAsOperand\n");    const AsmToken &Tok = Parser.getTok();    SMLoc S = Tok.getLoc(); @@ -1319,7 +1321,7 @@ OperandMatchResultTy VEAsmParser::parseMEMAsOperand(OperandVector &Operands) {    std::unique_ptr<VEOperand> Offset;    switch (getLexer().getKind()) {    default: -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    case AsmToken::Minus:    case AsmToken::Integer: @@ -1329,13 +1331,13 @@ OperandMatchResultTy VEAsmParser::parseMEMAsOperand(OperandVector &Operands) {      if (!parseExpression(EVal))        Offset = VEOperand::CreateImm(EVal, S, E);      else -      return MatchOperand_NoMatch; +      return ParseStatus::NoMatch;      break;    }    case AsmToken::Percent:      if (parseRegister(BaseReg, S, E)) -      return MatchOperand_NoMatch; +      return ParseStatus::NoMatch;      Offset =          VEOperand::CreateImm(MCConstantExpr::create(0, getContext()), S, E);      break; @@ -1349,18 +1351,18 @@ OperandMatchResultTy VEAsmParser::parseMEMAsOperand(OperandVector &Operands) {    switch (getLexer().getKind()) {    default: -    return MatchOperand_ParseFail; +    return ParseStatus::Failure;    case AsmToken::EndOfStatement:    case AsmToken::Comma:      Operands.push_back(BaseReg != VE::NoRegister                             ? VEOperand::MorphToMEMri(BaseReg, std::move(Offset))                             : VEOperand::MorphToMEMzi(std::move(Offset))); -    return MatchOperand_Success; +    return ParseStatus::Success;    case AsmToken::LParen:      if (BaseReg != VE::NoRegister) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      Parser.Lex(); // Eat the (      break;    } @@ -1368,13 +1370,13 @@ OperandMatchResultTy VEAsmParser::parseMEMAsOperand(OperandVector &Operands) {    switch (getLexer().getKind()) {    default:      if (parseRegister(BaseReg, S, E)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      break;    case AsmToken::Comma:      Parser.Lex(); // Eat the ,      if (parseRegister(BaseReg, S, E)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      break;    case AsmToken::RParen: @@ -1382,23 +1384,23 @@ OperandMatchResultTy VEAsmParser::parseMEMAsOperand(OperandVector &Operands) {    }    if (!Parser.getTok().is(AsmToken::RParen)) -    return MatchOperand_ParseFail; +    return ParseStatus::Failure;    Parser.Lex(); // Eat the )    Operands.push_back(BaseReg != VE::NoRegister                           ? VEOperand::MorphToMEMri(BaseReg, std::move(Offset))                           : VEOperand::MorphToMEMzi(std::move(Offset))); -  return MatchOperand_Success; +  return ParseStatus::Success;  } -OperandMatchResultTy VEAsmParser::parseMImmOperand(OperandVector &Operands) { +ParseStatus VEAsmParser::parseMImmOperand(OperandVector &Operands) {    LLVM_DEBUG(dbgs() << "parseMImmOperand\n");    // Parsing "(" + number + ")0/1"    const AsmToken Tok1 = Parser.getTok();    if (!Tok1.is(AsmToken::LParen)) -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    Parser.Lex(); // Eat the '('. @@ -1407,14 +1409,14 @@ OperandMatchResultTy VEAsmParser::parseMImmOperand(OperandVector &Operands) {    const MCExpr *EVal;    if (!Tok2.is(AsmToken::Integer) || getParser().parseExpression(EVal, E)) {      getLexer().UnLex(Tok1); -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    }    const AsmToken Tok3 = Parser.getTok();    if (!Tok3.is(AsmToken::RParen)) {      getLexer().UnLex(Tok2);      getLexer().UnLex(Tok1); -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    }    Parser.Lex(); // Eat the ')'. @@ -1424,25 +1426,25 @@ OperandMatchResultTy VEAsmParser::parseMImmOperand(OperandVector &Operands) {      getLexer().UnLex(Tok3);      getLexer().UnLex(Tok2);      getLexer().UnLex(Tok1); -    return MatchOperand_NoMatch; +    return ParseStatus::NoMatch;    }    Parser.Lex(); // Eat the value.    SMLoc EndLoc = SMLoc::getFromPointer(Suffix.end());    Operands.push_back(        VEOperand::CreateMImm(EVal, Suffix == "0", Tok1.getLoc(), EndLoc)); -  return MatchOperand_Success; +  return ParseStatus::Success;  } -OperandMatchResultTy VEAsmParser::parseOperand(OperandVector &Operands, -                                               StringRef Mnemonic) { +ParseStatus VEAsmParser::parseOperand(OperandVector &Operands, +                                      StringRef Mnemonic) {    LLVM_DEBUG(dbgs() << "parseOperand\n"); -  OperandMatchResultTy ResTy = MatchOperandParserImpl(Operands, Mnemonic); +  ParseStatus Res = MatchOperandParserImpl(Operands, Mnemonic);    // If there wasn't a custom match, try the generic matcher below. Otherwise,    // there was a match, but an error occurred, in which case, just return that    // the operand parsing failed. -  if (ResTy == MatchOperand_Success || ResTy == MatchOperand_ParseFail) -    return ResTy; +  if (Res.isSuccess() || Res.isFailure()) +    return Res;    switch (getLexer().getKind()) {    case AsmToken::LParen: { @@ -1450,28 +1452,28 @@ OperandMatchResultTy VEAsmParser::parseOperand(OperandVector &Operands,      const AsmToken Tok1 = Parser.getTok();      Parser.Lex(); // Eat the '('. -    MCRegister RegNo1; +    MCRegister Reg1;      SMLoc S1, E1; -    if (tryParseRegister(RegNo1, S1, E1) != MatchOperand_Success) { +    if (!tryParseRegister(Reg1, S1, E1).isSuccess()) {        getLexer().UnLex(Tok1); -      return MatchOperand_NoMatch; +      return ParseStatus::NoMatch;      }      if (!Parser.getTok().is(AsmToken::Comma)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      Parser.Lex(); // Eat the ','. -    MCRegister RegNo2; +    MCRegister Reg2;      SMLoc S2, E2; -    if (tryParseRegister(RegNo2, S2, E2) != MatchOperand_Success) -      return MatchOperand_ParseFail; +    if (!tryParseRegister(Reg2, S2, E2).isSuccess()) +      return ParseStatus::Failure;      if (!Parser.getTok().is(AsmToken::RParen)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      Operands.push_back(VEOperand::CreateToken(Tok1.getString(), Tok1.getLoc())); -    Operands.push_back(VEOperand::CreateReg(RegNo1, S1, E1)); -    Operands.push_back(VEOperand::CreateReg(RegNo2, S2, E2)); +    Operands.push_back(VEOperand::CreateReg(Reg1, S1, E1)); +    Operands.push_back(VEOperand::CreateReg(Reg2, S2, E2));      Operands.push_back(VEOperand::CreateToken(Parser.getTok().getString(),                                                Parser.getTok().getLoc()));      Parser.Lex(); // Eat the ')'. @@ -1479,9 +1481,9 @@ OperandMatchResultTy VEAsmParser::parseOperand(OperandVector &Operands,    }    default: {      std::unique_ptr<VEOperand> Op; -    ResTy = parseVEAsmOperand(Op); -    if (ResTy != MatchOperand_Success || !Op) -      return MatchOperand_ParseFail; +    Res = parseVEAsmOperand(Op); +    if (!Res.isSuccess() || !Op) +      return ParseStatus::Failure;      // Push the parsed operand into the list of operands      Operands.push_back(std::move(Op)); @@ -1495,12 +1497,12 @@ OperandMatchResultTy VEAsmParser::parseOperand(OperandVector &Operands,      Parser.Lex(); // Eat the '('.      std::unique_ptr<VEOperand> Op2; -    ResTy = parseVEAsmOperand(Op2); -    if (ResTy != MatchOperand_Success || !Op2) -      return MatchOperand_ParseFail; +    Res = parseVEAsmOperand(Op2); +    if (!Res.isSuccess() || !Op2) +      return ParseStatus::Failure;      if (!Parser.getTok().is(AsmToken::RParen)) -      return MatchOperand_ParseFail; +      return ParseStatus::Failure;      Operands.push_back(std::move(Op1));      Operands.push_back(std::move(Op2)); @@ -1511,11 +1513,10 @@ OperandMatchResultTy VEAsmParser::parseOperand(OperandVector &Operands,    }    } -  return MatchOperand_Success; +  return ParseStatus::Success;  } -OperandMatchResultTy -VEAsmParser::parseVEAsmOperand(std::unique_ptr<VEOperand> &Op) { +ParseStatus VEAsmParser::parseVEAsmOperand(std::unique_ptr<VEOperand> &Op) {    LLVM_DEBUG(dbgs() << "parseVEAsmOperand\n");    SMLoc S = Parser.getTok().getLoc();    SMLoc E = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1); @@ -1527,9 +1528,9 @@ VEAsmParser::parseVEAsmOperand(std::unique_ptr<VEOperand> &Op) {      break;    case AsmToken::Percent: { -    MCRegister RegNo; -    if (tryParseRegister(RegNo, S, E) == MatchOperand_Success) -      Op = VEOperand::CreateReg(RegNo, S, E); +    MCRegister Reg; +    if (tryParseRegister(Reg, S, E).isSuccess()) +      Op = VEOperand::CreateReg(Reg, S, E);      break;    }    case AsmToken::Minus: @@ -1540,7 +1541,7 @@ VEAsmParser::parseVEAsmOperand(std::unique_ptr<VEOperand> &Op) {        Op = VEOperand::CreateImm(EVal, S, E);      break;    } -  return (Op) ? MatchOperand_Success : MatchOperand_ParseFail; +  return Op ? ParseStatus::Success : ParseStatus::Failure;  }  // Force static initialization.  | 
