mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 21:00:29 +00:00
[X86] Remove some standalone patterns in favor of the patterns in the MOVLPD instruction definitions.
Previously we passed 'null_frag' into the instruction definition. The multiclass is shared with MOVHPD which doesn't use null_frag. It turns out by passing X86Movsd it produces patterns equivalent to some standalone patterns. llvm-svn: 337299
This commit is contained in:
parent
7bb344125a
commit
13231caa1c
@ -6458,7 +6458,7 @@ defm VMOVHPDZ128 : avx512_mov_hilo_packed<0x16, "vmovhpd", X86Unpckl,
|
||||
v2f64x_info>, EVEX_CD8<64, CD8VT1>, PD, VEX_W;
|
||||
defm VMOVLPSZ128 : avx512_mov_hilo_packed<0x12, "vmovlps", null_frag,
|
||||
v4f32x_info>, EVEX_CD8<32, CD8VT2>, PS;
|
||||
defm VMOVLPDZ128 : avx512_mov_hilo_packed<0x12, "vmovlpd", null_frag,
|
||||
defm VMOVLPDZ128 : avx512_mov_hilo_packed<0x12, "vmovlpd", X86Movsd,
|
||||
v2f64x_info>, EVEX_CD8<64, CD8VT1>, PD, VEX_W;
|
||||
|
||||
let Predicates = [HasAVX512] in {
|
||||
@ -6473,10 +6473,6 @@ let Predicates = [HasAVX512] in {
|
||||
def : Pat<(v2f64 (X86Unpckl VR128X:$src1,
|
||||
(bc_v2f64 (v2i64 (scalar_to_vector (loadi64 addr:$src2)))))),
|
||||
(VMOVHPDZ128rm VR128X:$src1, addr:$src2)>;
|
||||
// VMOVLPD patterns
|
||||
def : Pat<(v2f64 (X86Movsd VR128X:$src1,
|
||||
(v2f64 (scalar_to_vector (loadf64 addr:$src2))))),
|
||||
(VMOVLPDZ128rm VR128X:$src1, addr:$src2)>;
|
||||
}
|
||||
|
||||
let SchedRW = [WriteFStore] in {
|
||||
|
@ -695,7 +695,7 @@ multiclass sse12_mov_hilo_packed<bits<8>opc, SDPatternOperator psnode,
|
||||
"\t{$src2, $dst|$dst, $src2}">;
|
||||
}
|
||||
|
||||
defm MOVL : sse12_mov_hilo_packed<0x12, null_frag, null_frag, "movlp">;
|
||||
defm MOVL : sse12_mov_hilo_packed<0x12, null_frag, X86Movsd, "movlp">;
|
||||
|
||||
let SchedRW = [WriteFStore] in {
|
||||
let Predicates = [UseAVX] in {
|
||||
@ -720,13 +720,6 @@ def MOVLPDmr : PDI<0x13, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
|
||||
(iPTR 0))), addr:$dst)]>;
|
||||
} // SchedRW
|
||||
|
||||
let Predicates = [UseAVX] in {
|
||||
// Shuffle with VMOVLPD
|
||||
def : Pat<(v2f64 (X86Movsd VR128:$src1,
|
||||
(v2f64 (scalar_to_vector (loadf64 addr:$src2))))),
|
||||
(VMOVLPDrm VR128:$src1, addr:$src2)>;
|
||||
}
|
||||
|
||||
let Predicates = [UseSSE1] in {
|
||||
// (store (vector_shuffle (load addr), v2, <4, 5, 2, 3>), addr) using MOVLPS
|
||||
def : Pat<(store (i64 (extractelt (bc_v2i64 (v4f32 VR128:$src2)),
|
||||
@ -734,13 +727,6 @@ let Predicates = [UseSSE1] in {
|
||||
(MOVLPSmr addr:$src1, VR128:$src2)>;
|
||||
}
|
||||
|
||||
let Predicates = [UseSSE2] in {
|
||||
// Shuffle with MOVLPD
|
||||
def : Pat<(v2f64 (X86Movsd VR128:$src1,
|
||||
(v2f64 (scalar_to_vector (loadf64 addr:$src2))))),
|
||||
(MOVLPDrm VR128:$src1, addr:$src2)>;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// SSE 1 & 2 - Move Hi packed FP Instructions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Loading…
Reference in New Issue
Block a user