[llvm-commits] [llvm-gcc-4.2] r49228 - /llvm-gcc-4.2/trunk/gcc/llvm-abi.h

Devang Patel dpatel at apple.com
Fri Apr 4 12:28:38 PDT 2008


Author: dpatel
Date: Fri Apr  4 14:28:38 2008
New Revision: 49228

URL: http://llvm.org/viewvc/llvm-project?rev=49228&view=rev
Log:
Refactor code, no functionality change.

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-abi.h

Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=49228&r1=49227&r2=49228&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Fri Apr  4 14:28:38 2008
@@ -176,6 +176,30 @@
   return int_size_in_bytes(type) == 0;
 }
 
+// getLLVMScalarTypeForStructReturn - Return LLVM Type if TYPE can be 
+// returned as a scalar, otherwise return NULL. This is the default
+// target independent implementation.
+static const Type* getLLVMScalarTypeForStructReturn(tree type) {
+
+  unsigned Size = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(type));
+  if (Size == 0)
+    return Type::VoidTy;
+  else if (Size == 1)
+    return Type::Int8Ty;
+  else if (Size == 2)
+    return Type::Int16Ty;
+  else if (Size <= 4)
+    return Type::Int32Ty;
+  else if (Size <= 8)
+    return Type::Int64Ty;
+  else if (Size <= 16)
+    return IntegerType::get(128);
+  else if (Size <= 32)
+    return IntegerType::get(255);
+
+  return NULL;
+}
+
 // LLVM_SHOULD_PASS_VECTOR_IN_INTEGER_REGS - Return true if this vector
 // type should be passed as integer registers.  Generally vectors which are
 // not part of the target architecture should do this.
@@ -290,23 +314,11 @@
       } else {
         // Otherwise return as an integer value large enough to hold the entire
         // aggregate.
-        unsigned Size = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(type));
-        if (Size == 0)
-          C.HandleAggregateResultAsScalar(Type::VoidTy);
-        else if (Size == 1)
-          C.HandleAggregateResultAsScalar(Type::Int8Ty);
-        else if (Size == 2)
-          C.HandleAggregateResultAsScalar(Type::Int16Ty);
-        else if (Size <= 4)
-          C.HandleAggregateResultAsScalar(Type::Int32Ty);
-        else if (Size <= 8)
-          C.HandleAggregateResultAsScalar(Type::Int64Ty);
-        else if (Size <= 16)
-          C.HandleAggregateResultAsScalar(IntegerType::get(128));
-        else if (Size <= 32)
-          C.HandleAggregateResultAsScalar(IntegerType::get(256));
+        const Type* ScalarTy = getLLVMScalarTypeForStructReturn(type);
+        if (ScalarTy)
+          C.HandleAggregateResultAsScalar(ScalarTy);
         else {
-          assert(0 && "Cannot return this aggregate as a scalar!");
+          assert(0 && "Unable to determine how to return this aggregate!");
           abort();
         }
       }





More information about the llvm-commits mailing list