mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-08 18:30:04 +00:00
Remove intrinsic specific instructions for (V)MOVQUmr with patterns pointing to the normal instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169482 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ab69b25f4b
commit
da92646875
@ -3606,25 +3606,17 @@ def MOVDQUmr : I<0x7F, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src),
|
|||||||
XS, Requires<[UseSSE2]>;
|
XS, Requires<[UseSSE2]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Intrinsic forms of MOVDQU load and store
|
|
||||||
def VMOVDQUmr_Int : I<0x7F, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src),
|
|
||||||
"vmovdqu\t{$src, $dst|$dst, $src}",
|
|
||||||
[(int_x86_sse2_storeu_dq addr:$dst, VR128:$src)],
|
|
||||||
IIC_SSE_MOVU_P_MR>,
|
|
||||||
XS, VEX, Requires<[HasAVX]>;
|
|
||||||
|
|
||||||
def MOVDQUmr_Int : I<0x7F, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src),
|
|
||||||
"movdqu\t{$src, $dst|$dst, $src}",
|
|
||||||
[(int_x86_sse2_storeu_dq addr:$dst, VR128:$src)],
|
|
||||||
IIC_SSE_MOVU_P_MR>,
|
|
||||||
XS, Requires<[UseSSE2]>;
|
|
||||||
|
|
||||||
} // ExeDomain = SSEPackedInt
|
} // ExeDomain = SSEPackedInt
|
||||||
|
|
||||||
let Predicates = [HasAVX] in {
|
let Predicates = [HasAVX] in {
|
||||||
|
def : Pat<(int_x86_sse2_storeu_dq addr:$dst, VR128:$src),
|
||||||
|
(VMOVDQUmr addr:$dst, VR128:$src)>;
|
||||||
def : Pat<(int_x86_avx_storeu_dq_256 addr:$dst, VR256:$src),
|
def : Pat<(int_x86_avx_storeu_dq_256 addr:$dst, VR256:$src),
|
||||||
(VMOVDQUYmr addr:$dst, VR256:$src)>;
|
(VMOVDQUYmr addr:$dst, VR256:$src)>;
|
||||||
}
|
}
|
||||||
|
let Predicates = [UseSSE2] in
|
||||||
|
def : Pat<(int_x86_sse2_storeu_dq addr:$dst, VR128:$src),
|
||||||
|
(MOVDQUmr addr:$dst, VR128:$src)>;
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
// SSE2 - Packed Integer Arithmetic Instructions
|
// SSE2 - Packed Integer Arithmetic Instructions
|
||||||
|
@ -671,7 +671,9 @@ define void @test_x86_sse2_storeu_dq(i8* %a0, <16 x i8> %a1) {
|
|||||||
; CHECK: test_x86_sse2_storeu_dq
|
; CHECK: test_x86_sse2_storeu_dq
|
||||||
; CHECK: movl
|
; CHECK: movl
|
||||||
; CHECK: vmovdqu
|
; CHECK: vmovdqu
|
||||||
call void @llvm.x86.sse2.storeu.dq(i8* %a0, <16 x i8> %a1)
|
; add operation forces the execution domain.
|
||||||
|
%a2 = add <16 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
|
||||||
|
call void @llvm.x86.sse2.storeu.dq(i8* %a0, <16 x i8> %a2)
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
declare void @llvm.x86.sse2.storeu.dq(i8*, <16 x i8>) nounwind
|
declare void @llvm.x86.sse2.storeu.dq(i8*, <16 x i8>) nounwind
|
||||||
@ -681,6 +683,7 @@ define void @test_x86_sse2_storeu_pd(i8* %a0, <2 x double> %a1) {
|
|||||||
; CHECK: test_x86_sse2_storeu_pd
|
; CHECK: test_x86_sse2_storeu_pd
|
||||||
; CHECK: movl
|
; CHECK: movl
|
||||||
; CHECK: vmovupd
|
; CHECK: vmovupd
|
||||||
|
; fadd operation forces the execution domain.
|
||||||
%a2 = fadd <2 x double> %a1, <double 0x0, double 0x4200000000000000>
|
%a2 = fadd <2 x double> %a1, <double 0x0, double 0x4200000000000000>
|
||||||
call void @llvm.x86.sse2.storeu.pd(i8* %a0, <2 x double> %a2)
|
call void @llvm.x86.sse2.storeu.pd(i8* %a0, <2 x double> %a2)
|
||||||
ret void
|
ret void
|
||||||
|
Loading…
Reference in New Issue
Block a user