Get this to work for 64-bit systems.
authorChris Lattner <sabre@nondot.org>
Sat, 22 Jan 2005 23:04:37 +0000 (23:04 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 22 Jan 2005 23:04:37 +0000 (23:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19763 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index 3439249446e877a147b64256757be8979307f1fb..20d731332b8edfe40a9e9c8890dea4923ed17d38 100644 (file)
@@ -566,11 +566,13 @@ void SelectionDAGLowering::visitAlloca(AllocaInst &I) {
   unsigned Align = TLI.getTargetData().getTypeAlignment(Ty);
 
   SDOperand AllocSize = getValue(I.getArraySize());
+  MVT::ValueType IntPtr = TLI.getPointerTy();
+  if (IntPtr < AllocSize.getValueType())
+    AllocSize = DAG.getNode(ISD::TRUNCATE, IntPtr, AllocSize);
+  else if (IntPtr > AllocSize.getValueType())
+    AllocSize = DAG.getNode(ISD::ZERO_EXTEND, IntPtr, AllocSize);
 
-  assert(AllocSize.getValueType() == TLI.getPointerTy() &&
-         "FIXME: should extend or truncate to pointer size!");
-
-  AllocSize = DAG.getNode(ISD::MUL, TLI.getPointerTy(), AllocSize,
+  AllocSize = DAG.getNode(ISD::MUL, IntPtr, AllocSize,
                           getIntPtrConstant(TySize));
 
   // Handle alignment.  If the requested alignment is less than or equal to the
@@ -679,8 +681,11 @@ void SelectionDAGLowering::visitMalloc(MallocInst &I) {
   SDOperand Src = getValue(I.getOperand(0));
 
   MVT::ValueType IntPtr = TLI.getPointerTy();
-  // FIXME: Extend or truncate to the intptr size.
-  assert(Src.getValueType() == IntPtr && "Need to adjust the amount!");
+
+  if (IntPtr < Src.getValueType())
+    Src = DAG.getNode(ISD::TRUNCATE, IntPtr, Src);
+  else if (IntPtr > Src.getValueType())
+    Src = DAG.getNode(ISD::ZERO_EXTEND, IntPtr, Src);
 
   // Scale the source by the type size.
   uint64_t ElementSize = TD.getTypeSize(I.getType()->getElementType());