summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll
diff options
context:
space:
mode:
authorKyle Butt <kyle+llvm@iteratee.net>2016-08-10 21:03:27 +0000
committerKyle Butt <kyle+llvm@iteratee.net>2016-08-10 21:03:27 +0000
commit81d32846b03a7de6dd7cfe699093ac23bdb237c3 (patch)
tree15c65a50cb31199b66780f0d9ccf415346469006 /llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll
parente1c931b171288a42f9d65035a7e91b4e52d91643 (diff)
downloadbcm5719-llvm-81d32846b03a7de6dd7cfe699093ac23bdb237c3.tar.gz
bcm5719-llvm-81d32846b03a7de6dd7cfe699093ac23bdb237c3.zip
Codegen: Don't tail-duplicate blocks with un-analyzable fallthrough.
If AnalyzeBranch can't analyze a block and it is possible to fallthrough, then duplicating the block doesn't make sense, as only one block can be the layout predecessor for the un-analyzable fallthrough. Submitted wit a test case, but NOTE: the test case doesn't currently fail. However, the test case fails with D20505 and would have saved me some time debugging. llvm-svn: 278288
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll34
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll b/llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll
new file mode 100644
index 00000000000..93d47df70db
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/tail-dup-analyzable-fallthrough.ll
@@ -0,0 +1,34 @@
+; RUN: llc -O2 < %s | FileCheck %s
+target datalayout = "e-m:e-i64:64-n32:64"
+target triple = "powerpc64le-unknown-linux-gnu"
+
+; Check that the conditional return block of fmax_double3.exit was not
+; duplicated into the if.then.i block
+; CHECK: # %if.then.i
+; CHECK: lxvd2x
+; CHECK: stxvd2x
+; CHECK-NOT: bclr
+; CHECK: {{^}}.LBB{{[0-9_]+}}:
+; CHECK-SAME: # %fmax_double3.exit
+; CHECK: bclr
+; CHECK: # %if.then
+; Function Attrs: nounwind
+define void @__fmax_double3_3D_exec(<2 x double>* %input6, i1 %bool1, i1 %bool2) #0 {
+entry:
+ br i1 %bool1, label %if.then.i, label %fmax_double3.exit
+
+if.then.i: ; preds = %entry
+ store <2 x double> zeroinitializer, <2 x double>* %input6, align 32
+ br label %fmax_double3.exit
+
+fmax_double3.exit: ; preds = %if.then.i, %entry
+ br i1 %bool2, label %if.then, label %do.end
+
+if.then: ; preds = %fmax_double3.exit
+ unreachable
+
+do.end: ; preds = %fmax_double3.exit
+ ret void
+}
+
+attributes #0 = { nounwind }
OpenPOWER on IntegriCloud