]> granicus.if.org Git - clang/commitdiff
x86_64 ABI: Need to use canonical types when comparing against
authorDaniel Dunbar <daniel@zuster.org>
Sat, 14 Feb 2009 02:45:45 +0000 (02:45 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 14 Feb 2009 02:45:45 +0000 (02:45 +0000)
ASTContext types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64533 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCall.cpp

index debf13190378e7af2f4083466f2db8a2efa0fdea..708c7171daf1d502b4af32fdaeca981d71739e79 100644 (file)
@@ -542,7 +542,7 @@ void X86_64ABIInfo::classify(QualType Ty,
       Hi = SSEUp;
     }
   } else if (const ComplexType *CT = Ty->getAsComplexType()) {
-    QualType ET = CT->getElementType();
+    QualType ET = Context.getCanonicalType(CT->getElementType());
     
     uint64_t Size = Context.getTypeSize(Ty);
     if (ET->isIntegerType()) {
@@ -670,8 +670,12 @@ ABIArgInfo X86_64ABIInfo::getCoerceResult(QualType Ty,
     if (Ty->isIntegerType() || Ty->isPointerType())
       return ABIArgInfo::getDirect();
   } else if (CoerceTo == llvm::Type::DoubleTy) {
+    // FIXME: It would probably be better to make CGFunctionInfo only
+    // map using canonical types than to canonize here.
+    QualType CTy = Context.getCanonicalType(Ty);
+  
     // Float and double end up in a single SSE reg.
-    if (Ty == Context.FloatTy || Ty == Context.DoubleTy)
+    if (CTy == Context.FloatTy || CTy == Context.DoubleTy)
       return ABIArgInfo::getDirect();
   }