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; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits