forked from OSchip/llvm-project
Don't use 64-bit versions of MOVMSKPD in CodeGen. The instructions only produce a 1-bit result so we can just use SUBREG_TO_REG to extend the 32-bit versions.
llvm-svn: 192562
This commit is contained in:
parent
7af18578f8
commit
c4a5a3f65d
|
@ -2731,11 +2731,13 @@ let Predicates = [HasAVX] in {
|
||||||
def : Pat<(i32 (X86fgetsign FR32:$src)),
|
def : Pat<(i32 (X86fgetsign FR32:$src)),
|
||||||
(VMOVMSKPSrr32 (COPY_TO_REGCLASS FR32:$src, VR128))>;
|
(VMOVMSKPSrr32 (COPY_TO_REGCLASS FR32:$src, VR128))>;
|
||||||
def : Pat<(i64 (X86fgetsign FR32:$src)),
|
def : Pat<(i64 (X86fgetsign FR32:$src)),
|
||||||
(VMOVMSKPSrr64 (COPY_TO_REGCLASS FR32:$src, VR128))>;
|
(SUBREG_TO_REG (i64 0),
|
||||||
|
(VMOVMSKPSrr32 (COPY_TO_REGCLASS FR32:$src, VR128)), sub_32bit)>;
|
||||||
def : Pat<(i32 (X86fgetsign FR64:$src)),
|
def : Pat<(i32 (X86fgetsign FR64:$src)),
|
||||||
(VMOVMSKPDrr32 (COPY_TO_REGCLASS FR64:$src, VR128))>;
|
(VMOVMSKPDrr32 (COPY_TO_REGCLASS FR64:$src, VR128))>;
|
||||||
def : Pat<(i64 (X86fgetsign FR64:$src)),
|
def : Pat<(i64 (X86fgetsign FR64:$src)),
|
||||||
(VMOVMSKPDrr64 (COPY_TO_REGCLASS FR64:$src, VR128))>;
|
(SUBREG_TO_REG (i64 0),
|
||||||
|
(VMOVMSKPDrr32 (COPY_TO_REGCLASS FR64:$src, VR128)), sub_32bit)>;
|
||||||
}
|
}
|
||||||
|
|
||||||
defm MOVMSKPS : sse12_extr_sign_mask<VR128, int_x86_sse_movmsk_ps, "movmskps",
|
defm MOVMSKPS : sse12_extr_sign_mask<VR128, int_x86_sse_movmsk_ps, "movmskps",
|
||||||
|
@ -2747,13 +2749,15 @@ def : Pat<(i32 (X86fgetsign FR32:$src)),
|
||||||
(MOVMSKPSrr32 (COPY_TO_REGCLASS FR32:$src, VR128))>,
|
(MOVMSKPSrr32 (COPY_TO_REGCLASS FR32:$src, VR128))>,
|
||||||
Requires<[UseSSE1]>;
|
Requires<[UseSSE1]>;
|
||||||
def : Pat<(i64 (X86fgetsign FR32:$src)),
|
def : Pat<(i64 (X86fgetsign FR32:$src)),
|
||||||
(MOVMSKPSrr64 (COPY_TO_REGCLASS FR32:$src, VR128))>,
|
(SUBREG_TO_REG (i64 0),
|
||||||
|
(MOVMSKPSrr32 (COPY_TO_REGCLASS FR32:$src, VR128)), sub_32bit)>,
|
||||||
Requires<[UseSSE1]>;
|
Requires<[UseSSE1]>;
|
||||||
def : Pat<(i32 (X86fgetsign FR64:$src)),
|
def : Pat<(i32 (X86fgetsign FR64:$src)),
|
||||||
(MOVMSKPDrr32 (COPY_TO_REGCLASS FR64:$src, VR128))>,
|
(MOVMSKPDrr32 (COPY_TO_REGCLASS FR64:$src, VR128))>,
|
||||||
Requires<[UseSSE2]>;
|
Requires<[UseSSE2]>;
|
||||||
def : Pat<(i64 (X86fgetsign FR64:$src)),
|
def : Pat<(i64 (X86fgetsign FR64:$src)),
|
||||||
(MOVMSKPDrr64 (COPY_TO_REGCLASS FR64:$src, VR128))>,
|
(SUBREG_TO_REG (i64 0),
|
||||||
|
(MOVMSKPDrr32 (COPY_TO_REGCLASS FR64:$src, VR128)), sub_32bit)>,
|
||||||
Requires<[UseSSE2]>;
|
Requires<[UseSSE2]>;
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
Loading…
Reference in New Issue