1 x ulonglong needs to be classified as INTEGER, just like 1 x longlong,

this fixes a miscompilation on the included testcase, rdar://8359248

llvm-svn: 112201
This commit is contained in:
Chris Lattner 2010-08-26 18:03:20 +00:00
parent 7b888fbd91
commit 46830f2fd6
2 changed files with 7 additions and 1 deletions

View File

@ -893,7 +893,8 @@ void X86_64ABIInfo::classify(QualType Ty, uint64_t OffsetBase,
return;
// gcc passes <1 x long long> as INTEGER.
if (VT->getElementType()->isSpecificBuiltinType(BuiltinType::LongLong))
if (VT->getElementType()->isSpecificBuiltinType(BuiltinType::LongLong) ||
VT->getElementType()->isSpecificBuiltinType(BuiltinType::ULongLong))
Current = Integer;
else
Current = SSE;

View File

@ -233,4 +233,9 @@ void f33(va_list X) {
va_arg(X, struct f33s);
}
typedef unsigned long long v1i64 __attribute__((__vector_size__(8)));
// rdar://8359248
// CHECK: define i64 @f34(i64 %arg.coerce)
v1i64 f34(v1i64 arg) { return arg; }