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())