diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2015-06-05 18:01:28 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2015-06-05 18:01:28 +0000 |
| commit | 6679fc1a791ed1f673be9143ed5a07755ae80767 (patch) | |
| tree | 12c139ac314a3fab56c7103dd3cf22a06ceb131b /llvm/test | |
| parent | 7830fc83be470953b86baa5ebd740f2b2d5b86df (diff) | |
| download | bcm5719-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.ll | 77 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll | 4 |
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] |

