diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-10-12 19:50:57 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-10-12 19:50:57 +0000 |
| commit | 8271be9a1da41ac9221fc13831a9166ddf53a002 (patch) | |
| tree | 48ac3801b0cd9b71f22e5dba8fb3199f75f68991 /llvm/test | |
| parent | 105a3ce06269eb5c45a4820aba9d04f26de1fbdf (diff) | |
| download | bcm5719-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.ll | 29 | ||||
| -rw-r--r-- | llvm/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll | 1 |
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 |

