summaryrefslogtreecommitdiff
path: root/test/CodeGen/MIR
diff options
context:
space:
mode:
authorMikael Holmen <mikael.holmen@ericsson.com>2017-09-20 08:23:29 +0000
committerMikael Holmen <mikael.holmen@ericsson.com>2017-09-20 08:23:29 +0000
commit6727c50d80dcdfe8631f5806fd8148b2334fdcb7 (patch)
treec85a7a00e8cbc9d5e202186f26ef1d877b24db71 /test/CodeGen/MIR
parent0acc54b75cd651682a878ce4b4c244f5bc04a9ba (diff)
[IfConversion] Add testcases [NFC]
These tests should have been included in r310697 / D34099 but apparently I missed them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313737 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/MIR')
-rw-r--r--test/CodeGen/MIR/ARM/PR32721_ifcvt_triangle_unanalyzable.mir23
-rw-r--r--test/CodeGen/MIR/ARM/ifcvt_diamond_unanalyzable.mir30
-rw-r--r--test/CodeGen/MIR/ARM/ifcvt_forked_diamond_unanalyzable.mir48
-rw-r--r--test/CodeGen/MIR/ARM/ifcvt_simple_bad_zero_prob_succ.mir33
-rw-r--r--test/CodeGen/MIR/ARM/ifcvt_simple_unanalyzable.mir25
-rw-r--r--test/CodeGen/MIR/ARM/ifcvt_triangleWoCvtToNextEdge.mir52
6 files changed, 211 insertions, 0 deletions
diff --git a/test/CodeGen/MIR/ARM/PR32721_ifcvt_triangle_unanalyzable.mir b/test/CodeGen/MIR/ARM/PR32721_ifcvt_triangle_unanalyzable.mir
new file mode 100644
index 00000000000..c9a88b62ef9
--- /dev/null
+++ b/test/CodeGen/MIR/ARM/PR32721_ifcvt_triangle_unanalyzable.mir
@@ -0,0 +1,23 @@
+# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
+---
+name: foo
+body: |
+ bb.0:
+ B %bb.2
+
+ bb.1:
+ BX_RET 14, 0
+
+ bb.2:
+ Bcc %bb.1, 1, %cpsr
+
+ bb.3:
+ B %bb.1
+...
+
+# We should get a single block containing the BX_RET, with no successors at all
+
+# CHECK: body:
+# CHECK-NEXT: bb.0:
+# CHECK-NEXT: BX_RET
+
diff --git a/test/CodeGen/MIR/ARM/ifcvt_diamond_unanalyzable.mir b/test/CodeGen/MIR/ARM/ifcvt_diamond_unanalyzable.mir
new file mode 100644
index 00000000000..a6e5521fd2c
--- /dev/null
+++ b/test/CodeGen/MIR/ARM/ifcvt_diamond_unanalyzable.mir
@@ -0,0 +1,30 @@
+# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
+---
+name: foo
+body: |
+ bb.0:
+ Bcc %bb.2, 1, %cpsr
+
+ bb.1:
+ %sp = tADDspi %sp, 1, 14, _
+ B %bb.3
+
+ bb.2:
+ %sp = tADDspi %sp, 2, 14, _
+ B %bb.3
+
+ bb.3:
+ successors:
+ %sp = tADDspi %sp, 3, 14, _
+ BX_RET 14, _
+...
+
+# Diamond testcase with unanalyzable instruction in the BB following the
+# diamond.
+
+# CHECK: body: |
+# CHECK: bb.0:
+# CHECK: %sp = tADDspi %sp, 2, 1, %cpsr
+# CHECK: %sp = tADDspi %sp, 1, 0, %cpsr, implicit %sp
+# CHECK: %sp = tADDspi %sp, 3, 14, _
+# CHECK: BX_RET 14, _
diff --git a/test/CodeGen/MIR/ARM/ifcvt_forked_diamond_unanalyzable.mir b/test/CodeGen/MIR/ARM/ifcvt_forked_diamond_unanalyzable.mir
new file mode 100644
index 00000000000..652c333c523
--- /dev/null
+++ b/test/CodeGen/MIR/ARM/ifcvt_forked_diamond_unanalyzable.mir
@@ -0,0 +1,48 @@
+# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
+---
+name: foo
+body: |
+ bb.0:
+ Bcc %bb.2, 1, %cpsr
+
+ bb.1:
+ successors: %bb.3(0x20000000), %bb.4(0x60000000)
+ %sp = tADDspi %sp, 1, 14, _
+ Bcc %bb.3, 1, %cpsr
+ B %bb.4
+
+ bb.2:
+ successors: %bb.3(0x20000000), %bb.4(0x60000000)
+ %sp = tADDspi %sp, 2, 14, _
+ Bcc %bb.3, 1, %cpsr
+ B %bb.4
+
+ bb.3:
+ successors:
+ %sp = tADDspi %sp, 3, 14, _
+ BX_RET 14, _
+
+ bb.4:
+ successors:
+ %sp = tADDspi %sp, 4, 14, _
+ BX_RET 14, _
+...
+
+# Forked-diamond testcase with unanalyzable instructions in both the True and
+# False BBs following the forked diamond.
+
+# CHECK: body: |
+# CHECK: bb.0:
+# CHECK: successors: %bb.2(0x20000000), %bb.1(0x60000000)
+
+# CHECK: %sp = tADDspi %sp, 2, 1, %cpsr
+# CHECK: %sp = tADDspi %sp, 1, 0, %cpsr, implicit %sp
+# CHECK: Bcc %bb.2, 1, %cpsr
+
+# CHECK: bb.1:
+# CHECK: %sp = tADDspi %sp, 4, 14, _
+# CHECK: BX_RET 14, _
+
+# CHECK: bb.2:
+# CHECK: %sp = tADDspi %sp, 3, 14, _
+# CHECK: BX_RET 14, _
diff --git a/test/CodeGen/MIR/ARM/ifcvt_simple_bad_zero_prob_succ.mir b/test/CodeGen/MIR/ARM/ifcvt_simple_bad_zero_prob_succ.mir
new file mode 100644
index 00000000000..13ba94fb672
--- /dev/null
+++ b/test/CodeGen/MIR/ARM/ifcvt_simple_bad_zero_prob_succ.mir
@@ -0,0 +1,33 @@
+# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
+---
+name: f1
+body: |
+ bb.0:
+
+ bb.1:
+ Bcc %bb.3, 0, %cpsr
+
+ bb.2:
+
+ bb.3:
+ Bcc %bb.1, 0, %cpsr
+
+ bb.4:
+ successors: %bb.1
+ tBRIND %r1, 14, _
+...
+
+# We should only get bb.1 as successor to bb.1. No zero percent probability
+# edge from bb.1 to bb.2. There shouldn't even be a bb.2 at all.
+
+# CHECK: body: |
+# CHECK: bb.0:
+# CHECK: successors: %bb.1(0x80000000)
+
+# CHECK: bb.1:
+# CHECK: successors: %bb.1(0x80000000)
+# CHECK-NOT: %bb.2(0x00000000)
+# CHECK: tBRIND %r1, 1, %cpsr
+# CHECK: B %bb.1
+
+#CHECK-NOT: bb.2:
diff --git a/test/CodeGen/MIR/ARM/ifcvt_simple_unanalyzable.mir b/test/CodeGen/MIR/ARM/ifcvt_simple_unanalyzable.mir
new file mode 100644
index 00000000000..d0c6ffdb3fa
--- /dev/null
+++ b/test/CodeGen/MIR/ARM/ifcvt_simple_unanalyzable.mir
@@ -0,0 +1,25 @@
+# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
+---
+name: foo
+body: |
+ bb.0:
+ Bcc %bb.2, 0, %cpsr
+
+ bb.1:
+ successors:
+ BX_RET 14, _
+
+ bb.2:
+ successors:
+ %sp = tADDspi %sp, 2, 14, _
+ BX_RET 14, _
+...
+
+# Simple testcase with unanalyzable instructions in both TBB and FBB.
+
+# CHECK: body: |
+# CHECK: bb.0:
+# CHECK: %sp = tADDspi %sp, 2, 0, %cpsr
+# CHECK: BX_RET 0, %cpsr
+# CHECK: BX_RET 14, _
+
diff --git a/test/CodeGen/MIR/ARM/ifcvt_triangleWoCvtToNextEdge.mir b/test/CodeGen/MIR/ARM/ifcvt_triangleWoCvtToNextEdge.mir
new file mode 100644
index 00000000000..981752654fc
--- /dev/null
+++ b/test/CodeGen/MIR/ARM/ifcvt_triangleWoCvtToNextEdge.mir
@@ -0,0 +1,52 @@
+# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
+--- |
+ declare void @__stack_chk_fail()
+ declare void @bar()
+
+ define void @foo() {
+ ret void
+ }
+...
+---
+name: foo
+body: |
+
+ bb.0:
+ Bcc %bb.1, 1, %cpsr
+ B %bb.2
+
+ bb.1:
+ Bcc %bb.3, 0, %cpsr
+
+ bb.2:
+ successors:
+ tBL 14, %cpsr, @__stack_chk_fail
+
+ bb.3:
+ successors:
+ %sp = tADDspi %sp, 2, 14, _
+ %sp = tADDspi %sp, 2, 14, _
+ tTAILJMPdND @bar, 14, %cpsr
+...
+
+# bb.2 has no successors, presumably because __stack_chk_fail doesn't return,
+# so there should be no edge from bb.2 to bb.3.
+# Nevertheless, IfConversion treats bb.1, bb.2, bb.3 as a triangle and
+# inserts a predicated copy of bb.2 in bb.1.
+
+# This caused r302876 to die with a failed assertion.
+
+# CHECK: bb.0:
+# CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000)
+# CHECK: Bcc %bb.2, 1, %cpsr
+
+# CHECK: bb.1:
+# CHECK-NOT: successors: %bb
+# CHECK: tBL 14, %cpsr, @__stack_chk_fail
+
+# CHECK: bb.2:
+# CHECK-NOT: successors: %bb
+# CHECK: tBL 1, %cpsr, @__stack_chk_fail
+# CHECK: %sp = tADDspi %sp, 2, 14, _
+# CHECK: %sp = tADDspi %sp, 2, 14, _
+# CHECK: tTAILJMPdND @bar, 14, %cpsr