[PATCH] 128-bit ABI for x86_64-w64-mingw32 incorrectly generated
Alp Toker
alp at nuanti.com
Sat Apr 19 21:33:26 PDT 2014
On 20/04/2014 05:03, Jameson Nash wrote:
Observation about code reuse only:
> + if (Win64 && Entry.Node.getValueType().getSizeInBits() > 64) {
> + SDValue StackPtr = DAG.CreateStackTemporary(Entry.Node.getValueType(), 16);
> + int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
> + MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
> + // Emit a store to the stack slot.
> + InChain = DAG.getStore(InChain, dl, Entry.Node, StackPtr, PtrInfo,
> + false, false, 16);
> + Entry.Node = StackPtr;
> + Entry.Ty = PointerType::get(Entry.Ty,0);
> + Entry.isSExt = false;
> + Entry.isZExt = false;
> + isTailCall = false;
> + }
Looks similar to..
>
> + if (Win64 && Entry.Node.getValueType().getSizeInBits() > 64) {
> + SDValue StackPtr = DAG.CreateStackTemporary(Entry.Node.getValueType(), 16);
> + int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
> + MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
> + // Emit a store to the stack slot.
> + InChain = DAG.getStore(InChain, dl, Entry.Node, StackPtr, PtrInfo,
> + false, false, 16);
> + Entry.Node = StackPtr;
> + Entry.Ty = PointerType::get(Entry.Ty,0);
> + Entry.isSExt = false;
> + Entry.isZExt = false;
> + }
Which looks similar to..
>
> + if (Win64 && Entry.Node.getValueType().getSizeInBits() > 64) {
> + SDValue StackPtr = DAG.CreateStackTemporary(Entry.Node.getValueType(), 16);
> + int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
> + MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
> + // Emit a store to the stack slot.
> + InChain = DAG.getStore(InChain, dl, Entry.Node, StackPtr, PtrInfo,
> + false, false, 16);
> + Entry.Node = StackPtr;
> + Entry.Ty = PointerType::get(Entry.Ty,0);
> + Entry.isSExt = false;
> + Entry.isZExt = false;
> + }
Which looks similar to..
> + if (Win64 && Entry.Node.getValueType().getSizeInBits() > 64) {
> + SDValue StackPtr = DAG.CreateStackTemporary(Entry.Node.getValueType(), 16);
> + int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
> + MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
> + // Emit a store to the stack slot.
> + InChain = DAG.getStore(InChain, dl, Entry.Node, StackPtr, PtrInfo,
> + false, false, 16);
> + Entry.Node = StackPtr;
> + Entry.Ty = PointerType::get(Entry.Ty,0);
> + Entry.isSExt = false;
> + Entry.isZExt = false;
> + }
Which looks similar to..
>
> + if (Win64 && Entry.Node.getValueType().getSizeInBits() > 64) {
> + SDValue StackPtr = DAG.CreateStackTemporary(Entry.Node.getValueType(), 16);
> + int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
> + MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
> + // Emit a store to the stack slot.
> + InChain = DAG.getStore(InChain, dl, Entry.Node, StackPtr, PtrInfo,
> + false, false, 16);
> + Entry.Node = StackPtr;
> + Entry.Ty = PointerType::get(Entry.Ty,0);
> + Entry.isSExt = false;
> + Entry.isZExt = false;
> + }
Which looks similar to..
>
> + if (Win64 && Entry.Node.getValueType().getSizeInBits() > 64) {
> + SDValue StackPtr = DAG.CreateStackTemporary(Entry.Node.getValueType(), 16);
> + int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
> + MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
> + // Emit a store to the stack slot.
> + InChain = DAG.getStore(InChain, dl, Entry.Node, StackPtr, PtrInfo,
> + false, false, 16);
> + Entry.Node = StackPtr;
> + Entry.Ty = PointerType::get(Entry.Ty,0);
> + Entry.isSExt = false;
> + Entry.isZExt = false;
> + }
>
How about factoring these and the existing surrounding copy-and-paste
code into a function and calling into it instead of maintaining six copies?
Alp.
--
http://www.nuanti.com
the browser experts
More information about the llvm-commits
mailing list