Remove TPat. No patterns depend on just isThumb(). Must use either T1Pat (isThumb1Only()) or T2Pat (is Thumb2).

llvm-svn: 77242
This commit is contained in:
David Goodwin 2009-07-27 19:59:26 +00:00
parent 8675976806
commit e5b969f6a6
2 changed files with 26 additions and 30 deletions

View File

@ -816,15 +816,6 @@ class TIx2<dag oops, dag iops, string asm, list<dag> pattern>
class TJTI<dag oops, dag iops, string asm, list<dag> pattern> class TJTI<dag oops, dag iops, string asm, list<dag> pattern>
: ThumbI<oops, iops, AddrModeNone, SizeSpecial, asm, "", pattern>; : ThumbI<oops, iops, AddrModeNone, SizeSpecial, asm, "", pattern>;
// TPat - Same as Pat<>, but requires that the compiler be in Thumb mode.
class TPat<dag pattern, dag result> : Pat<pattern, result> {
list<Predicate> Predicates = [IsThumb];
}
class Tv5Pat<dag pattern, dag result> : Pat<pattern, result> {
list<Predicate> Predicates = [IsThumb, HasV5T];
}
// Thumb1 only // Thumb1 only
class Thumb1I<dag oops, dag iops, AddrMode am, SizeFlagVal sz, class Thumb1I<dag oops, dag iops, AddrMode am, SizeFlagVal sz,
string asm, string cstr, list<dag> pattern> string asm, string cstr, list<dag> pattern>
@ -894,10 +885,6 @@ class T1pI4<dag oops, dag iops, string opc, string asm, list<dag> pattern>
class T1pIs<dag oops, dag iops, string opc, string asm, list<dag> pattern> class T1pIs<dag oops, dag iops, string opc, string asm, list<dag> pattern>
: Thumb1pI<oops, iops, AddrModeT1_s, Size2Bytes, opc, asm, "", pattern>; : Thumb1pI<oops, iops, AddrModeT1_s, Size2Bytes, opc, asm, "", pattern>;
class T1Pat<dag pattern, dag result> : Pat<pattern, result> {
list<Predicate> Predicates = [IsThumb1Only];
}
// Thumb2I - Thumb2 instruction. Almost all Thumb2 instructions are predicable. // Thumb2I - Thumb2 instruction. Almost all Thumb2 instructions are predicable.
class Thumb2I<dag oops, dag iops, AddrMode am, SizeFlagVal sz, class Thumb2I<dag oops, dag iops, AddrMode am, SizeFlagVal sz,
string opc, string asm, string cstr, list<dag> pattern> string opc, string asm, string cstr, list<dag> pattern>
@ -967,6 +954,15 @@ class T2Iidxldst<dag oops, dag iops, AddrMode am, IndexMode im,
list<Predicate> Predicates = [IsThumb2]; list<Predicate> Predicates = [IsThumb2];
} }
// Tv5Pat - Same as Pat<>, but requires V5T Thumb mode.
class Tv5Pat<dag pattern, dag result> : Pat<pattern, result> {
list<Predicate> Predicates = [IsThumb1Only, HasV5T];
}
// T1Pat - Same as Pat<>, but requires that the compiler be in Thumb1 mode.
class T1Pat<dag pattern, dag result> : Pat<pattern, result> {
list<Predicate> Predicates = [IsThumb1Only];
}
// T2Pat - Same as Pat<>, but requires that the compiler be in Thumb2 mode. // T2Pat - Same as Pat<>, but requires that the compiler be in Thumb2 mode.
class T2Pat<dag pattern, dag result> : Pat<pattern, result> { class T2Pat<dag pattern, dag result> : Pat<pattern, result> {

View File

@ -575,31 +575,31 @@ let isCall = 1,
// //
// Add with carry // Add with carry
def : TPat<(addc tGPR:$lhs, imm0_7:$rhs), def : T1Pat<(addc tGPR:$lhs, imm0_7:$rhs),
(tADDi3 tGPR:$lhs, imm0_7:$rhs)>; (tADDi3 tGPR:$lhs, imm0_7:$rhs)>;
def : TPat<(addc tGPR:$lhs, imm8_255:$rhs), def : T1Pat<(addc tGPR:$lhs, imm8_255:$rhs),
(tADDi3 tGPR:$lhs, imm8_255:$rhs)>; (tADDi3 tGPR:$lhs, imm8_255:$rhs)>;
def : TPat<(addc tGPR:$lhs, tGPR:$rhs), def : T1Pat<(addc tGPR:$lhs, tGPR:$rhs),
(tADDrr tGPR:$lhs, tGPR:$rhs)>; (tADDrr tGPR:$lhs, tGPR:$rhs)>;
// Subtract with carry // Subtract with carry
def : TPat<(addc tGPR:$lhs, imm0_7_neg:$rhs), def : T1Pat<(addc tGPR:$lhs, imm0_7_neg:$rhs),
(tSUBi3 tGPR:$lhs, imm0_7_neg:$rhs)>; (tSUBi3 tGPR:$lhs, imm0_7_neg:$rhs)>;
def : TPat<(addc tGPR:$lhs, imm8_255_neg:$rhs), def : T1Pat<(addc tGPR:$lhs, imm8_255_neg:$rhs),
(tSUBi8 tGPR:$lhs, imm8_255_neg:$rhs)>; (tSUBi8 tGPR:$lhs, imm8_255_neg:$rhs)>;
def : TPat<(subc tGPR:$lhs, tGPR:$rhs), def : T1Pat<(subc tGPR:$lhs, tGPR:$rhs),
(tSUBrr tGPR:$lhs, tGPR:$rhs)>; (tSUBrr tGPR:$lhs, tGPR:$rhs)>;
// ConstantPool, GlobalAddress // ConstantPool, GlobalAddress
def : TPat<(ARMWrapper tglobaladdr :$dst), (tLEApcrel tglobaladdr :$dst)>; def : T1Pat<(ARMWrapper tglobaladdr :$dst), (tLEApcrel tglobaladdr :$dst)>;
def : TPat<(ARMWrapper tconstpool :$dst), (tLEApcrel tconstpool :$dst)>; def : T1Pat<(ARMWrapper tconstpool :$dst), (tLEApcrel tconstpool :$dst)>;
// JumpTable // JumpTable
def : TPat<(ARMWrapperJT tjumptable:$dst, imm:$id), def : T1Pat<(ARMWrapperJT tjumptable:$dst, imm:$id),
(tLEApcrelJT tjumptable:$dst, imm:$id)>; (tLEApcrelJT tjumptable:$dst, imm:$id)>;
// Direct calls // Direct calls
def : TPat<(ARMtcall texternalsym:$func), (tBL texternalsym:$func)>; def : T1Pat<(ARMtcall texternalsym:$func), (tBL texternalsym:$func)>;
def : Tv5Pat<(ARMcall texternalsym:$func), (tBLXi texternalsym:$func)>; def : Tv5Pat<(ARMcall texternalsym:$func), (tBLXi texternalsym:$func)>;
// Indirect calls to ARM routines // Indirect calls to ARM routines