Skip to content

Commit 4d66760

Browse files
committed
[M68k] Fix MOVSZX pattern matching for i8 -> i32
The patterns to move and extend i8 to i32 were matched to a chain that first extended i8 -> i16, then i16 -> i32. This is not necessary because the pseudos are implemented for i8 -> i32, which eliminates redundant instructions.
1 parent d0d0f04 commit 4d66760

File tree

1 file changed

+12
-24
lines changed

1 file changed

+12
-24
lines changed

llvm/lib/Target/M68k/M68kInstrData.td

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -644,14 +644,10 @@ def MOVXd32d16 : MxPseudoMove_RR<MxType32r, MxType16r>;
644644
//===----------------------------------------------------------------------===//
645645

646646
// i16 <- sext i8
647-
def: Pat<(i16 (sext i8:$src)),
648-
(EXTRACT_SUBREG (MOVSXd32d8 MxDRD8:$src), MxSubRegIndex16Lo)>;
649-
def: Pat<(MxSExtLoadi16i8 MxCP_ARI:$src),
650-
(EXTRACT_SUBREG (MOVSXd32j8 MxARI8:$src), MxSubRegIndex16Lo)>;
651-
def: Pat<(MxSExtLoadi16i8 MxCP_ARID:$src),
652-
(EXTRACT_SUBREG (MOVSXd32p8 MxARID8:$src), MxSubRegIndex16Lo)>;
653-
def: Pat<(MxSExtLoadi16i8 MxCP_ARII:$src),
654-
(EXTRACT_SUBREG (MOVSXd32f8 MxARII8:$src), MxSubRegIndex16Lo)>;
647+
def: Pat<(i16 (sext i8:$src)), (MOVSXd16d8 MxDRD8:$src)>;
648+
def: Pat<(MxSExtLoadi16i8 MxCP_ARI:$src), (MOVSXd16j8 MxARI8:$src)>;
649+
def: Pat<(MxSExtLoadi16i8 MxCP_ARID:$src), (MOVSXd16p8 MxARID8:$src)>;
650+
def: Pat<(MxSExtLoadi16i8 MxCP_ARII:$src), (MOVSXd16f8 MxARII8:$src)>;
655651
def: Pat<(MxSExtLoadi16i8 MxCP_PCD:$src), (MOVSXd16q8 MxPCD8:$src)>;
656652

657653
// i32 <- sext i8
@@ -669,14 +665,10 @@ def: Pat<(MxSExtLoadi32i16 MxCP_ARII:$src), (MOVSXd32f16 MxARII16:$src)>;
669665
def: Pat<(MxSExtLoadi32i16 MxCP_PCD:$src), (MOVSXd32q16 MxPCD16:$src)>;
670666

671667
// i16 <- zext i8
672-
def: Pat<(i16 (zext i8:$src)),
673-
(EXTRACT_SUBREG (MOVZXd32d8 MxDRD8:$src), MxSubRegIndex16Lo)>;
674-
def: Pat<(MxZExtLoadi16i8 MxCP_ARI:$src),
675-
(EXTRACT_SUBREG (MOVZXd32j8 MxARI8:$src), MxSubRegIndex16Lo)>;
676-
def: Pat<(MxZExtLoadi16i8 MxCP_ARID:$src),
677-
(EXTRACT_SUBREG (MOVZXd32p8 MxARID8:$src), MxSubRegIndex16Lo)>;
678-
def: Pat<(MxZExtLoadi16i8 MxCP_ARII:$src),
679-
(EXTRACT_SUBREG (MOVZXd32f8 MxARII8:$src), MxSubRegIndex16Lo)>;
668+
def: Pat<(i16 (zext i8:$src)), (MOVZXd16d8 MxDRD8:$src)>;
669+
def: Pat<(MxZExtLoadi16i8 MxCP_ARI:$src), (MOVZXd16j8 MxARI8:$src)>;
670+
def: Pat<(MxZExtLoadi16i8 MxCP_ARID:$src), (MOVZXd16p8 MxARID8:$src)>;
671+
def: Pat<(MxZExtLoadi16i8 MxCP_ARII:$src), (MOVZXd16f8 MxARII8:$src)>;
680672
def: Pat<(MxZExtLoadi16i8 MxCP_PCD :$src), (MOVZXd16q8 MxPCD8 :$src)>;
681673

682674
// i32 <- zext i8
@@ -694,14 +686,10 @@ def: Pat<(MxZExtLoadi32i16 MxCP_ARII:$src), (MOVZXd32f16 MxARII16:$src)>;
694686
def: Pat<(MxZExtLoadi32i16 MxCP_PCD :$src), (MOVZXd32q16 MxPCD16 :$src)>;
695687

696688
// i16 <- anyext i8
697-
def: Pat<(i16 (anyext i8:$src)),
698-
(EXTRACT_SUBREG (MOVZXd32d8 MxDRD8:$src), MxSubRegIndex16Lo)>;
699-
def: Pat<(MxExtLoadi16i8 MxCP_ARI:$src),
700-
(EXTRACT_SUBREG (MOVZXd32j8 MxARI8:$src), MxSubRegIndex16Lo)>;
701-
def: Pat<(MxExtLoadi16i8 MxCP_ARID:$src),
702-
(EXTRACT_SUBREG (MOVZXd32p8 MxARID8:$src), MxSubRegIndex16Lo)>;
703-
def: Pat<(MxExtLoadi16i8 MxCP_ARII:$src),
704-
(EXTRACT_SUBREG (MOVZXd32f8 MxARII8:$src), MxSubRegIndex16Lo)>;
689+
def: Pat<(i16 (anyext i8:$src)), (MOVZXd16d8 MxDRD8:$src)>;
690+
def: Pat<(MxExtLoadi16i8 MxCP_ARI:$src), (MOVZXd16j8 MxARI8:$src)>;
691+
def: Pat<(MxExtLoadi16i8 MxCP_ARID:$src), (MOVZXd16p8 MxARID8:$src)>;
692+
def: Pat<(MxExtLoadi16i8 MxCP_ARII:$src), (MOVZXd16f8 MxARII8:$src)>;
705693

706694
// i32 <- anyext i8
707695
def: Pat<(i32 (anyext i8:$src)), (MOVZXd32d8 MxDRD8:$src)>;

0 commit comments

Comments
 (0)