mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 02:36:06 +00:00
factor the 'sign extended from 8 bit' patterns better so
that they are not destination type specific. This allows tblgen to factor them and the type check is redundant with what the isel does anyway. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97629 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
506049f29f
commit
1840991d54
@ -1361,7 +1361,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
Opc = X86::LOCK_DEC16m;
|
||||
else if (isSub) {
|
||||
if (isCN) {
|
||||
if (Predicate_i16immSExt8(Val.getNode()))
|
||||
if (Predicate_immSext8(Val.getNode()))
|
||||
Opc = X86::LOCK_SUB16mi8;
|
||||
else
|
||||
Opc = X86::LOCK_SUB16mi;
|
||||
@ -1369,7 +1369,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
Opc = X86::LOCK_SUB16mr;
|
||||
} else {
|
||||
if (isCN) {
|
||||
if (Predicate_i16immSExt8(Val.getNode()))
|
||||
if (Predicate_immSext8(Val.getNode()))
|
||||
Opc = X86::LOCK_ADD16mi8;
|
||||
else
|
||||
Opc = X86::LOCK_ADD16mi;
|
||||
@ -1384,7 +1384,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
Opc = X86::LOCK_DEC32m;
|
||||
else if (isSub) {
|
||||
if (isCN) {
|
||||
if (Predicate_i32immSExt8(Val.getNode()))
|
||||
if (Predicate_immSext8(Val.getNode()))
|
||||
Opc = X86::LOCK_SUB32mi8;
|
||||
else
|
||||
Opc = X86::LOCK_SUB32mi;
|
||||
@ -1392,7 +1392,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
Opc = X86::LOCK_SUB32mr;
|
||||
} else {
|
||||
if (isCN) {
|
||||
if (Predicate_i32immSExt8(Val.getNode()))
|
||||
if (Predicate_immSext8(Val.getNode()))
|
||||
Opc = X86::LOCK_ADD32mi8;
|
||||
else
|
||||
Opc = X86::LOCK_ADD32mi;
|
||||
@ -1408,7 +1408,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
else if (isSub) {
|
||||
Opc = X86::LOCK_SUB64mr;
|
||||
if (isCN) {
|
||||
if (Predicate_i64immSExt8(Val.getNode()))
|
||||
if (Predicate_immSext8(Val.getNode()))
|
||||
Opc = X86::LOCK_SUB64mi8;
|
||||
else if (Predicate_i64immSExt32(Val.getNode()))
|
||||
Opc = X86::LOCK_SUB64mi32;
|
||||
@ -1416,7 +1416,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
} else {
|
||||
Opc = X86::LOCK_ADD64mr;
|
||||
if (isCN) {
|
||||
if (Predicate_i64immSExt8(Val.getNode()))
|
||||
if (Predicate_immSext8(Val.getNode()))
|
||||
Opc = X86::LOCK_ADD64mi8;
|
||||
else if (Predicate_i64immSExt32(Val.getNode()))
|
||||
Opc = X86::LOCK_ADD64mi32;
|
||||
|
@ -59,11 +59,7 @@ def tls64addr : ComplexPattern<i64, 4, "SelectTLSADDRAddr",
|
||||
// Pattern fragments.
|
||||
//
|
||||
|
||||
def i64immSExt8 : PatLeaf<(i64 imm), [{
|
||||
// i64immSExt8 predicate - True if the 64-bit immediate fits in a 8-bit
|
||||
// sign extended field.
|
||||
return (int64_t)N->getZExtValue() == (int8_t)N->getZExtValue();
|
||||
}]>;
|
||||
def i64immSExt8 : PatLeaf<(i64 immSext8)>;
|
||||
|
||||
def GetLo32XForm : SDNodeXForm<imm, [{
|
||||
// Transformation function: get the low 32 bits.
|
||||
|
@ -343,17 +343,12 @@ def X86_COND_O : PatLeaf<(i8 13)>;
|
||||
def X86_COND_P : PatLeaf<(i8 14)>; // alt. COND_PE
|
||||
def X86_COND_S : PatLeaf<(i8 15)>;
|
||||
|
||||
def i16immSExt8 : PatLeaf<(i16 imm), [{
|
||||
// i16immSExt8 predicate - True if the 16-bit immediate fits in a 8-bit
|
||||
// sign extended field.
|
||||
return (int16_t)N->getZExtValue() == (int8_t)N->getZExtValue();
|
||||
def immSext8 : PatLeaf<(imm), [{
|
||||
return N->getSExtValue() == (int8_t)N->getSExtValue();
|
||||
}]>;
|
||||
|
||||
def i32immSExt8 : PatLeaf<(i32 imm), [{
|
||||
// i32immSExt8 predicate - True if the 32-bit immediate fits in a 8-bit
|
||||
// sign extended field.
|
||||
return (int32_t)N->getZExtValue() == (int8_t)N->getZExtValue();
|
||||
}]>;
|
||||
def i16immSExt8 : PatLeaf<(i16 immSext8)>;
|
||||
def i32immSExt8 : PatLeaf<(i32 immSext8)>;
|
||||
|
||||
// Helper fragments for loads.
|
||||
// It's always safe to treat a anyext i16 load as a i32 load if the i16 is
|
||||
|
Loading…
x
Reference in New Issue
Block a user