sdardis added inline comments.

================
Comment at: lib/Sema/SemaExpr.cpp:8051
+  if (!LHSVecType) {
+    assert(RHSVecType && "RHSVecType is not a vector!");
     if (!tryVectorConvertAndSplat(*this, (IsCompAssign ? nullptr : &LHS),
----------------
bruno wrote:
> `tryVectorConvertAndSplat` does more than plain scalar splat; it supports a 
> more general type of CK_IntegralCast, see the comment on one of your changes 
> to the tests below.
> 
> I suggest that instead of reusing this function, you should create another 
> one that only handles the cases we actually want to support for non-ext 
> vectors (i.e. for GCC compat). 
(ignore this, phabricator's web interface is acting up)


================
Comment at: lib/Sema/SemaExpr.cpp:8267
+  }
+
   // Otherwise, use the generic diagnostic.
----------------
bruno wrote:
> sdardis wrote:
> > bruno wrote:
> > > This change seems orthogonal to this patch. Can you make it a separated 
> > > patch with the changes from test/Sema/vector-cast.c?
> > This change is a necessary part of this patch and it can't be split out in 
> > sensible fashion.
> > 
> > For example, line 329 of test/Sema/zvector.c adds a scalar signed character 
> > to a vector of signed characters. With just this change we would report 
> > "cannot convert between scalar type 'signed char' and vector type '__vector 
> > signed char' (vector of 16 'signed char' values) as implicit conversion 
> > would cause truncation".
> > 
> > This is heavily misleading for C and C++ code as we don't perform implicit 
> > conversions and signed char could be implicitly converted to a vector of 
> > signed char without the loss of precision.
> > 
> > To make this diagnostic precise without performing implicit conversions 
> > requires determining cases where implicit conversion would cause truncation 
> > and reporting that failure reason, or defaulting to the generic diagnostic.
> > 
> > Keeping this change as part of this patch is cleaner and simpler as it 
> > covers both implicit conversions and more precise diagnostics.
> Can you double check whether we should support these GCC semantics for 
> getLangOpts().ZVector? If not, then this should be introduced in a separate 
> patch/commit.
See my comment above.


================
Comment at: lib/Sema/SemaExpr.cpp:8171
+        return LHSType;
+    }
   }
----------------
bruno wrote:
> It's not clear to me whether clang should support the GCC semantics when in 
> `getLangOpts().AltiVec || getLangOpts().ZVector`, do you?
> 
> You can remove the curly braces for the `if` and `else` here.
We should, GCC performs scalar to vector conversions regardless of what cpu 
features are available. If the target machine doesn't have vector support, GCC 
silently scalarizes the operation.

https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Vector-Extensions.html#Vector-Extensions


https://reviews.llvm.org/D25866



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to