mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Add extra SEXT pattern.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77920 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -95,6 +95,12 @@ def neg_xform : SDNodeXForm<imm, [{
|
||||
return getI32Imm(-value);
|
||||
}]>;
|
||||
|
||||
def bpwsub_xform : SDNodeXForm<imm, [{
|
||||
// Transformation function: 32-imm
|
||||
uint32_t value = N->getZExtValue();
|
||||
return getI32Imm(32-value);
|
||||
}]>;
|
||||
|
||||
def div4neg_xform : SDNodeXForm<imm, [{
|
||||
// Transformation function: -imm/4
|
||||
uint32_t value = N->getZExtValue();
|
||||
@@ -162,6 +168,14 @@ def immBitp : PatLeaf<(imm), [{
|
||||
|| value == 32;
|
||||
}]>;
|
||||
|
||||
def immBpwSubBitp : PatLeaf<(imm), [{
|
||||
uint32_t value = (uint32_t)N->getZExtValue();
|
||||
return (value >= 24 && value <= 31)
|
||||
|| value == 16
|
||||
|| value == 8
|
||||
|| value == 0;
|
||||
}]>;
|
||||
|
||||
def lda16f : PatFrag<(ops node:$addr, node:$offset),
|
||||
(add node:$addr, (shl node:$offset, 1))>;
|
||||
def lda16b : PatFrag<(ops node:$addr, node:$offset),
|
||||
@@ -989,3 +1003,5 @@ def : Pat<(mul GRRegs:$src, -3),
|
||||
def : Pat<(sra GRRegs:$src, 31),
|
||||
(ASHR_l2rus GRRegs:$src, 32)>;
|
||||
|
||||
def : Pat<(sra (shl GRRegs:$src, immBpwSubBitp:$imm), immBpwSubBitp:$imm),
|
||||
(SEXT_rus GRRegs:$src, (bpwsub_xform immBpwSubBitp:$imm))>;
|
||||
|
Reference in New Issue
Block a user