mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-18 13:34:04 +00:00
Fix a couple bugs in the const div stuff where we'd generate MULHS/MULHU
for types that aren't legal, and fail a divisor is less than zero comparison, which would cause us to drop a subtract. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23846 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f75f2a0a02
commit
c6a454e8d5
@ -790,7 +790,8 @@ SDOperand DAGCombiner::visitSDIV(SDNode *N) {
|
||||
// detect that too.
|
||||
if (N1C && !isPowerOf2_64(N1C->getSignExtended()) &&
|
||||
(N1C->getSignExtended() < -1 || N1C->getSignExtended() > 1) &&
|
||||
TLI.isOperationLegal(ISD::MULHS, VT) && TLI.isIntDivExpensive()) {
|
||||
TLI.isOperationLegal(ISD::MULHS, VT) && TLI.isTypeLegal(VT) &&
|
||||
TLI.isIntDivExpensive()) {
|
||||
return BuildSDIV(N);
|
||||
}
|
||||
return SDOperand();
|
||||
@ -814,7 +815,7 @@ SDOperand DAGCombiner::visitUDIV(SDNode *N) {
|
||||
TLI.getShiftAmountTy()));
|
||||
// fold (udiv x, c) -> alternate
|
||||
if (N1C && N1C->getValue() && TLI.isOperationLegal(ISD::MULHU, VT) &&
|
||||
TLI.isIntDivExpensive())
|
||||
TLI.isTypeLegal(VT) && TLI.isIntDivExpensive())
|
||||
return BuildUDIV(N);
|
||||
return SDOperand();
|
||||
}
|
||||
@ -2555,7 +2556,7 @@ SDOperand DAGCombiner::BuildSDIV(SDNode *N) {
|
||||
assert((VT == MVT::i32 || VT == MVT::i64) &&
|
||||
"BuildSDIV only operates on i32 or i64!");
|
||||
|
||||
int64_t d = cast<ConstantSDNode>(N->getOperand(1))->getValue();
|
||||
int64_t d = cast<ConstantSDNode>(N->getOperand(1))->getSignExtended();
|
||||
ms magics = (VT == MVT::i32) ? magic32(d) : magic64(d);
|
||||
|
||||
// Multiply the numerator (operand 0) by the magic value
|
||||
|
Loading…
x
Reference in New Issue
Block a user