[PATCH] D125601: [DAGCombiner][AArch64] Reorder the bitcast of scalable vector

David Sherwood via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 16 06:01:34 PDT 2022


david-arm added inline comments.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:14937
+  if (InVT.isScalableVector() && InVT.isFloatingPoint() &&
+      DCI.isBeforeLegalize() && !OutVT.isScalableVector()) {
+    // Bitcast the input
----------------
>From what I can see all the input and output types you're hoping to deal with are legal, right? For example, <vscale x 2 x float> is legal, but <vscale x 2 x i32> is illegal. So it looks like you're trying to take advantage of legalisation behaviour when doing something like this:

  %out = <2 x i32> extract_subvector <vscale x 2 x i32> %in, i32 0

which will probably turn into

  %out1 = <2 x i64> extract_subvector <vscale x 2 x i64> %in, i32 0
  %out2 = truncate <2 x i64> %out1 to <2 x i32>

The first operation will then become a nop.

One problem with this approach is that it looks like you're assuming the index is always 0. What happens when extracting a subvector from index 2, etc? I'm worried the generated code might then look even worse. It just feels like we might want to restrict the allowed cases a bit more here to just those examples where we know there will be an improvement.



================
Comment at: llvm/test/CodeGen/AArch64/extract-insert-element-sve.ll:1
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=aarch64 -mattr=+sve -asm-verbose=1 < %s | FileCheck %s
----------------
We actually already have similar tests in sve-fixed-length-reshuffle.ll - could you move this test into that file please?


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

https://reviews.llvm.org/D125601



More information about the llvm-commits mailing list