diff options
author | Weiming Zhao <weimingz@codeaurora.org> | 2014-03-20 23:28:16 +0000 |
---|---|---|
committer | Weiming Zhao <weimingz@codeaurora.org> | 2014-03-20 23:28:16 +0000 |
commit | 0152485679e4911f1d7d7e9af941835dc8632ba9 (patch) | |
tree | 4711be808bc2076f0fe3e679ee2cc20499e01cc6 /llvm/test/CodeGen/ARM/fold-stack-adjust.ll | |
parent | 184322755108ae81b4e6e25e1fef7cd512024dfc (diff) | |
download | bcm5719-llvm-0152485679e4911f1d7d7e9af941835dc8632ba9.tar.gz bcm5719-llvm-0152485679e4911f1d7d7e9af941835dc8632ba9.zip |
Fix PR19136: [ARM] Fix Folding SP Update into vpush/vpop
Sicne MBB->computeRegisterLivenes() returns Dead for sub regs like s0,
d0 is used in vpop instead of updating sp, which causes s0 dead before
its use.
This patch checks the liveness of each subreg to make sure the reg is
actually dead.
llvm-svn: 204411
Diffstat (limited to 'llvm/test/CodeGen/ARM/fold-stack-adjust.ll')
-rw-r--r-- | llvm/test/CodeGen/ARM/fold-stack-adjust.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/fold-stack-adjust.ll b/llvm/test/CodeGen/ARM/fold-stack-adjust.ll index feac793f4f8..695a20b5976 100644 --- a/llvm/test/CodeGen/ARM/fold-stack-adjust.ll +++ b/llvm/test/CodeGen/ARM/fold-stack-adjust.ll @@ -1,6 +1,7 @@ ; RUN: llc -mtriple=thumbv7-apple-none-macho < %s | FileCheck %s ; RUN: llc -mtriple=thumbv6m-apple-none-macho -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-T1 ; RUN: llc -mtriple=thumbv7-apple-darwin-ios -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-IOS +; RUN: llc -mtriple=thumbv7--linux-gnueabi -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-LINUX declare void @bar(i8*) @@ -185,3 +186,33 @@ define void @test_varsize(...) minsize { call void @bar(i8* %var) ret void } + +%"MyClass" = type { i8*, i32, i32, float, float, float, [2 x i8], i32, i32* } + +declare float @foo() + +declare void @bar3() + +declare %"MyClass"* @bar2(%"MyClass"* returned, i16*, i32, float, float, i32, i32, i1 zeroext, i1 zeroext, i32) + +define fastcc float @check_vfp_no_return_clobber2(i16* %r, i16* %chars, i32 %length, i1 zeroext %flag) minsize { +entry: +; CHECK-LINUX-LABEL: check_vfp_no_return_clobber2 +; CHECK-LINUX: vpush {d0, d1, d2, d3, d4, d5, d6, d7, d8} +; CHECK-NOT: sub sp, +; ... +; CHECK-LINUX: add sp +; CHECK-LINUX: vpop {d8} + %run = alloca %"MyClass", align 4 + %call = call %"MyClass"* @bar2(%"MyClass"* %run, i16* %chars, i32 %length, float 0.000000e+00, float 0.000000e+00, i32 1, i32 1, i1 zeroext false, i1 zeroext true, i32 3) + %call1 = call float @foo() + %cmp = icmp eq %"MyClass"* %run, null + br i1 %cmp, label %exit, label %if.then + +if.then: ; preds = %entry + call void @bar3() + br label %exit + +exit: ; preds = %if.then, %entry + ret float %call1 +} |