[llvm] [GISel][RISCV] Legalize G_CONSTANT_FOLD_BARRIER (PR #89960)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Fri May 17 19:59:40 PDT 2024
https://github.com/dtcxzyw updated https://github.com/llvm/llvm-project/pull/89960
>From 80a7f64539007c6caf5c20af6dda0d2a5d114cca Mon Sep 17 00:00:00 2001
From: Yingwei Zheng <dtcxzyw2333 at gmail.com>
Date: Thu, 25 Apr 2024 01:41:44 +0800
Subject: [PATCH 1/2] [GISel][RISCV] Legalize G_CONSTANT_FOLD_BARRIER
---
.../Target/RISCV/GISel/RISCVLegalizerInfo.cpp | 2 +-
.../legalizer/legalize-constbarrier-rv32.mir | 31 +++++++++
.../legalizer/legalize-constbarrier-rv64.mir | 64 +++++++++++++++++++
3 files changed, 96 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir
create mode 100644 llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir
diff --git a/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp b/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
index 38c1f9868d7db..adc68e9ee4a89 100644
--- a/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
+++ b/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp
@@ -227,7 +227,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
ConstantActions.widenScalarToNextPow2(0).clampScalar(0, s32, sXLen);
// TODO: transform illegal vector types into legal vector type
- getActionDefinitionsBuilder(G_IMPLICIT_DEF)
+ getActionDefinitionsBuilder({G_IMPLICIT_DEF, G_CONSTANT_FOLD_BARRIER})
.legalFor({s32, sXLen, p0})
.legalIf(typeIsLegalBoolVec(0, BoolVecTys, ST))
.legalIf(typeIsLegalIntOrFPVec(0, IntOrFPVecTys, ST))
diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir
new file mode 100644
index 0000000000000..5d9da732b6317
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir
@@ -0,0 +1,31 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
+# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
+---
+name: xor_and_i32
+body: |
+ bb.1.entry:
+ liveins: $x10
+
+ ; CHECK-LABEL: name: xor_and_i32
+ ; CHECK: liveins: $x10
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C]]
+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[CONSTANT_FOLD_BARRIER]], [[C1]]
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[ADD]]
+ ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[AND]], [[CONSTANT_FOLD_BARRIER]]
+ ; CHECK-NEXT: $x10 = COPY [[XOR]](s32)
+ ; CHECK-NEXT: PseudoRET implicit $x10
+ %0:_(s32) = COPY $x10
+ %1:_(s32) = G_CONSTANT i32 16368
+ %3:_(s32) = G_CONSTANT i32 15
+ %2:_(s32) = G_CONSTANT_FOLD_BARRIER %1
+ %4:_(s32) = G_ADD %2, %3
+ %5:_(s32) = G_AND %0, %4
+ %6:_(s32) = G_XOR %5, %2
+ $x10 = COPY %6(s32)
+ PseudoRET implicit $x10
+
+...
diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir
new file mode 100644
index 0000000000000..2b4bb7eec54f8
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir
@@ -0,0 +1,64 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
+# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - | FileCheck %s
+---
+name: xor_and_i32
+body: |
+ bb.1.entry:
+ liveins: $x10
+
+ ; CHECK-LABEL: name: xor_and_i32
+ ; CHECK: liveins: $x10
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
+ ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C]]
+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[CONSTANT_FOLD_BARRIER]], [[C1]]
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[ADD]]
+ ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[AND]], [[CONSTANT_FOLD_BARRIER]]
+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[XOR]](s32)
+ ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)
+ ; CHECK-NEXT: PseudoRET implicit $x10
+ %1:_(s64) = COPY $x10
+ %0:_(s32) = G_TRUNC %1(s64)
+ %2:_(s32) = G_CONSTANT i32 16368
+ %4:_(s32) = G_CONSTANT i32 15
+ %3:_(s32) = G_CONSTANT_FOLD_BARRIER %2
+ %5:_(s32) = G_ADD %3, %4
+ %6:_(s32) = G_AND %0, %5
+ %7:_(s32) = G_XOR %6, %3
+ %8:_(s64) = G_ANYEXT %7(s32)
+ $x10 = COPY %8(s64)
+ PseudoRET implicit $x10
+
+...
+---
+name: xor_and_i64
+body: |
+ bb.1.entry:
+ liveins: $x10
+
+ ; CHECK-LABEL: name: xor_and_i64
+ ; CHECK: liveins: $x10
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16368
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 15
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s64) = G_CONSTANT_FOLD_BARRIER [[C]]
+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[CONSTANT_FOLD_BARRIER]], [[C1]]
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[ADD]]
+ ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[AND]], [[CONSTANT_FOLD_BARRIER]]
+ ; CHECK-NEXT: $x10 = COPY [[XOR]](s64)
+ ; CHECK-NEXT: PseudoRET implicit $x10
+ %0:_(s64) = COPY $x10
+ %1:_(s64) = G_CONSTANT i64 16368
+ %3:_(s64) = G_CONSTANT i64 15
+ %2:_(s64) = G_CONSTANT_FOLD_BARRIER %1
+ %4:_(s64) = G_ADD %2, %3
+ %5:_(s64) = G_AND %0, %4
+ %6:_(s64) = G_XOR %5, %2
+ $x10 = COPY %6(s64)
+ PseudoRET implicit $x10
+
+...
>From 4b5ee9b93f660df0e5a7cd9589e5384061af64f5 Mon Sep 17 00:00:00 2001
From: Yingwei Zheng <dtcxzyw2333 at gmail.com>
Date: Sat, 18 May 2024 10:59:14 +0800
Subject: [PATCH 2/2] [RISCV][GISel] Add more tests. NFC.
---
.../legalizer/legalize-constbarrier-rv32.mir | 62 ++++++----
.../legalizer/legalize-constbarrier-rv64.mir | 115 +++++++++++-------
2 files changed, 110 insertions(+), 67 deletions(-)
diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir
index 5d9da732b6317..6b1fc2042e2b8 100644
--- a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv32.mir
@@ -1,31 +1,51 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
-# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
+# RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
---
-name: xor_and_i32
+name: constbarrier_i32
body: |
- bb.1.entry:
- liveins: $x10
-
- ; CHECK-LABEL: name: xor_and_i32
- ; CHECK: liveins: $x10
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_i32
+ ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C]]
- ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[CONSTANT_FOLD_BARRIER]], [[C1]]
- ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[ADD]]
- ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[AND]], [[CONSTANT_FOLD_BARRIER]]
- ; CHECK-NEXT: $x10 = COPY [[XOR]](s32)
+ ; CHECK-NEXT: $x10 = COPY [[CONSTANT_FOLD_BARRIER]](s32)
; CHECK-NEXT: PseudoRET implicit $x10
- %0:_(s32) = COPY $x10
%1:_(s32) = G_CONSTANT i32 16368
- %3:_(s32) = G_CONSTANT i32 15
%2:_(s32) = G_CONSTANT_FOLD_BARRIER %1
- %4:_(s32) = G_ADD %2, %3
- %5:_(s32) = G_AND %0, %4
- %6:_(s32) = G_XOR %5, %2
- $x10 = COPY %6(s32)
+ $x10 = COPY %2(s32)
PseudoRET implicit $x10
...
+---
+name: constbarrier_nxv2i1
+body: |
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_nxv2i1
+ ; CHECK: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL $x0
+ ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMCLR_VL $x0
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s1>) = G_CONSTANT_FOLD_BARRIER [[VMCLR_VL]]
+ ; CHECK-NEXT: $v8 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s1>)
+ ; CHECK-NEXT: PseudoRET implicit $v8
+ %1:_(s1) = G_CONSTANT i1 0
+ %2:_(<vscale x 2 x s1>) = G_SPLAT_VECTOR %1(s1)
+ %3:_(<vscale x 2 x s1>) = G_CONSTANT_FOLD_BARRIER %2
+ $v8 = COPY %3(<vscale x 2 x s1>)
+ PseudoRET implicit $v8
+
+...
+---
+name: constbarrier_nxv2i32
+body: |
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_nxv2i32
+ ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
+ ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C]](s32)
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s32>) = G_CONSTANT_FOLD_BARRIER [[SPLAT_VECTOR]]
+ ; CHECK-NEXT: $v8 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s32>)
+ ; CHECK-NEXT: PseudoRET implicit $v8
+ %1:_(s32) = G_CONSTANT i32 0
+ %2:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR %1(s32)
+ %3:_(<vscale x 2 x s32>) = G_CONSTANT_FOLD_BARRIER %2
+ $v8 = COPY %3(<vscale x 2 x s32>)
+ PseudoRET implicit $v8
+
+...
diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir
index 2b4bb7eec54f8..de6a82beee2ab 100644
--- a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-constbarrier-rv64.mir
@@ -1,64 +1,87 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
-# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - | FileCheck %s
+# RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
---
-name: xor_and_i32
+name: constbarrier_i32
body: |
- bb.1.entry:
- liveins: $x10
-
- ; CHECK-LABEL: name: xor_and_i32
- ; CHECK: liveins: $x10
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
- ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_i32
+ ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16368
; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C]]
- ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[CONSTANT_FOLD_BARRIER]], [[C1]]
- ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[ADD]]
- ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[AND]], [[CONSTANT_FOLD_BARRIER]]
- ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[XOR]](s32)
+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[CONSTANT_FOLD_BARRIER]](s32)
; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)
; CHECK-NEXT: PseudoRET implicit $x10
- %1:_(s64) = COPY $x10
- %0:_(s32) = G_TRUNC %1(s64)
- %2:_(s32) = G_CONSTANT i32 16368
- %4:_(s32) = G_CONSTANT i32 15
- %3:_(s32) = G_CONSTANT_FOLD_BARRIER %2
- %5:_(s32) = G_ADD %3, %4
- %6:_(s32) = G_AND %0, %5
- %7:_(s32) = G_XOR %6, %3
- %8:_(s64) = G_ANYEXT %7(s32)
- $x10 = COPY %8(s64)
+ %1:_(s32) = G_CONSTANT i32 16368
+ %2:_(s32) = G_CONSTANT_FOLD_BARRIER %1
+ %3:_(s64) = G_ANYEXT %2(s32)
+ $x10 = COPY %3(s64)
PseudoRET implicit $x10
...
---
-name: xor_and_i64
+name: constbarrier_i64
body: |
- bb.1.entry:
- liveins: $x10
-
- ; CHECK-LABEL: name: xor_and_i64
- ; CHECK: liveins: $x10
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16368
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 15
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_i64
+ ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16368
; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s64) = G_CONSTANT_FOLD_BARRIER [[C]]
- ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[CONSTANT_FOLD_BARRIER]], [[C1]]
- ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[ADD]]
- ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[AND]], [[CONSTANT_FOLD_BARRIER]]
- ; CHECK-NEXT: $x10 = COPY [[XOR]](s64)
+ ; CHECK-NEXT: $x10 = COPY [[CONSTANT_FOLD_BARRIER]](s64)
; CHECK-NEXT: PseudoRET implicit $x10
- %0:_(s64) = COPY $x10
%1:_(s64) = G_CONSTANT i64 16368
- %3:_(s64) = G_CONSTANT i64 15
%2:_(s64) = G_CONSTANT_FOLD_BARRIER %1
- %4:_(s64) = G_ADD %2, %3
- %5:_(s64) = G_AND %0, %4
- %6:_(s64) = G_XOR %5, %2
- $x10 = COPY %6(s64)
+ $x10 = COPY %2(s64)
PseudoRET implicit $x10
...
+---
+name: constbarrier_nxv2i1
+body: |
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_nxv2i1
+ ; CHECK: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL $x0
+ ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMCLR_VL $x0
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s1>) = G_CONSTANT_FOLD_BARRIER [[VMCLR_VL]]
+ ; CHECK-NEXT: $v8 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s1>)
+ ; CHECK-NEXT: PseudoRET implicit $v8
+ %1:_(s1) = G_CONSTANT i1 0
+ %2:_(<vscale x 2 x s1>) = G_SPLAT_VECTOR %1(s1)
+ %3:_(<vscale x 2 x s1>) = G_CONSTANT_FOLD_BARRIER %2
+ $v8 = COPY %3(<vscale x 2 x s1>)
+ PseudoRET implicit $v8
+
+...
+---
+name: constbarrier_nxv2i32
+body: |
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_nxv2i32
+ ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)
+ ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[ANYEXT]](s64)
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s32>) = G_CONSTANT_FOLD_BARRIER [[SPLAT_VECTOR]]
+ ; CHECK-NEXT: $v8 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s32>)
+ ; CHECK-NEXT: PseudoRET implicit $v8
+ %1:_(s32) = G_CONSTANT i32 0
+ %2:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR %1(s32)
+ %3:_(<vscale x 2 x s32>) = G_CONSTANT_FOLD_BARRIER %2
+ $v8 = COPY %3(<vscale x 2 x s32>)
+ PseudoRET implicit $v8
+
+...
+---
+name: constbarrier_nxv2i64
+body: |
+ bb.0.entry:
+ ; CHECK-LABEL: name: constbarrier_nxv2i64
+ ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+ ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR [[C]](s64)
+ ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(<vscale x 2 x s64>) = G_CONSTANT_FOLD_BARRIER [[SPLAT_VECTOR]]
+ ; CHECK-NEXT: $v8m2 = COPY [[CONSTANT_FOLD_BARRIER]](<vscale x 2 x s64>)
+ ; CHECK-NEXT: PseudoRET implicit $v8m2
+ %0:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF
+ %1:_(s64) = G_CONSTANT i64 0
+ %2:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR %1(s64)
+ %3:_(<vscale x 2 x s64>) = G_CONSTANT_FOLD_BARRIER %2(<vscale x 2 x s64>)
+ $v8m2 = COPY %3(<vscale x 2 x s64>)
+ PseudoRET implicit $v8m2
+
+...
More information about the llvm-commits
mailing list