summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2015-06-05 18:01:28 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2015-06-05 18:01:28 +0000
commit6679fc1a791ed1f673be9143ed5a07755ae80767 (patch)
tree12c139ac314a3fab56c7103dd3cf22a06ceb131b /llvm/test
parent7830fc83be470953b86baa5ebd740f2b2d5b86df (diff)
downloadbcm5719-llvm-6679fc1a791ed1f673be9143ed5a07755ae80767.tar.gz
bcm5719-llvm-6679fc1a791ed1f673be9143ed5a07755ae80767.zip
Revert r238473, "Thumb2: Modify codegen for memcpy intrinsic to prefer LDM/STM."
as it caused miscompilations and assertion failures (PR23768, http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20150601/280380.html). llvm-svn: 239169
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll77
-rw-r--r--llvm/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll4
2 files changed, 7 insertions, 74 deletions
diff --git a/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll b/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
index 0be796eb8f8..916e5ea299a 100644
--- a/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
+++ b/llvm/test/CodeGen/Thumb/ldm-stm-base-materialization.ll
@@ -6,89 +6,22 @@ target triple = "thumbv6m-none--eabi"
@b = external global i32*
; Function Attrs: nounwind
-define void @foo24() #0 {
+define void @foo() #0 {
entry:
-; CHECK-LABEL: foo24:
-; CHECK: ldr r[[LB:[0-9]]], .LCPI
-; CHECK: adds r[[NLB:[0-9]]], r[[LB]], #4
-; CHECK: ldr r[[SB:[0-9]]], .LCPI
-; CHECK: adds r[[NSB:[0-9]]], r[[SB]], #4
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
- %0 = load i32*, i32** @a, align 4
- %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
- %1 = bitcast i32* %arrayidx to i8*
- %2 = load i32*, i32** @b, align 4
- %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
- %3 = bitcast i32* %arrayidx1 to i8*
- tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %1, i8* %3, i32 24, i32 4, i1 false)
- ret void
-}
-
-define void @foo28() #0 {
-entry:
-; CHECK-LABEL: foo28:
-; CHECK: ldr r[[LB:[0-9]]], .LCPI
-; CHECK: adds r[[NLB:[0-9]]], r[[LB]], #4
-; CHECK: ldr r[[SB:[0-9]]], .LCPI
-; CHECK: adds r[[NSB:[0-9]]], r[[SB]], #4
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]], r[[R4:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]], r[[R4]]}
- %0 = load i32*, i32** @a, align 4
- %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
- %1 = bitcast i32* %arrayidx to i8*
- %2 = load i32*, i32** @b, align 4
- %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
- %3 = bitcast i32* %arrayidx1 to i8*
- tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %1, i8* %3, i32 28, i32 4, i1 false)
- ret void
-}
-
-define void @foo32() #0 {
-entry:
-; CHECK-LABEL: foo32:
-; CHECK: ldr r[[LB:[0-9]]], .LCPI
-; CHECK: adds r[[NLB:[0-9]]], r[[LB]], #4
+; CHECK-LABEL: foo:
; CHECK: ldr r[[SB:[0-9]]], .LCPI
-; CHECK: adds r[[NSB:[0-9]]], r[[SB]], #4
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]], r[[R4:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]], r[[R4]]}
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]], r[[R4:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]], r[[R4]]}
- %0 = load i32*, i32** @a, align 4
- %arrayidx = getelementptr inbounds i32, i32* %0, i32 1
- %1 = bitcast i32* %arrayidx to i8*
- %2 = load i32*, i32** @b, align 4
- %arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
- %3 = bitcast i32* %arrayidx1 to i8*
- tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %1, i8* %3, i32 32, i32 4, i1 false)
- ret void
-}
-
-define void @foo36() #0 {
-entry:
-; CHECK-LABEL: foo36:
; CHECK: ldr r[[LB:[0-9]]], .LCPI
; CHECK: adds r[[NLB:[0-9]]], r[[LB]], #4
-; CHECK: ldr r[[SB:[0-9]]], .LCPI
+; CHECK-NEXT: ldm r[[NLB]],
; CHECK: adds r[[NSB:[0-9]]], r[[SB]], #4
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
-; CHECK-NEXT: ldm r[[NLB]]!, {r[[R1:[0-9]]], r[[R2:[0-9]]], r[[R3:[0-9]]]}
-; CHECK-NEXT: stm r[[NSB]]!, {r[[R1]], r[[R2]], r[[R3]]}
+; CHECK-NEXT: stm r[[NSB]]
%0 = load i32*, i32** @a, align 4
%arrayidx = getelementptr inbounds i32, i32* %0, i32 1
%1 = bitcast i32* %arrayidx to i8*
%2 = load i32*, i32** @b, align 4
%arrayidx1 = getelementptr inbounds i32, i32* %2, i32 1
%3 = bitcast i32* %arrayidx1 to i8*
- tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %1, i8* %3, i32 36, i32 4, i1 false)
+ tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %1, i8* %3, i32 24, i32 4, i1 false)
ret void
}
diff --git a/llvm/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll b/llvm/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll
index c4d84341ea2..da2f3f09b28 100644
--- a/llvm/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll
+++ b/llvm/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll
@@ -7,8 +7,8 @@ define void @t1() #0 {
entry:
; CHECK-LABEL: t1:
; CHECK: ldr r[[LB:[0-9]]],
-; CHECK-NEXT: ldr r[[SB:[0-9]]],
; CHECK-NEXT: ldm r[[LB]]!,
+; CHECK-NEXT: ldr r[[SB:[0-9]]],
; CHECK-NEXT: stm r[[SB]]!,
; CHECK-NEXT: ldrb {{.*}}, [r[[LB]]]
; CHECK-NEXT: strb {{.*}}, [r[[SB]]]
@@ -21,8 +21,8 @@ define void @t2() #0 {
entry:
; CHECK-LABEL: t2:
; CHECK: ldr r[[LB:[0-9]]],
-; CHECK-NEXT: ldr r[[SB:[0-9]]],
; CHECK-NEXT: ldm r[[LB]]!,
+; CHECK-NEXT: ldr r[[SB:[0-9]]],
; CHECK-NEXT: stm r[[SB]]!,
; CHECK-NEXT: ldrh {{.*}}, [r[[LB]]]
; CHECK-NEXT: ldrb {{.*}}, [r[[LB]], #2]
OpenPOWER on IntegriCloud