diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/avx-load-store.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/avx-load-store.ll | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/avx-load-store.ll b/llvm/test/CodeGen/X86/avx-load-store.ll index 402e2705191..1b3c35855ae 100644 --- a/llvm/test/CodeGen/X86/avx-load-store.ll +++ b/llvm/test/CodeGen/X86/avx-load-store.ll @@ -333,3 +333,26 @@ define void @add4i64a16(<4 x i64>* %ret, <4 x i64>* %bp) nounwind { ret void } +; This used to crash. +; v2i128 may not be a "simple" (MVT) type, but we can split that. +; This example gets split further in legalization. + +define void @PR43916(<2 x i128> %y, <2 x i128>* %z) { +; CHECK-LABEL: PR43916: +; CHECK: # %bb.0: +; CHECK-NEXT: movq %rcx, 24(%r8) +; CHECK-NEXT: movq %rdx, 16(%r8) +; CHECK-NEXT: movq %rsi, 8(%r8) +; CHECK-NEXT: movq %rdi, (%r8) +; CHECK-NEXT: retq +; +; CHECK_O0-LABEL: PR43916: +; CHECK_O0: # %bb.0: +; CHECK_O0-NEXT: movq %rdi, (%r8) +; CHECK_O0-NEXT: movq %rsi, 8(%r8) +; CHECK_O0-NEXT: movq %rdx, 16(%r8) +; CHECK_O0-NEXT: movq %rcx, 24(%r8) +; CHECK_O0-NEXT: retq + store <2 x i128> %y, <2 x i128>* %z, align 16 + ret void +} |