Changes in directory llvm/lib/Target/PowerPC:
PPCISelLowering.cpp updated: 1.173 -> 1.174 --- Log message: Simplify the dead argument handling code. --- Diffs of the changes: (+11 -28) PPCISelLowering.cpp | 39 +++++++++++---------------------------- 1 files changed, 11 insertions(+), 28 deletions(-) Index: llvm/lib/Target/PowerPC/PPCISelLowering.cpp diff -u llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.173 llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.174 --- llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.173 Tue May 16 13:51:52 2006 +++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp Tue May 16 13:54:32 2006 @@ -761,7 +761,6 @@ for (unsigned ArgNo = 0, e = Op.Val->getNumValues()-1; ArgNo != e; ++ArgNo) { SDOperand ArgVal; bool needsLoad = false; - bool ArgLive = !Op.Val->hasNUsesOfValue(0, ArgNo); MVT::ValueType ObjectVT = Op.getValue(ArgNo).getValueType(); unsigned ObjSize = MVT::getSizeInBits(ObjectVT)/8; @@ -773,13 +772,6 @@ // All int arguments reserve stack space. ArgOffset += 4; - if (!ArgLive) { - if (GPR_remaining > 0) { - --GPR_remaining; - ++GPR_idx; - } - break; - } if (GPR_remaining > 0) { unsigned VReg = RegMap->createVirtualRegister(&PPC::GPRCRegClass); MF.addLiveIn(GPR[GPR_idx], VReg); @@ -802,13 +794,6 @@ GPR_remaining -= delta; GPR_idx += delta; } - if (!ArgLive) { - if (FPR_remaining > 0) { - --FPR_remaining; - ++FPR_idx; - } - break; - } if (FPR_remaining > 0) { unsigned VReg; if (ObjectVT == MVT::f32) @@ -828,13 +813,6 @@ case MVT::v8i16: case MVT::v16i8: // Note that vector arguments in registers don't reserve stack space. - if (!ArgLive) { - if (VR_remaining > 0) { - --VR_remaining; - ++VR_idx; - } - break; - } if (VR_remaining > 0) { unsigned VReg = RegMap->createVirtualRegister(&PPC::VRRCRegClass); MF.addLiveIn(VR[VR_idx], VReg); @@ -853,14 +831,19 @@ // We need to load the argument to a virtual register if we determined above // that we ran out of physical registers of the appropriate type if (needsLoad) { - int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset); - SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32); - ArgVal = DAG.getLoad(ObjectVT, Root, FIN, - DAG.getSrcValue(NULL)); + // If the argument is actually used, emit a load from the right stack + // slot. + if (!Op.Val->hasNUsesOfValue(0, ArgNo)) { + int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset); + SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32); + ArgVal = DAG.getLoad(ObjectVT, Root, FIN, + DAG.getSrcValue(NULL)); + } else { + // Don't emit a dead load. + ArgVal = DAG.getNode(ISD::UNDEF, ObjectVT); + } } - if (ArgVal.Val == 0) - ArgVal = DAG.getNode(ISD::UNDEF, ObjectVT); ArgValues.push_back(ArgVal); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits