mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-13 10:32:06 +00:00
- Fix comment so that it describes how the code really works:
// fold (or (shl x, (*ext y)), (srl x, (*ext (sub 32, y)))) -> // (rotl x, y) // fold (or (shl x, (*ext y)), (srl x, (*ext (sub 32, y)))) -> // (rotr x, (sub 32, y)) Example: (x == 0xDEADBEEF and y == 4) (x << 4) | (x >> 28) => 0xEADBEEF0 | 0x0000000D => 0xEADBEEFD (rotl x, 4) => 0xEADBEEFD (rotr x, 28) => 0xEADBEEFD - Fix comment and code for second version. It wasn't using the rot* propertly. // fold (or (shl x, (*ext (sub 32, y))), (srl x, (*ext r))) -> // (rotr x, y) // fold (or (shl x, (*ext (sub 32, y))), (srl x, (*ext r))) -> // (rotl x, (sub 32, y)) (x << 28) | (x >> 4) => 0xD0000000 | 0x0DEADBEE => 0xDDEADBEE (rotl x, 4) => 0xEADBEEFD (rotr x, 28) => (0xEADBEEFD) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55575 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dc71563794
commit
c5cbda12e9
@ -2064,9 +2064,9 @@ SDNode *DAGCombiner::MatchRotate(SDValue LHS, SDValue RHS) {
|
||||
if (RExtOp0.getOpcode() == ISD::SUB &&
|
||||
RExtOp0.getOperand(1) == LExtOp0) {
|
||||
// fold (or (shl x, (*ext y)), (srl x, (*ext (sub 32, y)))) ->
|
||||
// (rotr x, y)
|
||||
// (rotl x, y)
|
||||
// fold (or (shl x, (*ext y)), (srl x, (*ext (sub 32, y)))) ->
|
||||
// (rotl x, (sub 32, y))
|
||||
// (rotr x, (sub 32, y))
|
||||
if (ConstantSDNode *SUBC = cast<ConstantSDNode>(RExtOp0.getOperand(0))) {
|
||||
if (SUBC->getAPIntValue() == OpSizeInBits) {
|
||||
return DAG.getNode(HasROTL ? ISD::ROTL : ISD::ROTR, VT, LHSShiftArg,
|
||||
@ -2076,13 +2076,13 @@ SDNode *DAGCombiner::MatchRotate(SDValue LHS, SDValue RHS) {
|
||||
} else if (LExtOp0.getOpcode() == ISD::SUB &&
|
||||
RExtOp0 == LExtOp0.getOperand(1)) {
|
||||
// fold (or (shl x, (*ext (sub 32, y))), (srl x, (*ext r))) ->
|
||||
// (rotl x, y)
|
||||
// (rotr x, y)
|
||||
// fold (or (shl x, (*ext (sub 32, y))), (srl x, (*ext r))) ->
|
||||
// (rotr x, (sub 32, y))
|
||||
// (rotl x, (sub 32, y))
|
||||
if (ConstantSDNode *SUBC = cast<ConstantSDNode>(LExtOp0.getOperand(0))) {
|
||||
if (SUBC->getAPIntValue() == OpSizeInBits) {
|
||||
return DAG.getNode(ISD::ROTL, VT, LHSShiftArg,
|
||||
HasROTL ? RHSShiftAmt : LHSShiftAmt).getNode();
|
||||
return DAG.getNode(HasROTL ? ISD::ROTL : ISD::ROTR, VT, LHSShiftArg,
|
||||
HasROTL ? LHSShiftAmt : RHSShiftAmt).getNode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user