From f7a5dec1776c50e2ad0b5bb503521940df753f98 Mon Sep 17 00:00:00 2001 From: Michael Maitland Date: Tue, 31 Oct 2023 20:39:46 -0700 Subject: [PATCH 1/5] [CodeGen][MIR] Support parsing of scalable vectors in MIR This patch builds on the support for vectors by adding ability to parse scalable vectors in MIR. --- llvm/lib/CodeGen/MIRParser/MIParser.cpp | 37 +++++++++++++++---- .../MIR/Generic/scalable-vector-type.mir | 23 ++++++++++++ 2 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp index c01b34d6f490b..0da664e935f54 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp @@ -1946,12 +1946,28 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { // Now we're looking for a vector. if (Token.isNot(MIToken::less)) - return error(Loc, - "expected sN, pA, , or for GlobalISel type"); + return error(Loc, "expected sN, pA, , , , " + "or for GlobalISel type"); lex(); + bool HasVScale = Token.stringValue() == "vscale"; + if (HasVScale) { + lex(); + if (Token.stringValue() != "x") + return error("expected or "); + lex(); + } + + auto GetError = [&](bool HasVScale, StringRef::iterator Loc) { + if (HasVScale) + return error( + Loc, "expected or for vector type"); + else + return error(Loc, "expected or for vector type"); + }; + if (Token.isNot(MIToken::IntegerLiteral)) - return error(Loc, "expected or for vector type"); + return GetError(HasVScale, Loc); uint64_t NumElements = Token.integerValue().getZExtValue(); if (!verifyVectorElementCount(NumElements)) return error("invalid number of vector elements"); @@ -1959,11 +1975,12 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { lex(); if (Token.isNot(MIToken::Identifier) || Token.stringValue() != "x") - return error(Loc, "expected or for vector type"); + return GetError(HasVScale, Loc); lex(); if (Token.range().front() != 's' && Token.range().front() != 'p') - return error(Loc, "expected or for vector type"); + return GetError(HasVScale, Loc); + StringRef SizeStr = Token.range().drop_front(); if (SizeStr.size() == 0 || !llvm::all_of(SizeStr, isdigit)) return error("expected integers after 's'/'p' type character"); @@ -1981,14 +1998,18 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS)); } else - return error(Loc, "expected or for vector type"); + return GetError(HasVScale, Loc); lex(); if (Token.isNot(MIToken::greater)) - return error(Loc, "expected or for vector type"); + return GetError(HasVScale, Loc); + lex(); - Ty = LLT::fixed_vector(NumElements, Ty); + if (HasVScale) + Ty = LLT::scalable_vector(NumElements, Ty); + else + Ty = LLT::fixed_vector(NumElements, Ty); return false; } diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir new file mode 100644 index 0000000000000..61ac8411b6450 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir @@ -0,0 +1,23 @@ +# RUN: llc -run-pass=none -o - %s | FileCheck %s + +--- +name: scalable_vector_type_s +body: | + bb.0: + ; CHECK-LABEL: name: scalable_vector_type_s + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: scalable_vector_type_p +body: | + bb.0: + ; CHECK-LABEL: name: scalable_vector_type_p + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... From 959c08d8188e303aca1f7cf13e5e0769c04ba0b4 Mon Sep 17 00:00:00 2001 From: Michael Maitland Date: Wed, 1 Nov 2023 10:35:06 -0700 Subject: [PATCH 2/5] Add more tests and fix craigs comments about parser --- llvm/lib/CodeGen/MIRParser/MIParser.cpp | 22 ++-- .../MIR/Generic/scalable-vector-type.mir | 118 +++++++++++++++++- 2 files changed, 124 insertions(+), 16 deletions(-) diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp index 0da664e935f54..22d23c18e330d 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp @@ -1950,15 +1950,16 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { "or for GlobalISel type"); lex(); - bool HasVScale = Token.stringValue() == "vscale"; + bool HasVScale = + Token.is(MIToken::Identifier) && Token.stringValue() == "vscale"; if (HasVScale) { lex(); - if (Token.stringValue() != "x") + if (Token.isNot(MIToken::Identifier) || Token.stringValue() != "x") return error("expected or "); lex(); } - auto GetError = [&](bool HasVScale, StringRef::iterator Loc) { + auto GetError = [this, &HasVScale, Loc]() { if (HasVScale) return error( Loc, "expected or for vector type"); @@ -1967,7 +1968,7 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { }; if (Token.isNot(MIToken::IntegerLiteral)) - return GetError(HasVScale, Loc); + return GetError(); uint64_t NumElements = Token.integerValue().getZExtValue(); if (!verifyVectorElementCount(NumElements)) return error("invalid number of vector elements"); @@ -1975,11 +1976,11 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { lex(); if (Token.isNot(MIToken::Identifier) || Token.stringValue() != "x") - return GetError(HasVScale, Loc); + return GetError(); lex(); if (Token.range().front() != 's' && Token.range().front() != 'p') - return GetError(HasVScale, Loc); + return GetError(); StringRef SizeStr = Token.range().drop_front(); if (SizeStr.size() == 0 || !llvm::all_of(SizeStr, isdigit)) @@ -1998,18 +1999,15 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS)); } else - return GetError(HasVScale, Loc); + return GetError(); lex(); if (Token.isNot(MIToken::greater)) - return GetError(HasVScale, Loc); + return GetError(); lex(); - if (HasVScale) - Ty = LLT::scalable_vector(NumElements, Ty); - else - Ty = LLT::fixed_vector(NumElements, Ty); + Ty = LLT::vector(ElementCount::get(NumElements, HasVScale), Ty); return false; } diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir index 61ac8411b6450..d9352fef1c6df 100644 --- a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir @@ -1,10 +1,10 @@ # RUN: llc -run-pass=none -o - %s | FileCheck %s --- -name: scalable_vector_type_s +name: test_nxv1s8 body: | bb.0: - ; CHECK-LABEL: name: scalable_vector_type_s + ; CHECK-LABEL: name: test_nxv1s8 ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() %0:_() = IMPLICIT_DEF @@ -12,12 +12,122 @@ body: | ... --- -name: scalable_vector_type_p +name: test_nxv1s16 body: | bb.0: - ; CHECK-LABEL: name: scalable_vector_type_p + ; CHECK-LABEL: name: test_nxv1s16 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv1s32 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv1s32 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv1s64 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv1s64 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv4s8 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv4s8 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv4s16 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv4s16 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv4s32 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv4s32 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv4s64 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv4s64 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv1p0 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv1p0 ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() %0:_() = IMPLICIT_DEF %1:_() = COPY %0 ... + +--- +name: test_nxv1sp1 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv1sp1 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv4p0 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv4p0 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... + +--- +name: test_nxv4p1 +body: | + bb.0: + ; CHECK-LABEL: name: test_nxv4p1 + ; CHECK: [[DEF:%[0-9]+]]:_() = IMPLICIT_DEF + ; CHECK-NEXT: [[COPY:%[0-9]+]]:_() = COPY [[DEF]]() + %0:_() = IMPLICIT_DEF + %1:_() = COPY %0 +... From 538e6a1ebb1f7172cd2e427b0592be5968abec8f Mon Sep 17 00:00:00 2001 From: Michael Maitland Date: Wed, 1 Nov 2023 11:40:18 -0700 Subject: [PATCH 3/5] add test cases for failures --- .../CodeGen/MIR/Generic/scalable-vector-type-err0.mir | 10 ++++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err1.mir | 9 +++++++++ .../MIR/Generic/scalable-vector-type-err10.mir | 10 ++++++++++ .../MIR/Generic/scalable-vector-type-err11.mir | 10 ++++++++++ .../MIR/Generic/scalable-vector-type-err12.mir | 10 ++++++++++ .../MIR/Generic/scalable-vector-type-err13.mir | 10 ++++++++++ .../MIR/Generic/scalable-vector-type-err14.mir | 10 ++++++++++ .../MIR/Generic/scalable-vector-type-err15.mir | 10 ++++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err2.mir | 9 +++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err3.mir | 9 +++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err4.mir | 10 ++++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err5.mir | 9 +++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err6.mir | 11 +++++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err7.mir | 9 +++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err8.mir | 10 ++++++++++ .../CodeGen/MIR/Generic/scalable-vector-type-err9.mir | 11 +++++++++++ 16 files changed, 157 insertions(+) create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err0.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err1.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err10.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err11.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err12.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err13.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err14.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err15.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err2.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err3.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err4.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err5.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err6.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err7.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err8.mir create mode 100644 llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err9.mir diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err0.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err0.mir new file mode 100644 index 0000000000000..5553d97acd003 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err0.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscale0 +body: | + bb.0: + %0:_( or + diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err1.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err1.mir new file mode 100644 index 0000000000000..12bfb82ebcd12 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err1.mir @@ -0,0 +1,9 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscale1 +body: | + bb.0: + %0:_( or diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err10.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err10.mir new file mode 100644 index 0000000000000..7d7d7e49f23fe --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err10.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscalexMxp +body: | + bb.0: + %0:_(&1 | FileCheck %s + +--- +name: err_after_vscalexMxs32 +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err12.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err12.mir new file mode 100644 index 0000000000000..5ced1aea30c08 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err12.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscalexMxp0 +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err13.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err13.mir new file mode 100644 index 0000000000000..94b8230233fa6 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err13.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscalexMxs32X +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err14.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err14.mir new file mode 100644 index 0000000000000..323e2d975692f --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err14.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscalexMxp0 +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err15.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err15.mir new file mode 100644 index 0000000000000..d1613869bf671 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err15.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscale0 +body: | + bb.0: + %0:_(notatype) = IMPLICIT_DEF +... + +# CHECK: expected sN, pA, , , , or for GlobalISel type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err2.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err2.mir new file mode 100644 index 0000000000000..c504a7d6be249 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err2.mir @@ -0,0 +1,9 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscalex0 +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err3.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err3.mir new file mode 100644 index 0000000000000..c504a7d6be249 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err3.mir @@ -0,0 +1,9 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscalex0 +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err4.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err4.mir new file mode 100644 index 0000000000000..654f534f4d301 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err4.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscalex1 +body: | + bb.0: + %0:_( or for vector type + diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err5.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err5.mir new file mode 100644 index 0000000000000..26be2868c522e --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err5.mir @@ -0,0 +1,9 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscalexM +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err6.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err6.mir new file mode 100644 index 0000000000000..07a30f57139dc --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err6.mir @@ -0,0 +1,11 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscalexMx0 +body: | + bb.0: + %0:_( or for vector type + diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err7.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err7.mir new file mode 100644 index 0000000000000..dba902efe6331 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err7.mir @@ -0,0 +1,9 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s +--- +name: err_after_vscalexMx1 +body: | + bb.0: + %0:_( or for vector type diff --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err8.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err8.mir new file mode 100644 index 0000000000000..8bedeabaa7906 --- /dev/null +++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err8.mir @@ -0,0 +1,10 @@ +# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s + +--- +name: err_after_vscalexMxs +body: | + bb.0: + %0:_(&1 | FileCheck %s +--- +name: err_after_vscalexMxpX +body: | + bb.0: + %0:_( Date: Thu, 2 Nov 2023 18:47:58 -0700 Subject: [PATCH 4/5] fix test --- llvm/test/CodeGen/MIR/AArch64/parse-low-level-type-invalid1.mir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/test/CodeGen/MIR/AArch64/parse-low-level-type-invalid1.mir b/llvm/test/CodeGen/MIR/AArch64/parse-low-level-type-invalid1.mir index 3545640271d10..4a7b68dab623a 100644 --- a/llvm/test/CodeGen/MIR/AArch64/parse-low-level-type-invalid1.mir +++ b/llvm/test/CodeGen/MIR/AArch64/parse-low-level-type-invalid1.mir @@ -5,6 +5,6 @@ name: test_low_level_type_does_not_start_with_s_p_lt body: | bb.0: liveins: $x0 - ; CHECK: [[@LINE+1]]:10: expected sN, pA, , or for GlobalISel type + ; CHECK: [[@LINE+1]]:10: expected sN, pA, , , , or for GlobalISel type %0:_(i64) = COPY $x0 ... From 71409f78142563da8825b2a6c33d7492e5ac8138 Mon Sep 17 00:00:00 2001 From: Michael Maitland Date: Thu, 2 Nov 2023 18:48:35 -0700 Subject: [PATCH 5/5] no return after else --- llvm/lib/CodeGen/MIRParser/MIParser.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp index 22d23c18e330d..f5d80b2ae27c2 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp @@ -1963,8 +1963,7 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { if (HasVScale) return error( Loc, "expected or for vector type"); - else - return error(Loc, "expected or for vector type"); + return error(Loc, "expected or for vector type"); }; if (Token.isNot(MIToken::IntegerLiteral))