summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2016-10-12 19:50:57 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2016-10-12 19:50:57 +0000
commit8271be9a1da41ac9221fc13831a9166ddf53a002 (patch)
tree48ac3801b0cd9b71f22e5dba8fb3199f75f68991 /llvm/test
parent105a3ce06269eb5c45a4820aba9d04f26de1fbdf (diff)
downloadbcm5719-llvm-8271be9a1da41ac9221fc13831a9166ddf53a002.tar.gz
bcm5719-llvm-8271be9a1da41ac9221fc13831a9166ddf53a002.zip
Do not remove implicit defs in BranchFolder
Branch folder removes implicit defs if they are the only non-branching instructions in a block, and the branches do not use the defined registers. The problem is that in some cases these implicit defs are required for the liveness information to be correct. Differential Revision: https://reviews.llvm.org/D25478 llvm-svn: 284036
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/Hexagon/branchfolder-keep-impdef.ll29
-rw-r--r--llvm/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll1
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Hexagon/branchfolder-keep-impdef.ll b/llvm/test/CodeGen/Hexagon/branchfolder-keep-impdef.ll
new file mode 100644
index 00000000000..a56680bd439
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/branchfolder-keep-impdef.ll
@@ -0,0 +1,29 @@
+; RUN: llc -march=hexagon -verify-machineinstrs < %s | FileCheck %s
+;
+; Check that the testcase compiles successfully. Expect that if-conversion
+; took place.
+; CHECK-LABEL: fred:
+; CHECK: if (!p0) r1 = memw(r0 + #0)
+
+target triple = "hexagon"
+
+define void @fred(i32 %p0) local_unnamed_addr align 2 {
+b0:
+ br i1 undef, label %b1, label %b2
+
+b1: ; preds = %b0
+ %t0 = load i8*, i8** undef, align 4
+ br label %b2
+
+b2: ; preds = %b1, %b0
+ %t1 = phi i8* [ %t0, %b1 ], [ undef, %b0 ]
+ %t2 = getelementptr inbounds i8, i8* %t1, i32 %p0
+ tail call void @llvm.memmove.p0i8.p0i8.i32(i8* undef, i8* %t2, i32 undef, i32 1, i1 false) #1
+ unreachable
+}
+
+declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i32, i1) #0
+
+attributes #0 = { argmemonly nounwind }
+attributes #1 = { nounwind }
+
diff --git a/llvm/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll b/llvm/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll
index bdc36bdaf2e..096d89779da 100644
--- a/llvm/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll
+++ b/llvm/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll
@@ -100,6 +100,7 @@ while.end: ; preds = %entry
; CHECK-NEXT: in Loop: Header
; CHECK-NEXT: incq
; CHECK-NEXT: %for.body3.us.i
+; CHECK-NEXT: Parent Loop
; CHECK-NEXT: Inner Loop
; CHECK: testb
; CHECK: je
OpenPOWER on IntegriCloud