<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/136658>136658</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] Miscompile when casting tvv type to pointer
        </td>
    </tr>

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

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

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

<pre>
    commit: 5e834b9ec7fc85072ec12de780d3c793c03b7d00
godbolt: https://godbolt.org/z/cr6445nqh

This code, after compiled with `-O2 -march=rv64gv`, the `__riscv_vle32_v_f32m2` call in function `f` is gone.
```c++
#include <riscv_vector.h>
#include <stdio.h>

void print(uint16_t* data, int vl) {
  for (int i = 0; i < vl; ++i) {
 printf("%d\n", data[i]);
  }
}

void f(const float *p) {
 vfloat32m2_t v = __riscv_vle32_v_f32m2(p, 1024);
  print((uint16_t*)(&v), 1024);
}
```

produced ir:
```
@.str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1

define dso_local void @print(unsigned short*, int)(ptr noundef readonly captures(none) %data, i32 noundef signext %vl) local_unnamed_addr {
entry:
  %cmp3 = icmp sgt i32 %vl, 0
  br i1 %cmp3, label %for.body.preheader, label %for.cond.cleanup

for.body.preheader:
  %wide.trip.count = zext nneg i32 %vl to i64
  br label %for.body

for.cond.cleanup:
  ret void

for.body:
  %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
  %arrayidx = getelementptr inbounds nuw i16, ptr %data, i64 %indvars.iv
  %0 = load i16, ptr %arrayidx, align 2
  %conv = zext i16 %0 to i32
  %call = tail call signext i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef signext %conv)
 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}

declare void @llvm.lifetime.start.p0(i64 immarg, ptr captures(none)) #1

declare noundef signext i32 @printf(ptr noundef readonly captures(none), ...) local_unnamed_addr #2

declare void @llvm.lifetime.end.p0(i64 immarg, ptr captures(none)) #1

define dso_local void @f(float const*)(ptr noundef readonly captures(none) %p) local_unnamed_addr {
entry:
  %v = alloca <vscale x 4 x float>, align 4
  call void @llvm.lifetime.start.p0(i64 -1, ptr nonnull %v) #3
  br label %for.body.i

for.body.i:
  %indvars.iv.i = phi i64 [ 0, %entry ], [ %indvars.iv.next.i, %for.body.i ]
  %arrayidx.i = getelementptr inbounds nuw i16, ptr %v, i64 %indvars.iv.i
  %0 = load i16, ptr %arrayidx.i, align 2
  %conv.i = zext i16 %0 to i32
  %call.i = tail call signext i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef signext %conv.i)
  %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1
  %exitcond.not.i = icmp eq i64 %indvars.iv.next.i, 1024
 br i1 %exitcond.not.i, label %print(unsigned short*, int).exit, label %for.body.i

print(unsigned short*, int).exit:
  call void @llvm.lifetime.end.p0(i64 -1, ptr nonnull %v) #3
  ret void
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMV01v6ygX_jVkg2oRiJ10kUWavJXexWikmdFsIwLHMVcYfDF22_vrRwc7n3V7e2c1UuRYcD6e8_WAZduaowNYk_yJ5LuZ7GLlw_pHJd3xW-ea6m128PptrXxdm0jEhuawEovDI6hlqVY5W3JQc65huWJaqOWjUEwclpoxwjZHrw_eJq0qxqYlYkP4M-HP40bmw5Hw5x-EP6tQLBa5-14RtiFs81dlWqq8BsK3VJYRAlW-bowFTV9MrCgp2MPvnD7UMqiKiF3oi8WxJwVDhVgBCuz3wbSq3_cWBN_3-1LwmpOCUSWtpcbRsnMqGu9QuMQN09Kjd5AhiIINP0X4E_7YhnBhnLKdBkrEdrQNKvqQVUT8751EG7Xx5y226b3RtAnGRcJXnXFxXuwj4RuqZZSI27hIe0v4IyVLdEhp6QMlfIUbhhKxo4yIp_S6RUnxRAd05kopeSgJXxHOCc81ybcuvW4HR_mTIfmO8EciBidkuUOAw3OEifrKuzbS0noZKeGb5spHn1Yxn_tI-4RsOtt81aDjOeOLK4-nJNzmAQVwrejT253WiO9UlgFrE7zuFGhqAjbX3f6CZW0MCV0TTC8j0M45WYPeS62xpVwbpYuU5E8L-krNiuQ7qi55Yxt8sDF70pqjo_PBs4bSOKC69XvrlbQ0pY0s2LnALk2Wpm3lwxBeqvAQZRMDdb5zGkoaQGrv7BtVsoldgJbwlfMOUr55fu4Owc8qyfQrliUfGiZh2N9EN5QKXAxvQ24oiqu6ESkjRtUNbY8x2R3tbClLcodAzfwkjctWHsDiQulDhoSQNQEqkBrCu23lnc6UBem6ZsjVhNIF0IvRkMVgmkz5DmshdvQHxuYcHC_gaPTUFIsTvHeALp5u_I9-AsRUoFs8VyiM070MbWaGZm4qg96wMWiilMnQaZqjbZK6sZFhce7UkvDoTYYg34x-Tb6OEMFCDS5iUxh3wBq31HUv1MwLtILr142AwK7dncyyZM96qe80T_4uXczP_eBdf8m5mReDIcy2uAghYaJQlMYO9HnqwKFA2M9oPMuy1LXjGJR3ne68c521VEOAEgI4BfJggfDVfFTDgf2k2REtDhDbTCQ8IZRap9S59mUiUUgqp6Dg1cTUK87Hy0TA9_dq1-W8a9fbcbk2-flcTM3UNQlrUFYGOLOKtX2dWVNCNDVkbZQhZg3Do6FYUFPXEk_Sod7vWWQgEjG_NX2f3lTJDwr3CUVdlX2KhHjqop9GBE7_-3g-YGIMYji9EtGfT5hf4N7ml7h1GCRpUQGP6L5V0gJ9pXi4JCR4FzjP4EBmaZq-VOaH-SklpzlCn2MyxIfMmJk7FjaTvJeZD5kvxfk52WXmniXNFOGNTr5Mef0k36WIvsZ4A64JzhuR_Iz1RrH_Au9hKI8TdRvS_3PyG1IxSX-j-ucEOOrjnYxtpjlvEDl34BeuQhmqT98wzOmK90UjY1N_Mk83JPOFabq-NdzePmd6LfSjeJQzWM-Xi1wwwVdiVq05lKrkS63YYcHK8qD0shSHHA7AV0zM5zOz5oznbME5K3ApU1KtCp0fFkrOV7DkZMGglsZmCbsPx5lp2w7Wc1EU-WqW8tSmzzXOHbzQtIs31Hw3C2tUejh0xxaDN21sL2aiiTZ95_3x_z-3f-NN9zfTjl9V9KUCR5Vso3FHGvuexrcGcB4ab1yEMOuCXd99xJlYdYdM-ZrwZ_Qy_j00wX8DFQl_Tthawp9H8P2a_xMAAP__ILpl5A">