]> granicus.if.org Git - clang/commitdiff
unnest vector handling again.
authorChris Lattner <sabre@nondot.org>
Fri, 4 Jan 2008 23:32:24 +0000 (23:32 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 4 Jan 2008 23:32:24 +0000 (23:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45602 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaExpr.cpp

index 6661cfb8cbf7e8a535915b4ee91c2e77069fabb6..c617c4667fc11ed4040587e06747b1a1e0a28160 100644 (file)
@@ -1103,32 +1103,32 @@ Sema::CheckAssignmentConstraints(QualType lhsType, QualType rhsType) {
       return Compatible;
     return Incompatible;
   }
-  
-  if (lhsType->isArithmeticType() && rhsType->isArithmeticType()) {
-    if (lhsType->isVectorType() || rhsType->isVectorType()) {
-      // For OCUVector, allow vector splats; float -> <n x float>
-      if (const OCUVectorType *LV = lhsType->getAsOCUVectorType()) {
-        if (LV->getElementType().getTypePtr() == rhsType.getTypePtr())
+
+  if (lhsType->isVectorType() || rhsType->isVectorType()) {
+    // For OCUVector, allow vector splats; float -> <n x float>
+    if (const OCUVectorType *LV = lhsType->getAsOCUVectorType()) {
+      if (LV->getElementType().getTypePtr() == rhsType.getTypePtr())
+        return Compatible;
+    }
+    
+    // If LHS and RHS are both vectors of integer or both vectors of floating
+    // point types, and the total vector length is the same, allow the
+    // conversion.  This is a bitcast; no bits are changed but the result type
+    // is different.
+    if (getLangOptions().LaxVectorConversions &&
+        lhsType->isVectorType() && rhsType->isVectorType()) {
+      if ((lhsType->isIntegerType() && rhsType->isIntegerType()) ||
+          (lhsType->isRealFloatingType() && rhsType->isRealFloatingType())) {
+        if (Context.getTypeSize(lhsType, SourceLocation()) == 
+            Context.getTypeSize(rhsType, SourceLocation()))
           return Compatible;
       }
-      
-      if (getLangOptions().LaxVectorConversions &&
-          lhsType->isVectorType() && rhsType->isVectorType()) {
-        // If LHS and RHS are both integer or both floating point types, and
-        // the total vector length is the same, allow the conversion.  This is
-        // a bitcast; no bits are changed but the result type is different.
-        if ((lhsType->isIntegerType() && rhsType->isIntegerType()) ||
-            (lhsType->isRealFloatingType() && 
-             rhsType->isRealFloatingType())) {
-          if (Context.getTypeSize(lhsType, SourceLocation()) == 
-              Context.getTypeSize(rhsType, SourceLocation()))
-            return Compatible;
-        }
-      }
-      return Incompatible;
-    }      
+    }
+    return Incompatible;
+  }      
+  
+  if (lhsType->isArithmeticType() && rhsType->isArithmeticType())
     return Compatible;
-  }
   
   if (lhsType->isPointerType()) {
     if (rhsType->isIntegerType())