[llvm] 801a30a - [CodeGen][MIR] Support parsing of scalable vectors in MIR (#70893)

via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 2 18:49:23 PDT 2023


Author: Michael Maitland
Date: 2023-11-02T21:49:18-04:00
New Revision: 801a30aa8ff1c2655d49a0fa88ff72f4e7056ab9

URL: https://github.com/llvm/llvm-project/commit/801a30aa8ff1c2655d49a0fa88ff72f4e7056ab9
DIFF: https://github.com/llvm/llvm-project/commit/801a30aa8ff1c2655d49a0fa88ff72f4e7056ab9.diff

LOG: [CodeGen][MIR] Support parsing of scalable vectors in MIR (#70893)

This patch builds on the support for vectors by adding ability to parse
scalable vectors in MIR and updates error messages to reflect that ability.

Added: 
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err0.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err1.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err10.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err11.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err12.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err13.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err14.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err15.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err2.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err3.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err4.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err5.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err6.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err7.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err8.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err9.mir
    llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir

Modified: 
    llvm/lib/CodeGen/MIRParser/MIParser.cpp
    llvm/test/CodeGen/MIR/AArch64/parse-low-level-type-invalid1.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index c01b34d6f490b0e..f5d80b2ae27c233 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, <M x sN>, or <M x pA> for GlobalISel type");
+    return error(Loc, "expected sN, pA, <M x sN>, <M x pA>, <vscale x M x sN>, "
+                      "or <vscale x M x pA> for GlobalISel type");
   lex();
 
-  if (Token.isNot(MIToken::IntegerLiteral))
+  bool HasVScale =
+      Token.is(MIToken::Identifier) && Token.stringValue() == "vscale";
+  if (HasVScale) {
+    lex();
+    if (Token.isNot(MIToken::Identifier) || Token.stringValue() != "x")
+      return error("expected <vscale x M x sN> or <vscale x M x pA>");
+    lex();
+  }
+
+  auto GetError = [this, &HasVScale, Loc]() {
+    if (HasVScale)
+      return error(
+          Loc, "expected <vscale x M x sN> or <vscale M x pA> for vector type");
     return error(Loc, "expected <M x sN> or <M x pA> for vector type");
+  };
+
+  if (Token.isNot(MIToken::IntegerLiteral))
+    return GetError();
   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 <M x sN> or <M x pA> for vector type");
+    return GetError();
   lex();
 
   if (Token.range().front() != 's' && Token.range().front() != 'p')
-    return error(Loc, "expected <M x sN> or <M x pA> for vector type");
+    return GetError();
+
   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,15 @@ bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) {
 
     Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS));
   } else
-    return error(Loc, "expected <M x sN> or <M x pA> for vector type");
+    return GetError();
   lex();
 
   if (Token.isNot(MIToken::greater))
-    return error(Loc, "expected <M x sN> or <M x pA> for vector type");
+    return GetError();
+
   lex();
 
-  Ty = LLT::fixed_vector(NumElements, Ty);
+  Ty = LLT::vector(ElementCount::get(NumElements, HasVScale), Ty);
   return false;
 }
 

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 3545640271d1072..4a7b68dab623afc 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, <M x sN>, or <M x pA> for GlobalISel type
+    ; CHECK: [[@LINE+1]]:10: expected sN, pA, <M x sN>, <M x pA>, <vscale x M x sN>, or <vscale x M x pA> for GlobalISel type
     %0:_(i64) = COPY $x0
 ...

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 000000000000000..5553d97acd00306
--- /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:_(<vscale) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale x M x pA>
+

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 000000000000000..12bfb82ebcd1244
--- /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:_(<vscale notanx) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale x M x pA>

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 000000000000000..7d7d7e49f23fe2d
--- /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:_(<vscale x 4 x p) = IMPLICIT_DEF
+...
+
+# CHECK: expected integers after 's'/'p' type character

diff  --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err11.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err11.mir
new file mode 100644
index 000000000000000..f8927c22ab45f78
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err11.mir
@@ -0,0 +1,10 @@
+# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s
+
+---
+name: err_after_vscalexMxs32
+body: |
+  bb.0:
+    %0:_(<vscale x 4 x s32) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..5ced1aea30c0855
--- /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:_(<vscale x 4 x p0) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..94b8230233fa62a
--- /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:_(<vscale x 4 x s32 X) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..323e2d975692fcf
--- /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:_(<vscale x 4 x p0 X) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..d1613869bf67142
--- /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, <M x sN>, <M x pA>, <vscale x M x sN>, or <vscale x M x pA> 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 000000000000000..c504a7d6be24927
--- /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:_(<vscale x) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..c504a7d6be24927
--- /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:_(<vscale x) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..654f534f4d30188
--- /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:_(<vscale x notanint) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..26be2868c522e8b
--- /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:_(<vscale x 4) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..07a30f57139dc61
--- /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:_(<vscale x 4 x) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..dba902efe6331d4
--- /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:_(<vscale x 4 x notansorp) = IMPLICIT_DEF
+...
+
+# CHECK: expected <vscale x M x sN> or <vscale M x pA> 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 000000000000000..8bedeabaa790685
--- /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:_(<vscale x 4 x s) = IMPLICIT_DEF
+...
+
+# CHECK: expected integers after 's'/'p' type character

diff  --git a/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err9.mir b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err9.mir
new file mode 100644
index 000000000000000..fd0b9a4a054abc2
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type-err9.mir
@@ -0,0 +1,11 @@
+# RUN: not llc -run-pass none -o - %s 2>&1 | FileCheck %s
+---
+name: err_after_vscalexMxpX
+body: |
+  bb.0:
+    %0:_(<vscale x 4 x pX) = IMPLICIT_DEF
+...
+
+# CHECK: expected integers after 's'/'p' type character
+
+

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 000000000000000..d9352fef1c6df2f
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/Generic/scalable-vector-type.mir
@@ -0,0 +1,133 @@
+# RUN: llc -run-pass=none -o - %s | FileCheck %s
+
+---
+name:            test_nxv1s8
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv1s8
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 1 x s8>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY [[DEF]](<vscale x 1 x s8>)
+    %0:_(<vscale x 1 x s8>) = IMPLICIT_DEF
+    %1:_(<vscale x 1 x s8>) = COPY %0
+...
+
+---
+name:            test_nxv1s16
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv1s16
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 1 x s16>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY [[DEF]](<vscale x 1 x s16>)
+    %0:_(<vscale x 1 x s16>) = IMPLICIT_DEF
+    %1:_(<vscale x 1 x s16>) = COPY %0
+...
+
+---
+name:            test_nxv1s32
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv1s32
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 1 x s32>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY [[DEF]](<vscale x 1 x s32>)
+    %0:_(<vscale x 1 x s32>) = IMPLICIT_DEF
+    %1:_(<vscale x 1 x s32>) = COPY %0
+...
+
+---
+name:            test_nxv1s64
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv1s64
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 1 x s64>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s64>) = COPY [[DEF]](<vscale x 1 x s64>)
+    %0:_(<vscale x 1 x s64>) = IMPLICIT_DEF
+    %1:_(<vscale x 1 x s64>) = COPY %0
+...
+
+---
+name:            test_nxv4s8
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv4s8
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 4 x s8>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY [[DEF]](<vscale x 4 x s8>)
+    %0:_(<vscale x 4 x s8>) = IMPLICIT_DEF
+    %1:_(<vscale x 4 x s8>) = COPY %0
+...
+
+---
+name:            test_nxv4s16
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv4s16
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 4 x s16>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY [[DEF]](<vscale x 4 x s16>)
+    %0:_(<vscale x 4 x s16>) = IMPLICIT_DEF
+    %1:_(<vscale x 4 x s16>) = COPY %0
+...
+
+---
+name:            test_nxv4s32
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv4s32
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 4 x s32>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY [[DEF]](<vscale x 4 x s32>)
+    %0:_(<vscale x 4 x s32>) = IMPLICIT_DEF
+    %1:_(<vscale x 4 x s32>) = COPY %0
+...
+
+---
+name:            test_nxv4s64
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv4s64
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 4 x s64>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY [[DEF]](<vscale x 4 x s64>)
+    %0:_(<vscale x 4 x s64>) = IMPLICIT_DEF
+    %1:_(<vscale x 4 x s64>) = COPY %0
+...
+
+---
+name:            test_nxv1p0
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv1p0
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 1 x p0>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x p0>) = COPY [[DEF]](<vscale x 1 x p0>)
+    %0:_(<vscale x 1 x p0>) = IMPLICIT_DEF
+    %1:_(<vscale x 1 x p0>) = COPY %0
+...
+
+---
+name:            test_nxv1sp1
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv1sp1
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 1 x p0>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x p0>) = COPY [[DEF]](<vscale x 1 x p0>)
+    %0:_(<vscale x 1 x p0>) = IMPLICIT_DEF
+    %1:_(<vscale x 1 x p0>) = COPY %0
+...
+
+---
+name:            test_nxv4p0
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv4p0
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 4 x p0>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x p0>) = COPY [[DEF]](<vscale x 4 x p0>)
+    %0:_(<vscale x 4 x p0>) = IMPLICIT_DEF
+    %1:_(<vscale x 4 x p0>) = COPY %0
+...
+
+---
+name:            test_nxv4p1
+body: |
+  bb.0:
+    ; CHECK-LABEL: name: test_nxv4p1
+    ; CHECK: [[DEF:%[0-9]+]]:_(<vscale x 4 x p1>) = IMPLICIT_DEF
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x p1>) = COPY [[DEF]](<vscale x 4 x p1>)
+    %0:_(<vscale x 4 x p1>) = IMPLICIT_DEF
+    %1:_(<vscale x 4 x p1>) = COPY %0
+...


        


More information about the llvm-commits mailing list