summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-03-09 22:02:14 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-03-09 22:02:14 +0000
commit544210304fbae675632c5a5bc54c7fa5b441f670 (patch)
tree55acb0b5f20ee10e7f43b025b91dd5f839dfa434 /llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll
parentd1e951e5ebd533184b5b7bc462e2d112eecc79b5 (diff)
downloadbcm5719-llvm-544210304fbae675632c5a5bc54c7fa5b441f670.tar.gz
bcm5719-llvm-544210304fbae675632c5a5bc54c7fa5b441f670.zip
[Hexagon] Fixes to the bitsplit generation
- Fix the insertion point, which occasionally could have been incorrect. - Avoid creating multiple bitsplits with the same operands, if an old one could be reused. llvm-svn: 297414
Diffstat (limited to 'llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll')
-rw-r--r--llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll33
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll b/llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll
new file mode 100644
index 00000000000..87d535fd0f2
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/bit-bitsplit-at.ll
@@ -0,0 +1,33 @@
+; RUN: llc -march=hexagon < %s | FileCheck %s
+; REQUIRES: asserts
+
+; This testcase used to crash due to putting the bitsplit instruction in a
+; wrong place.
+; CHECK: bitsplit
+
+target triple = "hexagon"
+
+define hidden fastcc i32 @fred(i32 %a0) unnamed_addr #0 {
+b1:
+ %v2 = lshr i32 %a0, 16
+ %v3 = trunc i32 %v2 to i8
+ br i1 undef, label %b6, label %b4
+
+b4: ; preds = %b1
+ %v5 = and i32 %a0, 65535
+ br i1 undef, label %b8, label %b9
+
+b6: ; preds = %b1
+ %v7 = and i32 %a0, 65535
+ br label %b9
+
+b8: ; preds = %b4
+ store i8 %v3, i8* undef, align 2
+ unreachable
+
+b9: ; preds = %b6, %b4
+ %v10 = phi i32 [ %v7, %b6 ], [ %v5, %b4 ]
+ ret i32 %v10
+}
+
+attributes #0 = { nounwind optsize "target-cpu"="hexagonv60" "target-features"="-hvx-double,-long-calls" }
OpenPOWER on IntegriCloud