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:
Craig Topper 2013-10-14 00:24:33 +00:00
parent 7af18578f8
commit c4a5a3f65d
1 changed files with 8 additions and 4 deletions

View File

@ -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]>;
//===---------------------------------------------------------------------===// //===---------------------------------------------------------------------===//