|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
1 | 2 | ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s
|
2 | 3 |
|
3 | 4 | ; This tests whether or not we generate vectors large than preferred vector width when
|
4 | 5 | ; lowering memmove.
|
5 | 6 |
|
6 | 7 | ; Function Attrs: nounwind uwtable
|
7 | 8 | define weak_odr dso_local void @A(i8* %src, i8* %dst) local_unnamed_addr #0 {
|
| 9 | +; CHECK-LABEL: A: |
| 10 | +; CHECK: # %bb.0: # %entry |
| 11 | +; CHECK-NEXT: vmovups (%rdi), %xmm0 |
| 12 | +; CHECK-NEXT: vmovups 16(%rdi), %xmm1 |
| 13 | +; CHECK-NEXT: vmovups %xmm1, 16(%rsi) |
| 14 | +; CHECK-NEXT: vmovups %xmm0, (%rsi) |
| 15 | +; CHECK-NEXT: retq |
8 | 16 | entry:
|
9 |
| -; CHECK: A |
10 |
| -; CHECK-NOT: vmovups %ymm |
11 |
| -; CHECK: vmovups %xmm |
12 | 17 | call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %dst, i8* align 1 %src, i64 32, i1 false)
|
13 | 18 | ret void
|
14 | 19 | }
|
15 | 20 |
|
16 | 21 | ; Function Attrs: nounwind uwtable
|
17 | 22 | define weak_odr dso_local void @B(i8* %src, i8* %dst) local_unnamed_addr #0 {
|
| 23 | +; CHECK-LABEL: B: |
| 24 | +; CHECK: # %bb.0: # %entry |
| 25 | +; CHECK-NEXT: vmovups (%rdi), %xmm0 |
| 26 | +; CHECK-NEXT: vmovups 16(%rdi), %xmm1 |
| 27 | +; CHECK-NEXT: vmovups 32(%rdi), %xmm2 |
| 28 | +; CHECK-NEXT: vmovups 48(%rdi), %xmm3 |
| 29 | +; CHECK-NEXT: vmovups %xmm3, 48(%rsi) |
| 30 | +; CHECK-NEXT: vmovups %xmm2, 32(%rsi) |
| 31 | +; CHECK-NEXT: vmovups %xmm1, 16(%rsi) |
| 32 | +; CHECK-NEXT: vmovups %xmm0, (%rsi) |
| 33 | +; CHECK-NEXT: retq |
18 | 34 | entry:
|
19 |
| -; CHECK: B |
20 |
| -; CHECK-NOT: vmovups %zmm |
21 |
| -; CHECK: vmovups %xmm |
22 | 35 | call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %dst, i8* align 1 %src, i64 64, i1 false)
|
23 | 36 | ret void
|
24 | 37 | }
|
25 | 38 |
|
26 | 39 | ; Function Attrs: nounwind uwtable
|
27 | 40 | define weak_odr dso_local void @C(i8* %src, i8* %dst) local_unnamed_addr #2 {
|
| 41 | +; CHECK-LABEL: C: |
| 42 | +; CHECK: # %bb.0: # %entry |
| 43 | +; CHECK-NEXT: vmovups (%rdi), %ymm0 |
| 44 | +; CHECK-NEXT: vmovups %ymm0, (%rsi) |
| 45 | +; CHECK-NEXT: vzeroupper |
| 46 | +; CHECK-NEXT: retq |
28 | 47 | entry:
|
29 |
| -; CHECK: C |
30 |
| -; CHECK-NOT: vmovups %ymm |
31 |
| -; CHECK: vmovups %ymm |
32 | 48 | call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %dst, i8* align 1 %src, i64 32, i1 false)
|
33 | 49 | ret void
|
34 | 50 | }
|
35 | 51 |
|
36 | 52 | ; Function Attrs: nounwind uwtable
|
37 | 53 | define weak_odr dso_local void @D(i8* %src, i8* %dst) local_unnamed_addr #2 {
|
| 54 | +; CHECK-LABEL: D: |
| 55 | +; CHECK: # %bb.0: # %entry |
| 56 | +; CHECK-NEXT: vmovups (%rdi), %ymm0 |
| 57 | +; CHECK-NEXT: vmovups 32(%rdi), %ymm1 |
| 58 | +; CHECK-NEXT: vmovups %ymm1, 32(%rsi) |
| 59 | +; CHECK-NEXT: vmovups %ymm0, (%rsi) |
| 60 | +; CHECK-NEXT: vzeroupper |
| 61 | +; CHECK-NEXT: retq |
38 | 62 | entry:
|
39 |
| -; CHECK: D |
40 |
| -; CHECK-NOT: vmovups %zmm |
41 |
| -; CHECK: vmovups %ymm |
42 | 63 | call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %dst, i8* align 1 %src, i64 64, i1 false)
|
43 | 64 | ret void
|
44 | 65 | }
|
|
0 commit comments