diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-03-28 23:07:03 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-03-28 23:07:03 +0000 |
commit | 892143ff70b5e7d0cb06e7c4596c232347806b17 (patch) | |
tree | 800b48ae7e167099642b0158a1727d3697d60030 /test/CodeGen/Thumb2/crash.ll | |
parent | dc909bf46ba94bf123bf5c7273fa867bddffc4a2 (diff) | |
download | external_llvm-892143ff70b5e7d0cb06e7c4596c232347806b17.zip external_llvm-892143ff70b5e7d0cb06e7c4596c232347806b17.tar.gz external_llvm-892143ff70b5e7d0cb06e7c4596c232347806b17.tar.bz2 |
Don't kill the base register when expanding strd.
When an strd instruction doesn't get the registers it wants, it can be
expanded into two str instructions. Make sure the first str doesn't kill
the base register in the case where the base and data registers are
identical:
t2STRi12 %R0<kill>, %R0, 4, pred:14, pred:%noreg
t2STRi12 %R2<kill>, %R0, 8, pred:14, pred:%noreg
<rdar://problem/11101911>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153611 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Thumb2/crash.ll')
-rw-r--r-- | test/CodeGen/Thumb2/crash.ll | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/test/CodeGen/Thumb2/crash.ll b/test/CodeGen/Thumb2/crash.ll index 52893af..cb4d080 100644 --- a/test/CodeGen/Thumb2/crash.ll +++ b/test/CodeGen/Thumb2/crash.ll @@ -61,3 +61,18 @@ entry: declare <4 x float> @llvm.arm.neon.vld1.v4f32(i8*, i32) nounwind readonly declare void @llvm.arm.neon.vst1.v4f32(i8*, <4 x float>, i32) nounwind + +; <rdar://problem/11101911> +; When an strd is expanded into two str instructions, make sure the first str +; doesn't kill the base register. This can happen if the base register is the +; same as the data register. +%class = type { i8*, %class*, i32 } +define void @f11101911(%class* %this, i32 %num) ssp align 2 { +entry: + %p1 = getelementptr inbounds %class* %this, i32 0, i32 1 + %p2 = getelementptr inbounds %class* %this, i32 0, i32 2 + tail call void asm sideeffect "", "~{r1},~{r3},~{r5},~{r11},~{r13}"() nounwind + store %class* %this, %class** %p1, align 4 + store i32 %num, i32* %p2, align 4 + ret void +} |