summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/CodeGen/X86/extractelement-load.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/extractelement-load.ll b/llvm/test/CodeGen/X86/extractelement-load.ll
index 915b9bfa8d1..9f044dc6206 100644
--- a/llvm/test/CodeGen/X86/extractelement-load.ll
+++ b/llvm/test/CodeGen/X86/extractelement-load.ll
@@ -93,3 +93,29 @@ define i64 @t4(<2 x double>* %a) {
ret i64 %e
}
+; Don't extract from a volatile.
+define void @t5(<2 x double> *%a0, double *%a1) {
+; X32-SSE2-LABEL: t5:
+; X32-SSE2: # %bb.0:
+; X32-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X32-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
+; X32-SSE2-NEXT: movaps (%ecx), %xmm0
+; X32-SSE2-NEXT: movhps %xmm0, (%eax)
+; X32-SSE2-NEXT: retl
+;
+; X64-SSSE3-LABEL: t5:
+; X64-SSSE3: # %bb.0:
+; X64-SSSE3-NEXT: movaps (%rdi), %xmm0
+; X64-SSSE3-NEXT: movhps %xmm0, (%rsi)
+; X64-SSSE3-NEXT: retq
+;
+; X64-AVX-LABEL: t5:
+; X64-AVX: # %bb.0:
+; X64-AVX-NEXT: vmovaps (%rdi), %xmm0
+; X64-AVX-NEXT: vmovhps %xmm0, (%rsi)
+; X64-AVX-NEXT: retq
+ %vecload = load volatile <2 x double>, <2 x double>* %a0, align 16
+ %vecext = extractelement <2 x double> %vecload, i32 1
+ store volatile double %vecext, double* %a1, align 8
+ ret void
+}
OpenPOWER on IntegriCloud