<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJytVk2TozgM_TXkooICG-hw4NAzma6a827ttcsYk3jGfIxtSNK_fmUg6RDS01s1m6IgRnp6kizJFG15zv_WZ9nswbYgTlYzboGB4UyxQgmomfkJWpheWQOygUHoM3Rtq4G3pYCjtAdQaqg98lIzlPs-sK4TTBtnkFWVcPaUAntA7YNUwiPPaMhq2RjJjUe-QtFb-NEbO8mVhU63gyxFCYVQ7dGjz16488L5vheN0MyidCT30lApDj5jmh_S2DeD8AckbbVfSGv8WjYe3ZEkvVgP0Bm_va4M-DXvetRpRIvRGYRHaPSW0i2na1xapvfCAobQYYYQCR4hTNfIrmTTn3B1iy5FJRsBpWlfVYt5RcTXLZxARh79Bl4cYkSvnRal5BiWR7aSErSYDEx5JAPv6ctkB9zLaOSzTCrgLq1oa3CbJdBgfGvUbUowJyXApASXgJvTEMsoQJKZKnR7sOC84SNrvu2KRpw6oWUtGstUMCU_mGspGLZINnEi3wfuYlyjE2nsvLnya8zykhAdmlP7tFvmmCumf5fk_8PRi4-yrrEEro4-JP_DXZn35MpxV4LTfepL17yB-U29LuuLYmI_-mEX47WuyXk_AAJeyVeDDWCxR_nMNoNIUhRBeO1Wp35t6DAYO_34psdH-K5StwO8RZO4w81_eXP_PEKjj92ju_AULU0MYRClhYMO0fhvIT1uZ4nxki-Rl-zu-MnE_zYpxCuFY3aDJ2s8XeCTNT4KbwzQtYF4YSBdK0QLhaeVAsZfXGJzGd6-iysnd5sxJsGQh0ByAWYPxfQijsKH8vhzXvoQmHwOjB8C08-B6xIpLrm7A_6X31x8P6VSrodwquOruAzHN3ga3S9-3WQKB9ldZ27KnJYZzdiG9fbQ6lwb3lpbs0aJ86bXKj9Y2xnXTSPvHs-6vgh4607a-cB1Dx_78AcOMlxKY3qBVfKS0HRLNoc8S4unLKrSKi5ZFnNORMV5xVhMs3hLsmqDR7xQJsek4JHViCOMJtzxlew2f-6BzElI8AozvEVJFkRlxioRRzThIqG0wDkj8KtBBeNYbPV-o_PRZNHvjZuW0ljzLmTGyH0jxOgwemilVSJ_fh6nqduTv_755h7fG1FVkksc84AYURfqjKNINNAbNywZLEc_tM39J89mDCUf4_gXFI6XKQ>53682</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            AArch64: SVE: Inefficient assembly when using a vector.extract on a scalable mask
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          rscottmanley
      </td>
    </tr>
</table>

<pre>
    Trying to extract a scalable mask results in very poor code with llvm/main -- appears to affect all the while* intrinsics, but just whilelt provided below:

generated with `llc -aarch64-sve-vector-bits-min=256 whilelt.ll -o whilelt.s -mcpu=neoverse-v1`

```
target triple = "arm64-linux"

define dso_local <8 x i1> @gen_predicate(i32 %val) {
  %1 = tail call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32 0, i32 %val)
  %2 = tail call <8 x i1> @llvm.experimental.vector.extract.v8i1.nxv4i1(<vscale x 4 x i1> %1, i64 0)
  ret <8 x i1> %2
}

declare dso_local <8 x i1> @llvm.experimental.vector.extract.v8i1.nxv4i1(<vscale x 4 x i1>, i64 immarg)
declare dso_local <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32, i32)
```

resulting .s

```
gen_predicate:                          // @gen_predicate
    .cfi_startproc
// %bb.0:
    whilelt p0.s, wzr, w0
    mov z1.s, p0/z, #1                  // =0x1
    mov v0.16b, v1.16b
    mov w8, v1.s[1]
    mov z2.s, z1.s[4]
    mov w9, v1.s[2]
    mov z3.s, z1.s[5]
    mov w10, v1.s[3]
    mov z4.s, z1.s[6]
    mov z1.s, z1.s[7]
    mov v0.b[1], w8
    fmov    w8, s2
    mov v0.b[2], w9
    mov v0.b[3], w10
    mov v0.b[4], w8
    fmov    w8, s3
    mov v0.b[5], w8
    fmov    w8, s4
    mov v0.b[6], w8
    fmov    w8, s1
    mov v0.b[7], w8
                                        // kill: def $d0 killed $d0 killed $q0
    ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVk2PozgQ_TXkUgJhG-hw4NAzmZbmvKu9tgyYxDPmY2xDkv71WwaSDiE9PdJuhABT9d4rl6vs5G15zv7WZ9nswbYgTlbzwgIHU3DFcyWg5uYnaGF6ZQ3IBgahz9C1rYaiLQUcpT2AUkPt0Zeao933gXed4No4Ql5VwvEpBfaA3gephEefkchq2RhZGI9-hby38KM3drIrC51uB1mKEnKh2qPHnr1w54XzfS8aoblF6yjuJaFSBfic6-KQRL4ZhD-gaKv9XFrj17Lx2I7GyYU9wGD89joy4NdF16NPI1qcnUE4QdJbSTecrnFoud4LCziFDjOESPAo5bpGdSWb_oSjW3QpKtkIKE37qlrMKyK-buEEknjsG3hRiDN67bQoZYHT8uhWMoqM8cCVR1Pwnr5MPOA-klHPcqmgcGlFrsEtlkDC6JbULUowJyXApASXCTenIZIkQJFZKnRrsNC80aNrve1KRpw6oWUtGstVMCU_mGspGLYoNmmi3gfh4rzGIJLIRXPV15jlpSAGNKf2abfMcaG4_l2S_49ALzHKusYSuAb6UPw_rsq8JleNuxKc7lNfuuYNzG_qdVlfDBP70Q-7GK91Tc7rARAUlXw12AAWe7SY1WYQjfM8CK_d6tyvDR0GY6cf3_T4CN9d6naANzKZO1z8lzf35lFGPg6P7cITWVIMYUCS3EEHMr4trMftbDFe_IV48e5On076b5NDtHI4pjd4usazBT5e40l4Q8DWBNGCIFk7kIXD08oB559f5uYyvH03V87uFmNMgqEPgfQCTB-a2cVMwof26HNd9hAYfw6MHgKTz4HrEskvubsD_slvLr6fUinXQ7ir46eoDMcveBrdD37dZAo3srvO3JQZK1OW8o2VVons-XncExzzX_98c4_vjagqWUjcrIAbI-pcnbGhRAO9cS3PYbmBQdvcH9ybXqvsYG1nXFeO8e_xzOzzoGjdiT0f3O7hYz__QD4cSmN6gdX2ErNkSzeHjLC04E9kSzHepCQ0rpI8JTwKy7TKw5JtUFEok2Fy8ehrxBFGCncMxruNzGhI8QpTvJE4DUiZ8kpEhMWFiBnLcbcR-N9BBePm2Or9RmdjSHm_N27PlMaadyPmQu4bIUY55Oe9PbQ606Zora15o8R5M-pnY_z_AqwhgK0">