summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2017-03-27 16:35:31 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2017-03-27 16:35:31 +0000
commit641cb203b6f1ea2d92d17a99a04c8d971f2103e5 (patch)
tree10a2a9dce8fdd3ece2719cd082e234f5ca4ee2c2 /llvm/test/CodeGen
parent2d29998f22b8b22019da8ca4ef58be9397be14f2 (diff)
downloadbcm5719-llvm-641cb203b6f1ea2d92d17a99a04c8d971f2103e5.tar.gz
bcm5719-llvm-641cb203b6f1ea2d92d17a99a04c8d971f2103e5.zip
[GlobalISel][AArch64] Select CBZ.
CBZ/CBNZ represent a substantial portion of all conditional branches. Look through G_ICMP to select them. We can't use tablegen yet because the existing patterns match an AArch64ISD node. llvm-svn: 298856
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-cbz.mir108
1 files changed, 108 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-cbz.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-cbz.mir
new file mode 100644
index 00000000000..2decb994b96
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-cbz.mir
@@ -0,0 +1,108 @@
+# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s
+
+--- |
+ define void @cbz_s32() { ret void }
+ define void @cbz_s64() { ret void }
+ define void @cbnz_s32() { ret void }
+ define void @cbnz_s64() { ret void }
+...
+
+---
+# CHECK-LABEL: name: cbz_s32
+name: cbz_s32
+legalized: true
+regBankSelected: true
+
+# CHECK: body:
+# CHECK: bb.0:
+# CHECK: %0 = COPY %w0
+# CHECK: CBZW %0, %bb.1
+# CHECK: B %bb.0
+body: |
+ bb.0:
+ liveins: %w0
+ successors: %bb.0, %bb.1
+
+ %0:gpr(s32) = COPY %w0
+ %1:gpr(s32) = G_CONSTANT i32 0
+ %2:gpr(s1) = G_ICMP intpred(eq), %0, %1
+ G_BRCOND %2(s1), %bb.1
+ G_BR %bb.0
+
+ bb.1:
+...
+
+---
+# CHECK-LABEL: name: cbz_s64
+name: cbz_s64
+legalized: true
+regBankSelected: true
+
+# CHECK: body:
+# CHECK: bb.0:
+# CHECK: %0 = COPY %x0
+# CHECK: CBZX %0, %bb.1
+# CHECK: B %bb.0
+body: |
+ bb.0:
+ liveins: %x0
+ successors: %bb.0, %bb.1
+
+ %0:gpr(s64) = COPY %x0
+ %1:gpr(s64) = G_CONSTANT i64 0
+ %2:gpr(s1) = G_ICMP intpred(eq), %0, %1
+ G_BRCOND %2(s1), %bb.1
+ G_BR %bb.0
+
+ bb.1:
+...
+
+---
+# CHECK-LABEL: name: cbnz_s32
+name: cbnz_s32
+legalized: true
+regBankSelected: true
+
+# CHECK: body:
+# CHECK: bb.0:
+# CHECK: %0 = COPY %w0
+# CHECK: CBNZW %0, %bb.1
+# CHECK: B %bb.0
+body: |
+ bb.0:
+ liveins: %w0
+ successors: %bb.0, %bb.1
+
+ %0:gpr(s32) = COPY %w0
+ %1:gpr(s32) = G_CONSTANT i32 0
+ %2:gpr(s1) = G_ICMP intpred(ne), %0, %1
+ G_BRCOND %2(s1), %bb.1
+ G_BR %bb.0
+
+ bb.1:
+...
+
+---
+# CHECK-LABEL: name: cbnz_s64
+name: cbnz_s64
+legalized: true
+regBankSelected: true
+
+# CHECK: body:
+# CHECK: bb.0:
+# CHECK: %0 = COPY %x0
+# CHECK: CBNZX %0, %bb.1
+# CHECK: B %bb.0
+body: |
+ bb.0:
+ liveins: %x0
+ successors: %bb.0, %bb.1
+
+ %0:gpr(s64) = COPY %x0
+ %1:gpr(s64) = G_CONSTANT i64 0
+ %2:gpr(s1) = G_ICMP intpred(ne), %0, %1
+ G_BRCOND %2(s1), %bb.1
+ G_BR %bb.0
+
+ bb.1:
+...
OpenPOWER on IntegriCloud