[llvm] [AArch64] Split misched-fusion.ll per feature(NFC) (PR #203576)
Tomer Shafir via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 14 02:00:51 PDT 2026
https://github.com/tomershafir updated https://github.com/llvm/llvm-project/pull/203576
>From a8dc12b4f3307b3234a3fcf3261c220c2d5f03d9 Mon Sep 17 00:00:00 2001
From: tomershafir <tomer.shafir8 at gmail.com>
Date: Fri, 12 Jun 2026 14:39:27 +0300
Subject: [PATCH 1/2] [AArch64] Split misched-fusion.ll per feature(NFC)
This patch splits misched-fusion.ll into 2 tests one for each feature: arith+bcc and arith+cbz. As part of the refactor, it increases coverage by introducing test cases for each possible pair as well as negative test cases for positive shift operands. The patch also introduces a new structured dual testing strategy - one .ll and one .mir test for each feature, to provide codegen and misched coverage for asserts-off and asserts-on builds.
Plus apple-m5 runlines.
---
.../AArch64/misched-fusion-arith-bcc.ll | 243 +++
.../AArch64/misched-fusion-arith-bcc.mir | 665 ++++++++
.../AArch64/misched-fusion-arith-cbz.ll | 689 ++++++++
.../AArch64/misched-fusion-arith-cbz.mir | 1501 +++++++++++++++++
llvm/test/CodeGen/AArch64/misched-fusion.ll | 48 -
5 files changed, 3098 insertions(+), 48 deletions(-)
create mode 100644 llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.ll
create mode 100644 llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir
create mode 100644 llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.ll
create mode 100644 llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
delete mode 100644 llvm/test/CodeGen/AArch64/misched-fusion.ll
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.ll b/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.ll
new file mode 100644
index 0000000000000..9f5a8ab344e4d
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.ll
@@ -0,0 +1,243 @@
+; RUN: llc -o - %s -mtriple=aarch64-unknown -mcpu=cortex-a57 -mattr=+arith-bcc-fusion | FileCheck %s
+; RUN: llc -o - %s -mtriple=aarch64-unknown -mcpu=cyclone | FileCheck %s
+; RUN: llc -o - %s -mtriple=aarch64-unknown -mcpu=apple-m5 | FileCheck %s
+
+target triple = "aarch64-unknown"
+
+declare void @fi32(i32, i32)
+declare void @fi64(i64, i64)
+
+; CHECK-LABEL: subswri:
+; CHECK: cmp {{w[0-9]+}}, #13
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @subswri(i32 %a) {
+entry:
+ %cond = icmp eq i32 %a, 13
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %a)
+ br label %exit
+exit:
+ call void @fi32(i32 %a, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subswrr:
+; CHECK: cmp {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @subswrr(i32 %a, i32 %b) {
+entry:
+ %cond = icmp eq i32 %a, %b
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %a)
+ br label %exit
+exit:
+ call void @fi32(i32 %a, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addswri:
+; CHECK: cmn {{w[0-9]+}}, #13
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @addswri(i32 %a) {
+entry:
+ %cond = icmp eq i32 %a, -13
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %a)
+ br label %exit
+exit:
+ call void @fi32(i32 %a, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addswrr:
+; CHECK: cmn {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @addswrr(i32 %a, i32 %b) {
+entry:
+ %nb = sub i32 0, %b
+ %cond = icmp eq i32 %a, %nb
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %a)
+ br label %exit
+exit:
+ call void @fi32(i32 %a, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andswri:
+; CHECK: ands {{w[0-9]+}}, {{w[0-9]+}}, #0x1000
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @andswri(i32 %a) {
+entry:
+ %v0 = and i32 %a, 4096
+ %cond = icmp slt i32 %v0, 0
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andswrr:
+; CHECK: ands {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @andswrr(i32 %a, i32 %b) {
+entry:
+ %v0 = and i32 %a, %b
+ %cond = icmp slt i32 %v0, 0
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: bicswrr:
+; CHECK: bics {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @bicswrr(i32 %a, i32 %b) {
+entry:
+ %n = xor i32 %b, -1
+ %v0 = and i32 %a, %n
+ %cond = icmp slt i32 %v0, 0
+ %v1 = add i32 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subsxri:
+; CHECK: cmp {{x[0-9]+}}, #13
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @subsxri(i64 %a) {
+entry:
+ %cond = icmp eq i64 %a, 13
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %a)
+ br label %exit
+exit:
+ call void @fi64(i64 %a, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subsxrr:
+; CHECK: cmp {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @subsxrr(i64 %a, i64 %b) {
+entry:
+ %cond = icmp eq i64 %a, %b
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %a)
+ br label %exit
+exit:
+ call void @fi64(i64 %a, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addsxri:
+; CHECK: cmn {{x[0-9]+}}, #13
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @addsxri(i64 %a) {
+entry:
+ %cond = icmp eq i64 %a, -13
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %a)
+ br label %exit
+exit:
+ call void @fi64(i64 %a, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addsxrr:
+; CHECK: cmn {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @addsxrr(i64 %a, i64 %b) {
+entry:
+ %nb = sub i64 0, %b
+ %cond = icmp eq i64 %a, %nb
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %a)
+ br label %exit
+exit:
+ call void @fi64(i64 %a, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andsxri:
+; CHECK: ands {{x[0-9]+}}, {{x[0-9]+}}, #0x2000
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @andsxri(i64 %a) {
+entry:
+ %v0 = and i64 %a, 8192
+ %cond = icmp slt i64 %v0, 0
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andsxrr:
+; CHECK: ands {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @andsxrr(i64 %a, i64 %b) {
+entry:
+ %v0 = and i64 %a, %b
+ %cond = icmp slt i64 %v0, 0
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: bicsxrr:
+; CHECK: bics {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: b.{{[a-z][a-z]}}
+define void @bicsxrr(i64 %a, i64 %b) {
+entry:
+ %n = xor i64 %b, -1
+ %v0 = and i64 %a, %n
+ %cond = icmp slt i64 %v0, 0
+ %v1 = add i64 %a, 7
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir b/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir
new file mode 100644
index 0000000000000..ffa2769469978
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir
@@ -0,0 +1,665 @@
+# REQUIRES: asserts
+
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mattr=+arith-bcc-fusion -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=cyclone -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=apple-m5 -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWri $w0, 13, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: addswri
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDSWri $w0, 13, 0, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWrr $w0, $w1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: addswrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDSWrr $w0, $w1, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: addswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDSWrs $w0, $w1, 0, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_addswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDSWrs $w0, $w1, 12, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWri $w0, 4096, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: andswri
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDSWri $w0, 4096, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWrr $w0, $w1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: andswrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDSWrr $w0, $w1, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: andswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDSWrs $w0, $w1, 0, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_andswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDSWrs $w0, $w1, 12, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWri $w0, 13, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: subswri
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBSWri $w0, 13, 0, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWrr $w0, $w1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: subswrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBSWrr $w0, $w1, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: subswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBSWrs $w0, $w1, 0, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_subswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBSWrs $w0, $w1, 12, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICSWrr $w0, $w1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: bicswrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = BICSWrr $w0, $w1, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: bicswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = BICSWrs $w0, $w1, 0, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_bicswrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = BICSWrs $w0, $w1, 12, implicit-def $nzcv
+ $w3 = ORRWri $w2, 4096
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXri $x0, 13, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: addsxri
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDSXri $x0, 13, 0, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXrr $x0, $x1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: addsxrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDSXrr $x0, $x1, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: addsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDSXrs $x0, $x1, 0, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_addsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDSXrs $x0, $x1, 12, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXri $x0, 8192, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: andsxri
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDSXri $x0, 8192, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXrr $x0, $x1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: andsxrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDSXrr $x0, $x1, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: andsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDSXrs $x0, $x1, 0, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_andsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDSXrs $x0, $x1, 12, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXri $x0, 13, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: subsxri
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBSXri $x0, 13, 0, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXrr $x0, $x1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: subsxrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBSXrr $x0, $x1, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: subsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBSXrs $x0, $x1, 0, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_subsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBSXrs $x0, $x1, 12, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICSXrr $x0, $x1, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: bicsxrr
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = BICSXrr $x0, $x1, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: bicsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = BICSXrs $x0, $x1, 0, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: Bcc
+---
+name: no_fuse_positive_shift_bicsxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = BICSXrs $x0, $x1, 12, implicit-def $nzcv
+ $x3 = ORRXri $x2, 8192
+ Bcc 0, %bb.2, implicit $nzcv
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.ll b/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.ll
new file mode 100644
index 0000000000000..0355de12d448c
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.ll
@@ -0,0 +1,689 @@
+; RUN: llc -o - %s -mtriple=aarch64-unknown -aarch64-enable-cond-br-tune=false -mcpu=cortex-a57 -mattr=+arith-cbz-fusion | FileCheck %s
+; RUN: llc -o - %s -mtriple=aarch64-unknown -aarch64-enable-cond-br-tune=false -mcpu=cyclone | FileCheck %s
+; RUN: llc -o - %s -mtriple=aarch64-unknown -aarch64-enable-cond-br-tune=false -mcpu=apple-m5 | FileCheck %s
+
+target triple = "aarch64-unknown"
+
+declare void @fi32(i32, i32)
+declare void @fi64(i64, i64)
+
+; CHECK-LABEL: addwri_cbz:
+; CHECK: add [[R:w[0-9]+]], {{w[0-9]+}}, #13
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @addwri_cbz(i32 %a) {
+entry:
+ %v0 = add i32 %a, 13
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addwri_cbnz:
+; CHECK: add [[R:w[0-9]+]], {{w[0-9]+}}, #13
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @addwri_cbnz(i32 %a) {
+entry:
+ %v0 = add i32 %a, 13
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addwrr_cbz:
+; CHECK: add [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @addwrr_cbz(i32 %a, i32 %b) {
+entry:
+ %v0 = add i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addwrr_cbnz:
+; CHECK: add [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @addwrr_cbnz(i32 %a, i32 %b) {
+entry:
+ %v0 = add i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andwri_cbz:
+; CHECK: and [[R:w[0-9]+]], {{w[0-9]+}}, #0xff
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @andwri_cbz(i32 %a) {
+entry:
+ %v0 = and i32 %a, 255
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andwri_cbnz:
+; CHECK: and [[R:w[0-9]+]], {{w[0-9]+}}, #0xff
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @andwri_cbnz(i32 %a) {
+entry:
+ %v0 = and i32 %a, 255
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andwrr_cbz:
+; CHECK: and [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @andwrr_cbz(i32 %a, i32 %b) {
+entry:
+ %v0 = and i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andwrr_cbnz:
+; CHECK: and [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @andwrr_cbnz(i32 %a, i32 %b) {
+entry:
+ %v0 = and i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorwri_cbz:
+; CHECK: eor [[R:w[0-9]+]], {{w[0-9]+}}, #0xff
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @eorwri_cbz(i32 %a) {
+entry:
+ %v0 = xor i32 %a, 255
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorwri_cbnz:
+; CHECK: eor [[R:w[0-9]+]], {{w[0-9]+}}, #0xff
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @eorwri_cbnz(i32 %a) {
+entry:
+ %v0 = xor i32 %a, 255
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorwrr_cbz:
+; CHECK: eor [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @eorwrr_cbz(i32 %a, i32 %b) {
+entry:
+ %v0 = xor i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorwrr_cbnz:
+; CHECK: eor [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @eorwrr_cbnz(i32 %a, i32 %b) {
+entry:
+ %v0 = xor i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrwri_cbz:
+; CHECK: orr [[R:w[0-9]+]], {{w[0-9]+}}, #0xff
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @orrwri_cbz(i32 %a) {
+entry:
+ %v0 = or i32 %a, 255
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrwri_cbnz:
+; CHECK: orr [[R:w[0-9]+]], {{w[0-9]+}}, #0xff
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @orrwri_cbnz(i32 %a) {
+entry:
+ %v0 = or i32 %a, 255
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrwrr_cbz:
+; CHECK: orr [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @orrwrr_cbz(i32 %a, i32 %b) {
+entry:
+ %v0 = or i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrwrr_cbnz:
+; CHECK: orr [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @orrwrr_cbnz(i32 %a, i32 %b) {
+entry:
+ %v0 = or i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subwri_cbz:
+; CHECK: sub [[R:w[0-9]+]], {{w[0-9]+}}, #13
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @subwri_cbz(i32 %a) {
+entry:
+ %v0 = sub i32 %a, 13
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subwri_cbnz:
+; CHECK: sub [[R:w[0-9]+]], {{w[0-9]+}}, #13
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @subwri_cbnz(i32 %a) {
+entry:
+ %v0 = sub i32 %a, 13
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subwrr_cbz:
+; CHECK: sub [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @subwrr_cbz(i32 %a, i32 %b) {
+entry:
+ %v0 = sub i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp ne i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subwrr_cbnz:
+; CHECK: sub [[R:w[0-9]+]], {{w[0-9]+}}, {{w[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @subwrr_cbnz(i32 %a, i32 %b) {
+entry:
+ %v0 = sub i32 %a, %b
+ %v1 = add i32 %a, 7
+ %cond = icmp eq i32 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi32(i32 %v1, i32 %v0)
+ br label %exit
+exit:
+ call void @fi32(i32 %v0, i32 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addxri_cbz:
+; CHECK: add [[R:x[0-9]+]], {{x[0-9]+}}, #13
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @addxri_cbz(i64 %a) {
+entry:
+ %v0 = add i64 %a, 13
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addxri_cbnz:
+; CHECK: add [[R:x[0-9]+]], {{x[0-9]+}}, #13
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @addxri_cbnz(i64 %a) {
+entry:
+ %v0 = add i64 %a, 13
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addxrr_cbz:
+; CHECK: add [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @addxrr_cbz(i64 %a, i64 %b) {
+entry:
+ %v0 = add i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: addxrr_cbnz:
+; CHECK: add [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @addxrr_cbnz(i64 %a, i64 %b) {
+entry:
+ %v0 = add i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andxri_cbz:
+; CHECK: and [[R:x[0-9]+]], {{x[0-9]+}}, #0xff
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @andxri_cbz(i64 %a) {
+entry:
+ %v0 = and i64 %a, 255
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andxri_cbnz:
+; CHECK: and [[R:x[0-9]+]], {{x[0-9]+}}, #0xff
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @andxri_cbnz(i64 %a) {
+entry:
+ %v0 = and i64 %a, 255
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andxrr_cbz:
+; CHECK: and [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @andxrr_cbz(i64 %a, i64 %b) {
+entry:
+ %v0 = and i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: andxrr_cbnz:
+; CHECK: and [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @andxrr_cbnz(i64 %a, i64 %b) {
+entry:
+ %v0 = and i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorxri_cbz:
+; CHECK: eor [[R:x[0-9]+]], {{x[0-9]+}}, #0xff
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @eorxri_cbz(i64 %a) {
+entry:
+ %v0 = xor i64 %a, 255
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorxri_cbnz:
+; CHECK: eor [[R:x[0-9]+]], {{x[0-9]+}}, #0xff
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @eorxri_cbnz(i64 %a) {
+entry:
+ %v0 = xor i64 %a, 255
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorxrr_cbz:
+; CHECK: eor [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @eorxrr_cbz(i64 %a, i64 %b) {
+entry:
+ %v0 = xor i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: eorxrr_cbnz:
+; CHECK: eor [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @eorxrr_cbnz(i64 %a, i64 %b) {
+entry:
+ %v0 = xor i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrxri_cbz:
+; CHECK: orr [[R:x[0-9]+]], {{x[0-9]+}}, #0xff
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @orrxri_cbz(i64 %a) {
+entry:
+ %v0 = or i64 %a, 255
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrxri_cbnz:
+; CHECK: orr [[R:x[0-9]+]], {{x[0-9]+}}, #0xff
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @orrxri_cbnz(i64 %a) {
+entry:
+ %v0 = or i64 %a, 255
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrxrr_cbz:
+; CHECK: orr [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @orrxrr_cbz(i64 %a, i64 %b) {
+entry:
+ %v0 = or i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: orrxrr_cbnz:
+; CHECK: orr [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @orrxrr_cbnz(i64 %a, i64 %b) {
+entry:
+ %v0 = or i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subxri_cbz:
+; CHECK: sub [[R:x[0-9]+]], {{x[0-9]+}}, #13
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @subxri_cbz(i64 %a) {
+entry:
+ %v0 = sub i64 %a, 13
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subxri_cbnz:
+; CHECK: sub [[R:x[0-9]+]], {{x[0-9]+}}, #13
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @subxri_cbnz(i64 %a) {
+entry:
+ %v0 = sub i64 %a, 13
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subxrr_cbz:
+; CHECK: sub [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbz [[R]], {{.?LBB[0-9_]+}}
+define void @subxrr_cbz(i64 %a, i64 %b) {
+entry:
+ %v0 = sub i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp ne i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
+; CHECK-LABEL: subxrr_cbnz:
+; CHECK: sub [[R:x[0-9]+]], {{x[0-9]+}}, {{x[0-9]+}}
+; CHECK-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
+define void @subxrr_cbnz(i64 %a, i64 %b) {
+entry:
+ %v0 = sub i64 %a, %b
+ %v1 = add i64 %a, 7
+ %cond = icmp eq i64 %v0, 0
+ br i1 %cond, label %if, label %exit
+if:
+ call void @fi64(i64 %v1, i64 %v0)
+ br label %exit
+exit:
+ call void @fi64(i64 %v0, i64 %v1)
+ ret void
+}
+
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir b/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
new file mode 100644
index 0000000000000..4eb2980431cd3
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
@@ -0,0 +1,1501 @@
+# REQUIRES: asserts
+
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mattr=+arith-cbz-fusion -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=cyclone -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=apple-m5 -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWri $w0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: addwri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWri $w0, 13, 0
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWri $w0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: addwri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWri $w0, 13, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: addwrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: addwrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: addwrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: addwrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: no_fuse_positive_shift_addwrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ADDWrs $w0, $w1, 12
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWri $w0, 4096
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: andwri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWri $w0, 4096
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWri $w0, 4096
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: andwri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWri $w0, 4096
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: andwrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: andwrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: andwrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: andwrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: no_fuse_positive_shift_andwrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ANDWrs $w0, $w1, 12
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWri $w0, 4096
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: eorwri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = EORWri $w0, 4096
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWri $w0, 4096
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: eorwri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = EORWri $w0, 4096
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: eorwrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = EORWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: eorwrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = EORWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: no_fuse_positive_shift_eorwrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = EORWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWri $w0, 4096
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: orrwri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ORRWri $w0, 4096
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWri $w0, 4096
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: orrwri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ORRWri $w0, 4096
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: orrwrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ORRWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: orrwrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ORRWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: no_fuse_positive_shift_orrwrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = ORRWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWri $w0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: subwri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWri $w0, 13, 0
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWri $w0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: subwri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWri $w0, 13, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: subwrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrr $w0, $w1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: subwrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWrr $w0, $w1
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: subwrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: subwrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: no_fuse_positive_shift_subwrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = SUBWrs $w0, $w1, 12
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZW
+---
+name: bicwrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = BICWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: bicwrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = BICWrs $w0, $w1, 0
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZW
+---
+name: no_fuse_positive_shift_bicwrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $w0, $w1, $w2
+ $w0 = BICWrs $w0, $w1, 12
+ $w3 = ORRWri $w2, 4096
+ CBNZW $w0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXri $x0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: addxri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXri $x0, 13, 0
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXri $x0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: addxri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXri $x0, 13, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: addxrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: addxrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: addxrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: addxrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: no_fuse_positive_shift_addxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ADDXrs $x0, $x1, 12
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXri $x0, 8192
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: andxri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXri $x0, 8192
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXri $x0, 8192
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: andxri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXri $x0, 8192
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: andxrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: andxrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: andxrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: andxrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: no_fuse_positive_shift_andxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ANDXrs $x0, $x1, 12
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXri $x0, 8192
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: eorxri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = EORXri $x0, 8192
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXri $x0, 8192
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: eorxri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = EORXri $x0, 8192
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: eorxrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = EORXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: eorxrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = EORXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: no_fuse_positive_shift_eorxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = EORXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXri $x0, 8192
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: orrxri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ORRXri $x0, 8192
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXri $x0, 8192
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: orrxri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ORRXri $x0, 8192
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: orrxrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ORRXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: orrxrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ORRXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: no_fuse_positive_shift_orrxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = ORRXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXri $x0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: subxri_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXri $x0, 13, 0
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXri $x0, 13, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: subxri_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXri $x0, 13, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: subxrr_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrr $x0, $x1
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: subxrr_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXrr $x0, $x1
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: subxrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: subxrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: no_fuse_positive_shift_subxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = SUBXrs $x0, $x1, 12
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBZX
+---
+name: bicxrs_cbz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = BICXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 0
+# CHECK: Successors:
+# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: bicxrs_cbnz
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = BICXrs $x0, $x1, 0
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
+
+# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 12
+# CHECK: Successors:
+# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
+# CHECK-LABEL: ExitSU: CBNZX
+---
+name: no_fuse_positive_shift_bicxrs
+tracksRegLiveness: true
+isSSA: false
+noVRegs: true
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+ liveins: $x0, $x1, $x2
+ $x0 = BICXrs $x0, $x1, 12
+ $x3 = ORRXri $x2, 8192
+ CBNZX $x0, %bb.2
+ bb.1:
+ RET undef $lr
+ bb.2:
+ RET undef $lr
+...
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion.ll b/llvm/test/CodeGen/AArch64/misched-fusion.ll
deleted file mode 100644
index 75fbfac7bcd50..0000000000000
--- a/llvm/test/CodeGen/AArch64/misched-fusion.ll
+++ /dev/null
@@ -1,48 +0,0 @@
-; RUN: llc -o - %s -mtriple=aarch64-unknown -aarch64-enable-cond-br-tune=false -mcpu=cortex-a57 -mattr=+arith-bcc-fusion | FileCheck %s --check-prefix=FUSEBCC
-; RUN: llc -o - %s -mtriple=aarch64-unknown -aarch64-enable-cond-br-tune=false -mcpu=cortex-a57 -mattr=+arith-cbz-fusion | FileCheck %s --check-prefix=FUSECBZ
-; RUN: llc -o - %s -mtriple=aarch64-unknown -aarch64-enable-cond-br-tune=false -mcpu=cyclone | FileCheck %s --check-prefix=FUSEBCC --check-prefix=FUSECBZ
-
-target triple = "aarch64-unknown"
-
-declare void @foobar(i32 %v0, i32 %v1)
-
-; Make sure cmp is scheduled in front of bcc
-; FUSEBCC-LABEL: test_cmp_bcc:
-; FUSEBCC: cmp {{w[0-9]+}}, #13
-; FUSEBCC-NEXT: b.ne {{.?LBB[0-9_]+}}
-define void @test_cmp_bcc(i32 %a0, i32 %a1) {
-entry:
- %cond = icmp eq i32 %a0, 13
- %v1 = add i32 %a1, 7
- br i1 %cond, label %if, label %exit
-
-if:
- call void @foobar(i32 %v1, i32 %a0)
- br label %exit
-
-exit:
- call void @foobar(i32 %a0, i32 %v1)
- ret void
-}
-
-; Make sure sub is scheduled in front of cbnz
-; FUSECBZ-LABEL: test_sub_cbz:
-; FUSECBZ: sub [[R:w[0-9]+]], {{w[0-9]+}}, #13
-; FUSECBZ-NEXT: cbnz [[R]], {{.?LBB[0-9_]+}}
-define void @test_sub_cbz(i32 %a0, i32 %a1) {
-entry:
- ; except for the fusion opportunity the sub/add should be equal so the
- ; scheduler would leave them in source order if it weren't for the scheduling
- %v0 = sub i32 %a0, 13
- %cond = icmp eq i32 %v0, 0
- %v1 = add i32 %a1, 7
- br i1 %cond, label %if, label %exit
-
-if:
- call void @foobar(i32 %v1, i32 %v0)
- br label %exit
-
-exit:
- call void @foobar(i32 %v0, i32 %v1)
- ret void
-}
>From 186c8085c8eb34808a1131318da15aa8781f9636 Mon Sep 17 00:00:00 2001
From: tomershafir <tomer.shafir8 at gmail.com>
Date: Sun, 14 Jun 2026 10:43:26 +0300
Subject: [PATCH 2/2] check name label for splitting checks
---
.../AArch64/misched-fusion-arith-bcc.mir | 156 ++++----
.../AArch64/misched-fusion-arith-cbz.mir | 354 +++++++++++-------
2 files changed, 304 insertions(+), 206 deletions(-)
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir b/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir
index ffa2769469978..847d814664263 100644
--- a/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-arith-bcc.mir
@@ -1,13 +1,14 @@
# REQUIRES: asserts
-# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mattr=+arith-bcc-fusion -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
-# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=cyclone -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
-# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=apple-m5 -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mattr=+arith-bcc-fusion -passes=machine-scheduler -misched-print-dags -print-before=machine-scheduler 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=cyclone -passes=machine-scheduler -misched-print-dags -print-before=machine-scheduler 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=apple-m5 -passes=machine-scheduler -misched-print-dags -print-before=machine-scheduler 2>&1 | FileCheck %s
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWri $w0, 13, 0, implicit-def $nzcv
+# CHECK-LABEL: addswri
+# CHECK: SU({{[0-9]+}}): $w0 = ADDSWri $w0, 13, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: addswri
tracksRegLiveness: true
@@ -26,10 +27,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWrr $w0, $w1, implicit-def $nzcv
+# CHECK-LABEL: addswrr
+# CHECK: SU({{[0-9]+}}): $w0 = ADDSWrr $w0, $w1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: addswrr
tracksRegLiveness: true
@@ -48,10 +50,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK-LABEL: addswrs
+# CHECK: SU({{[0-9]+}}): $w0 = ADDSWrs $w0, $w1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: addswrs
tracksRegLiveness: true
@@ -70,10 +73,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_addswrs
+# CHECK: SU({{[0-9]+}}): $w0 = ADDSWrs $w0, $w1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_addswrs
tracksRegLiveness: true
@@ -92,10 +96,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWri $w0, 4096, implicit-def $nzcv
+# CHECK-LABEL: andswri
+# CHECK: SU({{[0-9]+}}): $w0 = ANDSWri $w0, 4096, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: andswri
tracksRegLiveness: true
@@ -114,10 +119,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWrr $w0, $w1, implicit-def $nzcv
+# CHECK-LABEL: andswrr
+# CHECK: SU({{[0-9]+}}): $w0 = ANDSWrr $w0, $w1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: andswrr
tracksRegLiveness: true
@@ -136,10 +142,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK-LABEL: andswrs
+# CHECK: SU({{[0-9]+}}): $w0 = ANDSWrs $w0, $w1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: andswrs
tracksRegLiveness: true
@@ -158,10 +165,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_andswrs
+# CHECK: SU({{[0-9]+}}): $w0 = ANDSWrs $w0, $w1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_andswrs
tracksRegLiveness: true
@@ -180,10 +188,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWri $w0, 13, 0, implicit-def $nzcv
+# CHECK-LABEL: subswri
+# CHECK: SU({{[0-9]+}}): $w0 = SUBSWri $w0, 13, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: subswri
tracksRegLiveness: true
@@ -202,10 +211,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWrr $w0, $w1, implicit-def $nzcv
+# CHECK-LABEL: subswrr
+# CHECK: SU({{[0-9]+}}): $w0 = SUBSWrr $w0, $w1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: subswrr
tracksRegLiveness: true
@@ -224,10 +234,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK-LABEL: subswrs
+# CHECK: SU({{[0-9]+}}): $w0 = SUBSWrs $w0, $w1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: subswrs
tracksRegLiveness: true
@@ -246,10 +257,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_subswrs
+# CHECK: SU({{[0-9]+}}): $w0 = SUBSWrs $w0, $w1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_subswrs
tracksRegLiveness: true
@@ -268,10 +280,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICSWrr $w0, $w1, implicit-def $nzcv
+# CHECK-LABEL: bicswrr
+# CHECK: SU({{[0-9]+}}): $w0 = BICSWrr $w0, $w1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: bicswrr
tracksRegLiveness: true
@@ -290,10 +303,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICSWrs $w0, $w1, 0, implicit-def $nzcv
+# CHECK-LABEL: bicswrs
+# CHECK: SU({{[0-9]+}}): $w0 = BICSWrs $w0, $w1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: bicswrs
tracksRegLiveness: true
@@ -312,10 +326,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICSWrs $w0, $w1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_bicswrs
+# CHECK: SU({{[0-9]+}}): $w0 = BICSWrs $w0, $w1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_bicswrs
tracksRegLiveness: true
@@ -334,10 +349,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXri $x0, 13, 0, implicit-def $nzcv
+# CHECK-LABEL: addsxri
+# CHECK: SU({{[0-9]+}}): $x0 = ADDSXri $x0, 13, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: addsxri
tracksRegLiveness: true
@@ -356,10 +372,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXrr $x0, $x1, implicit-def $nzcv
+# CHECK-LABEL: addsxrr
+# CHECK: SU({{[0-9]+}}): $x0 = ADDSXrr $x0, $x1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: addsxrr
tracksRegLiveness: true
@@ -378,10 +395,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK-LABEL: addsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ADDSXrs $x0, $x1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: addsxrs
tracksRegLiveness: true
@@ -400,10 +418,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_addsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ADDSXrs $x0, $x1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_addsxrs
tracksRegLiveness: true
@@ -422,10 +441,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXri $x0, 8192, implicit-def $nzcv
+# CHECK-LABEL: andsxri
+# CHECK: SU({{[0-9]+}}): $x0 = ANDSXri $x0, 8192, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: andsxri
tracksRegLiveness: true
@@ -444,10 +464,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXrr $x0, $x1, implicit-def $nzcv
+# CHECK-LABEL: andsxrr
+# CHECK: SU({{[0-9]+}}): $x0 = ANDSXrr $x0, $x1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: andsxrr
tracksRegLiveness: true
@@ -466,10 +487,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK-LABEL: andsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ANDSXrs $x0, $x1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: andsxrs
tracksRegLiveness: true
@@ -488,10 +510,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_andsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ANDSXrs $x0, $x1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_andsxrs
tracksRegLiveness: true
@@ -510,10 +533,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXri $x0, 13, 0, implicit-def $nzcv
+# CHECK-LABEL: subsxri
+# CHECK: SU({{[0-9]+}}): $x0 = SUBSXri $x0, 13, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: subsxri
tracksRegLiveness: true
@@ -532,10 +556,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXrr $x0, $x1, implicit-def $nzcv
+# CHECK-LABEL: subsxrr
+# CHECK: SU({{[0-9]+}}): $x0 = SUBSXrr $x0, $x1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: subsxrr
tracksRegLiveness: true
@@ -554,10 +579,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK-LABEL: subsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = SUBSXrs $x0, $x1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: subsxrs
tracksRegLiveness: true
@@ -576,10 +602,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_subsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = SUBSXrs $x0, $x1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_subsxrs
tracksRegLiveness: true
@@ -598,10 +625,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICSXrr $x0, $x1, implicit-def $nzcv
+# CHECK-LABEL: bicsxrr
+# CHECK: SU({{[0-9]+}}): $x0 = BICSXrr $x0, $x1, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: bicsxrr
tracksRegLiveness: true
@@ -620,10 +648,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICSXrs $x0, $x1, 0, implicit-def $nzcv
+# CHECK-LABEL: bicsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = BICSXrs $x0, $x1, 0, implicit-def $nzcv
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: bicsxrs
tracksRegLiveness: true
@@ -642,10 +671,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICSXrs $x0, $x1, 12, implicit-def $nzcv
+# CHECK-LABEL: no_fuse_positive_shift_bicsxrs
+# CHECK: SU({{[0-9]+}}): $x0 = BICSXrs $x0, $x1, 12, implicit-def $nzcv
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: Bcc
+# CHECK: ExitSU: Bcc
---
name: no_fuse_positive_shift_bicsxrs
tracksRegLiveness: true
diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir b/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
index 4eb2980431cd3..021ebc4baaa0f 100644
--- a/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
+++ b/llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
@@ -1,13 +1,14 @@
# REQUIRES: asserts
-# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mattr=+arith-cbz-fusion -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
-# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=cyclone -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
-# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=apple-m5 -passes=machine-scheduler -misched-print-dags 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mattr=+arith-cbz-fusion -passes=machine-scheduler -misched-print-dags -print-before=machine-scheduler 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=cyclone -passes=machine-scheduler -misched-print-dags -print-before=machine-scheduler 2>&1 | FileCheck %s
+# RUN: llc -o /dev/null %s -mtriple=aarch64-unknown -mcpu=apple-m5 -passes=machine-scheduler -misched-print-dags -print-before=machine-scheduler 2>&1 | FileCheck %s
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWri $w0, 13, 0
+# CHECK-LABEL: addwri_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWri $w0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: addwri_cbz
tracksRegLiveness: true
@@ -26,10 +27,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWri $w0, 13, 0
+# CHECK-LABEL: addwri_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWri $w0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: addwri_cbnz
tracksRegLiveness: true
@@ -48,10 +50,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrr $w0, $w1
+# CHECK-LABEL: addwrr_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: addwrr_cbz
tracksRegLiveness: true
@@ -70,10 +73,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrr $w0, $w1
+# CHECK-LABEL: addwrr_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: addwrr_cbnz
tracksRegLiveness: true
@@ -92,10 +96,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 0
+# CHECK-LABEL: addwrs_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: addwrs_cbz
tracksRegLiveness: true
@@ -114,10 +119,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 0
+# CHECK-LABEL: addwrs_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: addwrs_cbnz
tracksRegLiveness: true
@@ -136,10 +142,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 12
+# CHECK-LABEL: no_fuse_positive_shift_addwrs
+# CHECK: SU({{[0-9]+}}): $w0 = ADDWrs $w0, $w1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: no_fuse_positive_shift_addwrs
tracksRegLiveness: true
@@ -158,10 +165,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWri $w0, 4096
+# CHECK-LABEL: andwri_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWri $w0, 4096
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: andwri_cbz
tracksRegLiveness: true
@@ -180,10 +188,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWri $w0, 4096
+# CHECK-LABEL: andwri_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWri $w0, 4096
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: andwri_cbnz
tracksRegLiveness: true
@@ -202,10 +211,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrr $w0, $w1
+# CHECK-LABEL: andwrr_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: andwrr_cbz
tracksRegLiveness: true
@@ -224,10 +234,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrr $w0, $w1
+# CHECK-LABEL: andwrr_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: andwrr_cbnz
tracksRegLiveness: true
@@ -246,10 +257,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 0
+# CHECK-LABEL: andwrs_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: andwrs_cbz
tracksRegLiveness: true
@@ -268,10 +280,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 0
+# CHECK-LABEL: andwrs_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: andwrs_cbnz
tracksRegLiveness: true
@@ -290,10 +303,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 12
+# CHECK-LABEL: no_fuse_positive_shift_andwrs
+# CHECK: SU({{[0-9]+}}): $w0 = ANDWrs $w0, $w1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: no_fuse_positive_shift_andwrs
tracksRegLiveness: true
@@ -312,10 +326,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWri $w0, 4096
+# CHECK-LABEL: eorwri_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = EORWri $w0, 4096
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: eorwri_cbz
tracksRegLiveness: true
@@ -334,10 +349,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWri $w0, 4096
+# CHECK-LABEL: eorwri_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = EORWri $w0, 4096
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: eorwri_cbnz
tracksRegLiveness: true
@@ -356,10 +372,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWrr $w0, $w1
+# CHECK-LABEL: eorwrr_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = EORWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: eorwrr_cbz
tracksRegLiveness: true
@@ -378,10 +395,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWrr $w0, $w1
+# CHECK-LABEL: eorwrr_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = EORWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: eorwrr_cbnz
tracksRegLiveness: true
@@ -400,10 +418,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = EORWrs $w0, $w1, 0
+# CHECK-LABEL: no_fuse_positive_shift_eorwrs
+# CHECK: SU({{[0-9]+}}): $w0 = EORWrs $w0, $w1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: no_fuse_positive_shift_eorwrs
tracksRegLiveness: true
@@ -413,7 +432,7 @@ body: |
bb.0:
successors: %bb.1, %bb.2
liveins: $w0, $w1, $w2
- $w0 = EORWrs $w0, $w1, 0
+ $w0 = EORWrs $w0, $w1, 12
$w3 = ORRWri $w2, 4096
CBNZW $w0, %bb.2
bb.1:
@@ -422,10 +441,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWri $w0, 4096
+# CHECK-LABEL: orrwri_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ORRWri $w0, 4096
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: orrwri_cbz
tracksRegLiveness: true
@@ -444,10 +464,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWri $w0, 4096
+# CHECK-LABEL: orrwri_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ORRWri $w0, 4096
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: orrwri_cbnz
tracksRegLiveness: true
@@ -466,10 +487,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWrr $w0, $w1
+# CHECK-LABEL: orrwrr_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = ORRWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: orrwrr_cbz
tracksRegLiveness: true
@@ -488,10 +510,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWrr $w0, $w1
+# CHECK-LABEL: orrwrr_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = ORRWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: orrwrr_cbnz
tracksRegLiveness: true
@@ -510,10 +533,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = ORRWrs $w0, $w1, 0
+# CHECK-LABEL: no_fuse_positive_shift_orrwrs
+# CHECK: SU({{[0-9]+}}): $w0 = ORRWrs $w0, $w1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: no_fuse_positive_shift_orrwrs
tracksRegLiveness: true
@@ -523,7 +547,7 @@ body: |
bb.0:
successors: %bb.1, %bb.2
liveins: $w0, $w1, $w2
- $w0 = ORRWrs $w0, $w1, 0
+ $w0 = ORRWrs $w0, $w1, 12
$w3 = ORRWri $w2, 4096
CBNZW $w0, %bb.2
bb.1:
@@ -532,10 +556,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWri $w0, 13, 0
+# CHECK-LABEL: subwri_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWri $w0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: subwri_cbz
tracksRegLiveness: true
@@ -554,10 +579,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWri $w0, 13, 0
+# CHECK-LABEL: subwri_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWri $w0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: subwri_cbnz
tracksRegLiveness: true
@@ -576,10 +602,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrr $w0, $w1
+# CHECK-LABEL: subwrr_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: subwrr_cbz
tracksRegLiveness: true
@@ -598,10 +625,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrr $w0, $w1
+# CHECK-LABEL: subwrr_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWrr $w0, $w1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: subwrr_cbnz
tracksRegLiveness: true
@@ -620,10 +648,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 0
+# CHECK-LABEL: subwrs_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: subwrs_cbz
tracksRegLiveness: true
@@ -642,10 +671,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 0
+# CHECK-LABEL: subwrs_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: subwrs_cbnz
tracksRegLiveness: true
@@ -664,10 +694,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 12
+# CHECK-LABEL: no_fuse_positive_shift_subwrs
+# CHECK: SU({{[0-9]+}}): $w0 = SUBWrs $w0, $w1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: no_fuse_positive_shift_subwrs
tracksRegLiveness: true
@@ -686,10 +717,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 0
+# CHECK-LABEL: bicwrs_cbz
+# CHECK: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZW
+# CHECK: ExitSU: CBZW
---
name: bicwrs_cbz
tracksRegLiveness: true
@@ -708,10 +740,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 0
+# CHECK-LABEL: bicwrs_cbnz
+# CHECK: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: bicwrs_cbnz
tracksRegLiveness: true
@@ -730,10 +763,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 12
+# CHECK-LABEL: no_fuse_positive_shift_bicwrs
+# CHECK: SU({{[0-9]+}}): $w0 = BICWrs $w0, $w1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZW
+# CHECK: ExitSU: CBNZW
---
name: no_fuse_positive_shift_bicwrs
tracksRegLiveness: true
@@ -752,10 +786,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXri $x0, 13, 0
+# CHECK-LABEL: addxri_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXri $x0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: addxri_cbz
tracksRegLiveness: true
@@ -774,10 +809,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXri $x0, 13, 0
+# CHECK-LABEL: addxri_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXri $x0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: addxri_cbnz
tracksRegLiveness: true
@@ -796,10 +832,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrr $x0, $x1
+# CHECK-LABEL: addxrr_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: addxrr_cbz
tracksRegLiveness: true
@@ -818,10 +855,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrr $x0, $x1
+# CHECK-LABEL: addxrr_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: addxrr_cbnz
tracksRegLiveness: true
@@ -840,10 +878,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 0
+# CHECK-LABEL: addxrs_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: addxrs_cbz
tracksRegLiveness: true
@@ -862,10 +901,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 0
+# CHECK-LABEL: addxrs_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: addxrs_cbnz
tracksRegLiveness: true
@@ -884,10 +924,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 12
+# CHECK-LABEL: no_fuse_positive_shift_addxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ADDXrs $x0, $x1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: no_fuse_positive_shift_addxrs
tracksRegLiveness: true
@@ -906,10 +947,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXri $x0, 8192
+# CHECK-LABEL: andxri_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXri $x0, 8192
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: andxri_cbz
tracksRegLiveness: true
@@ -928,10 +970,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXri $x0, 8192
+# CHECK-LABEL: andxri_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXri $x0, 8192
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: andxri_cbnz
tracksRegLiveness: true
@@ -950,10 +993,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrr $x0, $x1
+# CHECK-LABEL: andxrr_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: andxrr_cbz
tracksRegLiveness: true
@@ -972,10 +1016,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrr $x0, $x1
+# CHECK-LABEL: andxrr_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: andxrr_cbnz
tracksRegLiveness: true
@@ -994,10 +1039,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 0
+# CHECK-LABEL: andxrs_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: andxrs_cbz
tracksRegLiveness: true
@@ -1016,10 +1062,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 0
+# CHECK-LABEL: andxrs_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: andxrs_cbnz
tracksRegLiveness: true
@@ -1038,10 +1085,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 12
+# CHECK-LABEL: no_fuse_positive_shift_andxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ANDXrs $x0, $x1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: no_fuse_positive_shift_andxrs
tracksRegLiveness: true
@@ -1060,10 +1108,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXri $x0, 8192
+# CHECK-LABEL: eorxri_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = EORXri $x0, 8192
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: eorxri_cbz
tracksRegLiveness: true
@@ -1082,10 +1131,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXri $x0, 8192
+# CHECK-LABEL: eorxri_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = EORXri $x0, 8192
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: eorxri_cbnz
tracksRegLiveness: true
@@ -1104,10 +1154,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXrr $x0, $x1
+# CHECK-LABEL: eorxrr_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = EORXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: eorxrr_cbz
tracksRegLiveness: true
@@ -1126,10 +1177,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXrr $x0, $x1
+# CHECK-LABEL: eorxrr_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = EORXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: eorxrr_cbnz
tracksRegLiveness: true
@@ -1148,10 +1200,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = EORXrs $x0, $x1, 0
+# CHECK-LABEL: no_fuse_positive_shift_eorxrs
+# CHECK: SU({{[0-9]+}}): $x0 = EORXrs $x0, $x1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: no_fuse_positive_shift_eorxrs
tracksRegLiveness: true
@@ -1161,7 +1214,7 @@ body: |
bb.0:
successors: %bb.1, %bb.2
liveins: $x0, $x1, $x2
- $x0 = EORXrs $x0, $x1, 0
+ $x0 = EORXrs $x0, $x1, 12
$x3 = ORRXri $x2, 8192
CBNZX $x0, %bb.2
bb.1:
@@ -1170,10 +1223,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXri $x0, 8192
+# CHECK-LABEL: orrxri_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ORRXri $x0, 8192
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: orrxri_cbz
tracksRegLiveness: true
@@ -1192,10 +1246,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXri $x0, 8192
+# CHECK-LABEL: orrxri_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ORRXri $x0, 8192
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: orrxri_cbnz
tracksRegLiveness: true
@@ -1214,10 +1269,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXrr $x0, $x1
+# CHECK-LABEL: orrxrr_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = ORRXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: orrxrr_cbz
tracksRegLiveness: true
@@ -1236,10 +1292,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXrr $x0, $x1
+# CHECK-LABEL: orrxrr_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = ORRXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: orrxrr_cbnz
tracksRegLiveness: true
@@ -1258,10 +1315,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = ORRXrs $x0, $x1, 0
+# CHECK-LABEL: no_fuse_positive_shift_orrxrs
+# CHECK: SU({{[0-9]+}}): $x0 = ORRXrs $x0, $x1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: no_fuse_positive_shift_orrxrs
tracksRegLiveness: true
@@ -1271,7 +1329,7 @@ body: |
bb.0:
successors: %bb.1, %bb.2
liveins: $x0, $x1, $x2
- $x0 = ORRXrs $x0, $x1, 0
+ $x0 = ORRXrs $x0, $x1, 12
$x3 = ORRXri $x2, 8192
CBNZX $x0, %bb.2
bb.1:
@@ -1280,10 +1338,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXri $x0, 13, 0
+# CHECK-LABEL: subxri_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXri $x0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: subxri_cbz
tracksRegLiveness: true
@@ -1302,10 +1361,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXri $x0, 13, 0
+# CHECK-LABEL: subxri_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXri $x0, 13, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: subxri_cbnz
tracksRegLiveness: true
@@ -1324,10 +1384,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrr $x0, $x1
+# CHECK-LABEL: subxrr_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: subxrr_cbz
tracksRegLiveness: true
@@ -1346,10 +1407,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrr $x0, $x1
+# CHECK-LABEL: subxrr_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXrr $x0, $x1
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: subxrr_cbnz
tracksRegLiveness: true
@@ -1368,10 +1430,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 0
+# CHECK-LABEL: subxrs_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: subxrs_cbz
tracksRegLiveness: true
@@ -1390,10 +1453,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 0
+# CHECK-LABEL: subxrs_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: subxrs_cbnz
tracksRegLiveness: true
@@ -1412,10 +1476,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 12
+# CHECK-LABEL: no_fuse_positive_shift_subxrs
+# CHECK: SU({{[0-9]+}}): $x0 = SUBXrs $x0, $x1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: no_fuse_positive_shift_subxrs
tracksRegLiveness: true
@@ -1434,10 +1499,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 0
+# CHECK-LABEL: bicxrs_cbz
+# CHECK: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBZX
+# CHECK: ExitSU: CBZX
---
name: bicxrs_cbz
tracksRegLiveness: true
@@ -1456,10 +1522,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 0
+# CHECK-LABEL: bicxrs_cbnz
+# CHECK: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 0
# CHECK: Successors:
# CHECK: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: bicxrs_cbnz
tracksRegLiveness: true
@@ -1478,10 +1545,11 @@ body: |
RET undef $lr
...
-# CHECK-LABEL: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 12
+# CHECK-LABEL: no_fuse_positive_shift_bicxrs
+# CHECK: SU({{[0-9]+}}): $x0 = BICXrs $x0, $x1, 12
# CHECK: Successors:
# CHECK-NOT: ExitSU: Ord Latency={{[0-9]+}} Cluster
-# CHECK-LABEL: ExitSU: CBNZX
+# CHECK: ExitSU: CBNZX
---
name: no_fuse_positive_shift_bicxrs
tracksRegLiveness: true
More information about the llvm-commits
mailing list