forked from OSchip/llvm-project
[X86] Add an isel pattern for (i8 (trunc (i16 (bitconvert (v16i1 X))))) to avoid an extra EXTRACT_SUBREG
Since we can only copy to GR32 we had to EXTRACT from GR32, but we would first go to GR16 and then the truncate would extra again to GR8. This adds a special case to go directly from GR32 to GR8. This would eventually get cleaned up, but though maybe we should avoid doing it in the first place. Our k-register handling is weird and we could probably stand to have some more special ISD nodes for the conversions so the i32 type would be explicit.
This commit is contained in:
parent
8839e278ff
commit
1d1515a9e2
|
@ -2884,6 +2884,8 @@ def : Pat<(v16i1 (bitconvert (i16 GR16:$src))),
|
|||
(COPY_TO_REGCLASS (i32 (INSERT_SUBREG (IMPLICIT_DEF), GR16:$src, sub_16bit)), VK16)>;
|
||||
def : Pat<(i16 (bitconvert (v16i1 VK16:$src))),
|
||||
(EXTRACT_SUBREG (i32 (COPY_TO_REGCLASS VK16:$src, GR32)), sub_16bit)>;
|
||||
def : Pat<(i8 (trunc (i16 (bitconvert (v16i1 VK16:$src))))),
|
||||
(EXTRACT_SUBREG (i32 (COPY_TO_REGCLASS VK16:$src, GR32)), sub_8bit)>;
|
||||
|
||||
def : Pat<(v8i1 (bitconvert (i8 GR8:$src))),
|
||||
(COPY_TO_REGCLASS (i32 (INSERT_SUBREG (IMPLICIT_DEF), GR8:$src, sub_8bit)), VK8)>;
|
||||
|
|
Loading…
Reference in New Issue