[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp
Nate Begeman
natebegeman at mac.com
Fri Apr 8 16:45:12 PDT 2005
Changes in directory llvm/lib/Target/PowerPC:
PPC64ISelPattern.cpp updated: 1.4 -> 1.5
---
Log message:
Fix 64b shifts
---
Diffs of the changes: (+13 -26)
PPC64ISelPattern.cpp | 39 +++++++++++++--------------------------
1 files changed, 13 insertions(+), 26 deletions(-)
Index: llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp
diff -u llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.4 llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.5
--- llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp:1.4 Fri Apr 8 16:26:05 2005
+++ llvm/lib/Target/PowerPC/PPC64ISelPattern.cpp Fri Apr 8 18:45:01 2005
@@ -985,7 +985,7 @@
BuildMI(BB, PPC::LOADHiAddr, 2, Tmp1).addReg(getGlobalBaseReg())
.addGlobalAddress(GV);
if (GV->hasWeakLinkage() || GV->isExternal()) {
- BuildMI(BB, PPC::LWZ, 2, Result).addGlobalAddress(GV).addReg(Tmp1);
+ BuildMI(BB, PPC::LD, 2, Result).addGlobalAddress(GV).addReg(Tmp1);
} else {
BuildMI(BB, PPC::LA, 2, Result).addReg(Tmp1).addGlobalAddress(GV);
}
@@ -1171,35 +1171,35 @@
case ISD::SHL:
Tmp1 = SelectExpr(N.getOperand(0));
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N.getOperand(1))) {
- Tmp2 = CN->getValue() & 0x1F;
- BuildMI(BB, PPC::RLWINM, 4, Result).addReg(Tmp1).addImm(Tmp2).addImm(0)
- .addImm(31-Tmp2);
+ Tmp2 = CN->getValue() & 0x3F;
+ BuildMI(BB, PPC::RLDICR, 3, Result).addReg(Tmp1).addImm(Tmp2)
+ .addImm(63-Tmp2);
} else {
Tmp2 = SelectExpr(N.getOperand(1));
- BuildMI(BB, PPC::SLW, 2, Result).addReg(Tmp1).addReg(Tmp2);
+ BuildMI(BB, PPC::SLD, 2, Result).addReg(Tmp1).addReg(Tmp2);
}
return Result;
case ISD::SRL:
Tmp1 = SelectExpr(N.getOperand(0));
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N.getOperand(1))) {
- Tmp2 = CN->getValue() & 0x1F;
- BuildMI(BB, PPC::RLWINM, 4, Result).addReg(Tmp1).addImm(32-Tmp2)
- .addImm(Tmp2).addImm(31);
+ Tmp2 = CN->getValue() & 0x3F;
+ BuildMI(BB, PPC::RLDICL, 3, Result).addReg(Tmp1).addImm(64-Tmp2)
+ .addImm(Tmp2);
} else {
Tmp2 = SelectExpr(N.getOperand(1));
- BuildMI(BB, PPC::SRW, 2, Result).addReg(Tmp1).addReg(Tmp2);
+ BuildMI(BB, PPC::SRD, 2, Result).addReg(Tmp1).addReg(Tmp2);
}
return Result;
case ISD::SRA:
Tmp1 = SelectExpr(N.getOperand(0));
if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N.getOperand(1))) {
- Tmp2 = CN->getValue() & 0x1F;
- BuildMI(BB, PPC::SRAWI, 2, Result).addReg(Tmp1).addImm(Tmp2);
+ Tmp2 = CN->getValue() & 0x3F;
+ BuildMI(BB, PPC::SRADI, 2, Result).addReg(Tmp1).addImm(Tmp2);
} else {
Tmp2 = SelectExpr(N.getOperand(1));
- BuildMI(BB, PPC::SRAW, 2, Result).addReg(Tmp1).addReg(Tmp2);
+ BuildMI(BB, PPC::SRAD, 2, Result).addReg(Tmp1).addReg(Tmp2);
}
return Result;
@@ -1325,7 +1325,7 @@
if (3 == getImmediateForOpcode(N.getOperand(1), opcode, Tmp3)) {
Tmp1 = MakeReg(MVT::i64);
Tmp2 = SelectExpr(N.getOperand(0));
- BuildMI(BB, PPC::SRAWI, 2, Tmp1).addReg(Tmp2).addImm(Tmp3);
+ BuildMI(BB, PPC::SRADI, 2, Tmp1).addReg(Tmp2).addImm(Tmp3);
BuildMI(BB, PPC::ADDZE, 1, Result).addReg(Tmp1);
return Result;
}
@@ -1335,19 +1335,6 @@
BuildMI(BB, Opc, 2, Result).addReg(Tmp1).addReg(Tmp2);
return Result;
- case ISD::UREM:
- case ISD::SREM: {
- Tmp1 = SelectExpr(N.getOperand(0));
- Tmp2 = SelectExpr(N.getOperand(1));
- Tmp3 = MakeReg(MVT::i64);
- unsigned Tmp4 = MakeReg(MVT::i64);
- Opc = (ISD::UREM == opcode) ? PPC::DIVDU : PPC::DIVD;
- BuildMI(BB, Opc, 2, Tmp3).addReg(Tmp1).addReg(Tmp2);
- BuildMI(BB, PPC::MULLD, 2, Tmp4).addReg(Tmp3).addReg(Tmp2);
- BuildMI(BB, PPC::SUBF, 2, Result).addReg(Tmp4).addReg(Tmp1);
- return Result;
- }
-
case ISD::FP_TO_UINT:
case ISD::FP_TO_SINT: {
Tmp1 = SelectExpr(N.getOperand(0));
More information about the llvm-commits
mailing list