Don't add a default STACK_ALIGN (use the generic ABI alignment)
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 21 Sep 2007 15:50:22 +0000 (15:50 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 21 Sep 2007 15:50:22 +0000 (15:50 +0000)
Implement calls to functions with byval arguments on X86

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42192 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/TargetData.cpp
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/byval2.ll

index 5ab4a60ddcc67646977aa4bb0981de43137ab261..30284263aecda46fed96914875dad0067fd22f69 100644 (file)
@@ -182,7 +182,6 @@ void TargetData::init(const std::string &TargetDescription) {
   setAlignment(VECTOR_ALIGN,    8,  8, 64);  // v2i32
   setAlignment(VECTOR_ALIGN,   16, 16, 128); // v16i8, v8i16, v4i32, ...
   setAlignment(AGGREGATE_ALIGN, 0,  8,  0);  // struct, union, class, ...
-  setAlignment(STACK_ALIGN,     0,  8,  0);  // objects on the stack
 
   while (!temp.empty()) {
     std::string token = getToken(temp, "-");
index dccf285a38d9a2d899cf84c11270e5669508849c..e79ee90eae8965b40181b5848355c499897381ed 100644 (file)
@@ -859,9 +859,9 @@ SDOperand X86TargetLowering::LowerCCCCallTo(SDOperand Op, SelectionDAG &DAG,
       assert(VA.isMemLoc());
       if (StackPtr.Val == 0)
         StackPtr = DAG.getRegister(getStackPtrReg(), getPointerTy());
-      SDOperand PtrOff = DAG.getConstant(VA.getLocMemOffset(), getPointerTy());
-      PtrOff = DAG.getNode(ISD::ADD, getPointerTy(), StackPtr, PtrOff);
-      MemOpChains.push_back(DAG.getStore(Chain, Arg, PtrOff, NULL, 0));
+
+      MemOpChains.push_back(LowerMemOpCallTo(Op, DAG, StackPtr, VA, Chain,
+                                             Arg));
     }
   }
 
@@ -1064,7 +1064,6 @@ X86TargetLowering::LowerMemOpCallTo(SDOperand Op, SelectionDAG &DAG,
     unsigned Align = 1 << ((Flags & ISD::ParamFlags::ByValAlign) >>
                            ISD::ParamFlags::ByValAlignOffs);
 
-    assert (Align >= 8);
     unsigned  Size = (Flags & ISD::ParamFlags::ByValSize) >>
         ISD::ParamFlags::ByValSizeOffs;
 
@@ -1133,9 +1132,9 @@ SDOperand X86TargetLowering::LowerFastCCCallTo(SDOperand Op, SelectionDAG &DAG,
       assert(VA.isMemLoc());
       if (StackPtr.Val == 0)
         StackPtr = DAG.getRegister(getStackPtrReg(), getPointerTy());
-      SDOperand PtrOff = DAG.getConstant(VA.getLocMemOffset(), getPointerTy());
-      PtrOff = DAG.getNode(ISD::ADD, getPointerTy(), StackPtr, PtrOff);
-      MemOpChains.push_back(DAG.getStore(Chain, Arg, PtrOff, NULL, 0));
+
+      MemOpChains.push_back(LowerMemOpCallTo(Op, DAG, StackPtr, VA, Chain,
+                                             Arg));
     }
   }
 
index 04d34839c0e76695b8517d5111f58a17001ef270..d017aa5fa33bc1d0079d7e6f089dccbcaf857478 100644 (file)
@@ -1,4 +1,5 @@
 ; RUN: llvm-as < %s | llc -march=x86-64 | grep rep.movsl | count 2
+; RUN: llvm-as < %s | llc -march=x86    | grep rep.movsl | count 2
 
 %struct.s = type { i64, i64, i64 }