[PATCH] D91067: [AArch64][SVE] Support implicit lax vector conversions for SVE types

Joe Ellis via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 11 04:06:40 PST 2020


joechrisellis marked an inline comment as done.
joechrisellis added inline comments.


================
Comment at: clang/lib/AST/ASTContext.cpp:8563-8566
+    if (const auto *BT = FirstType->getAs<BuiltinType>()) {
+      if (const auto *VT = SecondType->getAs<VectorType>()) {
+        if (VT->getVectorKind() == VectorType::SveFixedLengthDataVector) {
+          const LangOptions::LaxVectorConversionKind LVCKind =
----------------
fpetrogalli wrote:
> May I ask to avoid this triple if statement? Given that `BT` is not used after being defined, I think the following form would be easier to understand:
> 
> ```
> if (!FirstType->getAs<BuiltinType>())
>   return false;
> 
> const auto *VT = SecondType->getAs<VectorType>();
> 
> if (VT && VT->getVectorKind() == VectorType::SveFixedLengthDataVector) {
>    /// ...
>     return ...
> }
> 
> return false;
> ```
> 
> May I ask you to give meaningful names to the variables? BT and VT are quite cryptic to me.
> 
> Moreover.. are BT and VT really needed? You are asserting `FirstType->isSizelessBuiltinType() && SecondType->isVectorType()` ... the `getAs` calls should not fail, no? given that the lambda is local to this method, I wouldn't bother making it work for the generic case.
Simplified the code as per your suggestion, but the lambda here here serves a purpose: it makes sure that `areLaxCompatibleSveTypes` has the same behaviour irrespective of the ordering of the parameters. So we do actually need the if statements inside the lambda.


================
Comment at: clang/lib/Sema/SemaCast.cpp:2222
   if (srcIsVector || destIsVector) {
+    // Scalable vectors can be cast to and from liberally.
+    if (SrcType->isSizelessBuiltinType() || DestType->isSizelessBuiltinType()) {
----------------
fpetrogalli wrote:
> This code path seems untested.
Thinking about it, this could do with being broken out into its own patch. Will do this.


================
Comment at: clang/lib/Sema/SemaOverload.cpp:1650-1652
+      ICK = ICK_SVE_Vector_Conversion;
+      return true;
+    }
----------------
fpetrogalli wrote:
> tabs!
Not sure where these came from, since I ran `clang-format` over the patch. Think they should be gone now...


================
Comment at: clang/test/Sema/aarch64-sve-lax-vector-conversions.cpp:19
+
+  // This explicit cast is always allowed, irrespective of the value of -flax-vector-conversions.
+  ff32 = (fixed_float32_t)sf64;
----------------
fpetrogalli wrote:
> Why this one in particular? To me the comment would make more sense if saying 
> 
> ```
> // An explicit cast is always allowed, irrespective of the value of -flax-vector-conversions.
> ```
Will break this out into another patch as mentioned above.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91067/new/

https://reviews.llvm.org/D91067



More information about the cfe-commits mailing list