[llvm-commits] [llvm-gcc-4.2] r49235 - in /llvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-target.h llvm-i386.cpp

Devang Patel dpatel at apple.com
Fri Apr 4 15:06:38 PDT 2008


Author: dpatel
Date: Fri Apr  4 17:06:38 2008
New Revision: 49235

URL: http://llvm.org/viewvc/llvm-project?rev=49235&view=rev
Log:
Override struct return hooks for i386 targets.
The patch does not intend to introduce any change in behavior, just code refactoring.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=49235&r1=49234&r2=49235&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Fri Apr  4 17:06:38 2008
@@ -100,6 +100,20 @@
 
 extern bool llvm_x86_should_pass_vector_in_integer_regs(tree);
 
+// LLVM_SCALAR_TYPE_FOR_STRUCT_RETURN - Return LLVM Type if TY can be 
+// returned as a scalar, otherwise return NULL.
+#define LLVM_SCALAR_TYPE_FOR_STRUCT_RETURN(X) \
+  llvm_x86_scalar_type_for_struct_return(X)
+
+extern const Type *llvm_x86_scalar_type_for_struct_return(const Type *Ty);
+
+// LLVM_AGGR_TYPE_FOR_STRUCT_RETURN - Return LLVM Type if TY can be 
+// returned as an aggregate, otherwise return NULL.
+#define LLVM_AGGR_TYPE_FOR_STRUCT_RETURN(X) \
+  llvm_x86_aggr_type_for_struct_return(X)
+
+extern const Type *llvm_x86_aggr_type_for_struct_return(const Type *Ty);
+
 /* Vectors which are not MMX nor SSE should be passed as integers. */
 #define LLVM_SHOULD_PASS_VECTOR_IN_INTEGER_REGS(X)      \
   llvm_x86_should_pass_vector_in_integer_regs((X))

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp?rev=49235&r1=49234&r2=49235&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp Fri Apr  4 17:06:38 2008
@@ -895,4 +895,31 @@
   return false;
 }
 
+// Return LLVM Type if TY can be  returned as a scalar, otherwise return NULL.
+const Type *llvm_x86_scalar_type_for_struct_return(const Type *Ty) {
+  unsigned Size = getTargetData().getABITypeSize(Ty);
+  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(256);
+
+  return NULL;
+}
+
+// Return LLVM Type if TY can be returned as an aggregate, otherwise return NULL.
+const Type *llvm_x86_aggr_type_for_struct_return(const Type *Ty) {
+  return NULL;
+}
+
+
 /* LLVM LOCAL end (ENTIRE FILE!)  */





More information about the llvm-commits mailing list