[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri May 12 09:29:50 PDT 2006
Changes in directory llvm/lib/Target/PowerPC:
PPCISelDAGToDAG.cpp updated: 1.183 -> 1.184
---
Log message:
Fix PowerPC/2006-05-12-rlwimi-crash.ll
Nate, please verify that if InsertMask is 0, rlwimi shouldn't be used.
This fixes the crash and causes no PPC testsuite regressions.
---
Diffs of the changes: (+4 -3)
PPCISelDAGToDAG.cpp | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
Index: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
diff -u llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1.183 llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1.184
--- llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1.183 Mon May 8 12:38:32 2006
+++ llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp Fri May 12 11:29:37 2006
@@ -365,7 +365,7 @@
// if the mask doesn't intersect any Indeterminant bits
if (Mask && !(Mask & Indeterminant)) {
- SH = Shift;
+ SH = Shift & 31;
// make sure the mask is still a mask (wrap arounds may not be)
return isRunOfOnes(Mask, MB, ME);
}
@@ -431,7 +431,7 @@
}
unsigned MB, ME;
- if (isRunOfOnes(InsertMask, MB, ME)) {
+ if (InsertMask && isRunOfOnes(InsertMask, MB, ME)) {
SDOperand Tmp1, Tmp2, Tmp3;
bool DisjointMask = (TargetMask ^ InsertMask) == 0xFFFFFFFF;
@@ -454,6 +454,7 @@
Tmp3 = (Op0Opc == ISD::AND && DisjointMask) ? Op0.getOperand(0) : Op0;
Select(Tmp1, Tmp3);
Select(Tmp2, Op1);
+ SH &= 31;
return CurDAG->getTargetNode(PPC::RLWIMI, MVT::i32, Tmp1, Tmp2,
getI32Imm(SH), getI32Imm(MB), getI32Imm(ME));
}
@@ -1149,7 +1150,7 @@
SDOperand Val;
Select(Val, N->getOperand(0).getOperand(0));
Result = CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32,
- Val, getI32Imm(SH & 0x1F), getI32Imm(MB),
+ Val, getI32Imm(SH), getI32Imm(MB),
getI32Imm(ME));
return;
}
More information about the llvm-commits
mailing list