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

    <tr>
        <th>Summary</th>
        <td>
            [CodeGen] Intrinsic `@llvm.powi.v2f64.i32` causes errors in LoongArch64 and RISCV64 when vector features are enabled.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    pow.ll
```
define void @test_powi_v2f64(ptr %0, i32 %1) {
  %load = load <2 x double>, ptr %0, align 8
  %4 = tail call contract <2 x double> @llvm.powi.v2f64.i32(<2 x double> %load, i32 %1)
  store <2 x double> %4, ptr %0, align 8
  ret void
}
```

./bin/llc --mtriple=riscv64 -mattr=+v pow.ll -o -
```
 .text
        .attribute      4, 16
        .attribute      5, "rv64i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
 .file   "pow.ll"
error: POWI exponent does not match sizeof(int)
error: POWI exponent does not match sizeof(int)
        .globl test_powi_v2f64                 # -- Begin function test_powi_v2f64
 .p2align        2
        .type test_powi_v2f64,@function
test_powi_v2f64:                        # @test_powi_v2f64
        .cfi_startproc
# %bb.0:
        vsetivli zero, 2, e64, m1, ta, ma
        vfslide1down.vf v8, v8, fa5
 vse64.v v8, (a0)
        ret
.Lfunc_end0:
        .size   test_powi_v2f64, .Lfunc_end0-test_powi_v2f64
        .cfi_endproc
 # -- End function
        .section ".note.GNU-stack","",@progbit
```

./bin/llc --mtriple=loongarch64 -mattr=+lsx pow.ll -o -
```
        .text
        .file "pow.ll"
error: POWI exponent does not match sizeof(int)
error: POWI exponent does not match sizeof(int)
        .globl  test_powi_v2f64 # -- Begin function test_powi_v2f64
        .p2align        5
 .type   test_powi_v2f64,@function
test_powi_v2f64:                        # @test_powi_v2f64
        .cfi_startproc
# %bb.0:
        vinsgr2vr.d $vr0, $a0, 0
        vinsgr2vr.d     $vr0, $a0, 1
        vst     $vr0, $a0, 0
        ret
.Lfunc_end0:
        .size   test_powi_v2f64, .Lfunc_end0-test_powi_v2f64
        .cfi_endproc
 # -- End function
        .section ".note.GNU-stack","",@progbits
```

On both backends, this IR generates an error **error: POWI exponent does not match sizeof(int)** and produces the wrong instruction sequence.
I will submit a patch to fix it.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcVk-P27YT_TT0ZWCBGv2x9uCDd50NFgh--SFF26NBiSObDU2qJCU7--kLSvbGsTfbNqeggkGPqJnh48x7BIX3amuIlqy4Z4hf9LM_MkRWrGeiDzvrluPUrLbyy7Kzh0Rrxles5KcfX0lqlSEYrJLAch7Ih01nD2ozYFvmDKsuOGBYcIYPoDKMdsrwDtjinvEVxHdthQSWreFkPCAcQdq-1sSydzHwMonQamugOgfnY2QQSkMjtIbGmuBEE27yRHhaD_skwktGeInKkGF16zlhuoI8ruiDdfRKbizyt4A6CmONYvUW66saMr5KGD7WyjB81LqB-XwfnOpi6rVTvhnKHOZ7EYJj2Zrh_QBTL2BuYX6VDJJAxzAuOj1JjFN1H2h6H3Gm5RseRfRgiG4oc4Vdummxw42Mw5B2fPOsGu8wGgNl2KZn63iyyly-WO2LdfqqU6zqk5nh2SrzaEXqxR20SkcoDPHEuXGenLOOZSv4_8ffn4COnTVkAkhLHowNsBeh2YFXz2RbhpUyYWraj8a9lGerba3hitpw_TDMYD6He9oqA21vmqCsuY4at9fhRI3Tg5drhS8d3QThA8v5OSXjq-vv2eoGzQWoV2R5sWDTqo0PwoXO2SZyKUZgUdcJZ9nqwnPwFNSgFTyTs5EhGAca4cE-jWMQoy0uo1qvlaRU2oNJhhaGKrpMYyuK6Dl4KvNkOE0yrAT_tgGOIp-TD7ECGzLyClgSWwfwStXgImb-NzUgI08VOHfynZFwUfSvy9HUWoaYGBsoef-_X-c-iOZz5Ck-jCNOTeuc3dYq_BvBa2vNVrhmdyV67Y9vyf6FQFfqH7X0cynpRkr_WDrnPFcKKqZzL0rnNRr8DOJRxm8dDi6RwDAfHJ-4novR4N9xnVDcuKffyDJ8z43_pzTkb0X00UBtww5q0XwmI_14Bu2Uh6dPsCVDTgTyIAyMxAWGK4Y_SOIxFISR0Dkr-4Y8hB3BwVmzBWV8cP20I09_9mQaShhfPcFBaQ2-r_cqgIBuTB0stOoIKiQzuczkXXYnZrRMFxlWi0Wa8dluuUBeY14tGuJpucjyhcwLzGrMxaJoq5bP1BI55mmKdynPi4wncpHxqqxEKdK2lnec5Zz2QulkvPJYt50p73tapmnFF3czLWrSfrz2FeuZW0aved1vfbwkKR_817iggh4viA9W0nsyrFjDkwlOGa8aiL14_V5VcmhE78lP1fegDHyIZ9tqOttiLT89_fLwW5nDYUcGBmqCddCSCL2LfXMEZEStSSaz3unlLoTOR97iI8PHrQq7vk4aux8P0eH8N--c_YOawPBx3LJn-Hja9bDEvwIAAP__eQI3NQ">