[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