[PATCH] D106860: [clang][AArch64][SVE] Avoid going through memory for fixed/scalable predicate casts

Cullen Rhodes via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 28 08:28:53 PDT 2021


c-rhodes added inline comments.


================
Comment at: clang/lib/CodeGen/CGExprScalar.cpp:2110-2129
     // Perform VLAT <-> VLST bitcast through memory.
     // TODO: since the llvm.experimental.vector.{insert,extract} intrinsics
     //       require the element types of the vectors to be the same, we
     //       need to keep this around for casting between predicates, or more
     //       generally for bitcasts between VLAT <-> VLST where the element
     //       types of the vectors are not the same, until we figure out a better
     //       way of doing these casts.
----------------
bsmith wrote:
> c-rhodes wrote:
> > With the predicate casting now using the intrinsics I don't think this is needed any longer. Perhaps we should add an unreachable above if the element type doesn't match?
> Don't we still need this for casting between vectors with different element types, or are these guaranteed to not hit this code path?
> Don't we still need this for casting between vectors with different element types, or are these guaranteed to not hit this code path?

Apologies I was wrong, you're right we'll still need it for casting between vectors with different element types to support lax vector conversions, although it's no longer tested. Might be worth adding a codegen test for ~:

```svint64_t lax_cast(fixed_int32_t t) {
    return t;
}```

and the comment could also be updated


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106860



More information about the cfe-commits mailing list