[llvm-commits] [llvm] r53035 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeDAG.cpp lib/CodeGen/SelectionDAG/SelectionDAG.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp lib/Target/ARM/ARMISelLowering.cpp lib/Target/CellSPU/SPUISelLowering.cpp lib/Target/PowerPC/PPCISelLowering.cpp lib/Target/Sparc/SparcISelLowering.cpp lib/Target/X86/X86ISelLowering.cpp

Evan Cheng evan.cheng at apple.com
Fri Jul 4 00:54:10 PDT 2008


Thanks Mon Ping. Please commit.

Evan

On Jul 3, 2008, at 11:43 PM, Mon P Wang wrote:

> Hi,
>
> The problem with the patch I commit was thought the stack alignment of
> the slot was correct, the stores we generated for the StackConvert
> assumed the larger alignment.  It makes more sense to use the
> alignment of source when we store and the alignment of the destination
> type when we load. This avoids the problem for that and I get the same
> failure with and without the patch in tests. Sorry for the mistake.
>
>
>   -- Mon Ping
>
>
> Index: include/llvm/CodeGen/SelectionDAG.h
> ===================================================================
> --- include/llvm/CodeGen/SelectionDAG.h	(revision 53112)
> +++ include/llvm/CodeGen/SelectionDAG.h	(working copy)
> @@ -589,9 +589,10 @@
>    void dump() const;
>
>    /// CreateStackTemporary - Create a stack temporary, suitable for
> holding the
> -  /// specified value type.
> -  SDOperand CreateStackTemporary(MVT VT);
> -
> +  /// specified value type.  If minAlign is specified, the slot size
> will have
> +  /// at least that alignment.
> +  SDOperand CreateStackTemporary(MVT VT, unsigned minAlign = 1);
> +
>    /// FoldSetCC - Constant fold a setcc to true or false.
>    SDOperand FoldSetCC(MVT VT, SDOperand N1,
>                        SDOperand N2, ISD::CondCode Cond);
> Index: lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> ===================================================================
> --- lib/CodeGen/SelectionDAG/SelectionDAG.cpp	(revision 53112)
> +++ lib/CodeGen/SelectionDAG/SelectionDAG.cpp	(working copy)
> @@ -1080,16 +1080,17 @@
>
>  /// CreateStackTemporary - Create a stack temporary, suitable for
> holding the
>  /// specified value type.
> -SDOperand SelectionDAG::CreateStackTemporary(MVT VT) {
> +SDOperand SelectionDAG::CreateStackTemporary(MVT VT, unsigned
> minAlign) {
>    MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
>    unsigned ByteSize = VT.getSizeInBits()/8;
>    const Type *Ty = VT.getTypeForMVT();
> -  unsigned StackAlign = (unsigned)TLI.getTargetData()-
>> getPrefTypeAlignment(Ty);
> +  unsigned StackAlign =
> +  std::max((unsigned)TLI.getTargetData()->getPrefTypeAlignment(Ty),
> minAlign);
> +
>    int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign);
>    return getFrameIndex(FrameIdx, TLI.getPointerTy());
>  }
>
> -
>  SDOperand SelectionDAG::FoldSetCC(MVT VT, SDOperand N1,
>                                    SDOperand N2, ISD::CondCode Cond) {
>    // These setcc operations always fold.
> Index: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> ===================================================================
> --- lib/CodeGen/SelectionDAG/LegalizeDAG.cpp	(revision 53112)
> +++ lib/CodeGen/SelectionDAG/LegalizeDAG.cpp	(working copy)
> @@ -4871,35 +4871,41 @@
>                                                   MVT SlotVT,
>                                                   MVT DestVT) {
>    // Create the stack frame object.
> -  SDOperand FIPtr = DAG.CreateStackTemporary(SlotVT);
> -
> +  unsigned SrcAlign = TLI.getTargetData()->getPrefTypeAlignment(
> +
> SrcOp.getValueType().getTypeForMVT());
> +  SDOperand FIPtr = DAG.CreateStackTemporary(SlotVT, SrcAlign);
> +
>    FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(FIPtr);
>    int SPFI = StackPtrFI->getIndex();
> -
> +
>    unsigned SrcSize = SrcOp.getValueType().getSizeInBits();
>    unsigned SlotSize = SlotVT.getSizeInBits();
>    unsigned DestSize = DestVT.getSizeInBits();
> +  unsigned DestAlign = TLI.getTargetData()->getPrefTypeAlignment(
> +
> DestVT.getTypeForMVT());
>
>    // Emit a store to the stack slot.  Use a truncstore if the input
> value is
>    // later than DestVT.
>    SDOperand Store;
> +
>    if (SrcSize > SlotSize)
>      Store = DAG.getTruncStore(DAG.getEntryNode(), SrcOp, FIPtr,
> -                              PseudoSourceValue::getFixedStack(),
> -                              SPFI, SlotVT);
> +                              PseudoSourceValue::getFixedStack(),
> SPFI, SlotVT,
> +                              false, SrcAlign);
>    else {
>      assert(SrcSize == SlotSize && "Invalid store");
>      Store = DAG.getStore(DAG.getEntryNode(), SrcOp, FIPtr,
> -                         PseudoSourceValue::getFixedStack(),
> -                         SPFI);
> +                         PseudoSourceValue::getFixedStack(), SPFI,
> +                         false, SrcAlign);
>    }
>
>    // Result is a load from the stack slot.
>    if (SlotSize == DestSize)
> -    return DAG.getLoad(DestVT, Store, FIPtr, NULL, 0);
> +    return DAG.getLoad(DestVT, Store, FIPtr, NULL, 0, false,
> DestAlign);
>
>    assert(SlotSize < DestSize && "Unknown extension!");
> -  return DAG.getExtLoad(ISD::EXTLOAD, DestVT, Store, FIPtr, NULL, 0,
> SlotVT);
> +  return DAG.getExtLoad(ISD::EXTLOAD, DestVT, Store, FIPtr, NULL, 0,
> SlotVT,
> +                        false, DestAlign);
>  }
>
>
> On Jul 3, 2008, at 1:09 PM, Mon P Wang wrote:
>
>>
>> Thanks, I'll take a look and see what is wrong with it.
>>
>> -- Mon Ping
>>
>> On Jul 3, 2008, at 11:20 AM, Evan Cheng wrote:
>>
>>> This is backed out for now. Mon Ping, please take a look.
>>>
>>> Evan
>>>
>>> On Jul 3, 2008, at 9:45 AM, Chris Lattner wrote:
>>>
>>>>
>>>> On Jul 3, 2008, at 2:06 AM, Duncan Sands wrote:
>>>>
>>>>> Hi Evan,
>>>>>
>>>>>> test/CodeGen/PowerPC/vec_misaligned.ll  is not crashing in the
>>>>>> Legalizer. Can you check if your patch is the cause?
>>>>>
>>>>> it was caused by r53031:
>>>>>
>>>>> r53031 | wangmp | 2008-07-02 19:07:12 +0200 (Wed, 02 Jul 2008) | 4
>>>>> lines
>>>>>
>>>>> Fixed problem in EmitStackConvert where the source and target type
>>>>> have different alignment by creating a stack slot with the max
>>>>> alignment of source and target type.
>>>>
>>>> If this patch is still causing breakage, please revert it.  Mon  
>>>> Ping
>>>> can track down the problem and reapply when it is fixed.
>>>>
>>>> -Chris
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list