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

    <tr>
        <th>Summary</th>
        <td>
            [LoopVectorize] Sign-extension miscompile
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          patrick-rivos
      </td>
    </tr>
</table>

<pre>
    C Testcase:
```c
long a, d;
short b[20];
short c[20];
_Bool e[20];
int f(_Bool g) {
  for (long h = 0; h < 16; h += g)
    b[h] = (short) g;
  for (int i = 0; i < 12; i++)
    for (int j = d; j; j++)
      c[i] = (short) a < e[i];
 return (int) b[0];
}
int main() {
  __builtin_printf("%X\n", f(1));
}
```
Godbolt: https://godbolt.org/z/3E8frs1Me

With loop-vectorize: `FFFFFFFF`
Without loop-vectorize: `1`

Reduced LLVM IR:
```llvm ir
; ModuleID = 'red.ll'
source_filename = "red.c"
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"

@b = global [20 x i16] zeroinitializer, align 2
@.str = constant [4 x i8] c"%X\0A\00"

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, argmem: none, inaccessiblemem: none) uwtable vscale_range(2,1024)
define i32 @f(i1 %g) #0 {
entry:
  %conv = zext i1 %g to i16
  %zext.g.i64 = zext i1 %g to i64
  br label %for.body

for.cond3.preheader: ; preds = %for.body
  %0 = load i64, ptr @b, align 2
  %zero = and i64 %0, 0
  %true = icmp eq i64 %zero, 0
  %2 = load i16, ptr @b, align 2
  %conv26 = sext i16 %2 to i32
  ret i32 %conv26

for.body:                                         ; preds = %for.body, %entry
  %phi.0 = phi i64 [ 0, %entry ], [ %add, %for.body ]
  %idx.0 = getelementptr inbounds [20 x i16], ptr @b, i64 0, i64 %phi.0
  store i16 %conv, ptr %idx.0, align 2
  %add = add nuw nsw i64 %phi.0, %zext.g.i64
  %cmp = icmp ult i64 %add, 16
  br i1 %cmp, label %for.body, label %for.cond3.preheader, !llvm.loop !0
}

; Function Attrs: nofree nounwind uwtable vscale_range(2,1024)
define noundef signext i32 @main() #1 {
entry:
  %call = tail call signext i32 @f(i1 noundef zeroext true)
  %call1 = tail call signext i32 (ptr, ...) @printf(ptr noundef nonnull @.str, i32 noundef signext %call) #3
  ret i32 0
}

; Function Attrs: nofree nounwind
declare noundef signext i32 @printf(ptr nocapture noundef readonly, ...) #2

attributes #0 = { nofree norecurse nosync nounwind memory(readwrite, argmem: none, inaccessiblemem: none) uwtable vscale_range(2,1024) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic-rv64" "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zaamo,-experimental-zabha,-experimental-zalasr,-experimental-zalrsc,-experimental-zfbfmin,-experimental-zicfilp,-experimental-zicfiss,-experimental-ztso,-experimental-zvfbfmin,-experimental-zvfbfwma,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smepmp,-smstateen,-ssaia,-ssccptr,-sscofpmf,-sscounterenw,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-za128rs,-za64rs,-zacas,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-zmmul,-zvbb,-zvbc,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
attributes #1 = { nofree nounwind uwtable vscale_range(2,1024) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic-rv64" "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zaamo,-experimental-zabha,-experimental-zalasr,-experimental-zalrsc,-experimental-zfbfmin,-experimental-zicfilp,-experimental-zicfiss,-experimental-ztso,-experimental-zvfbfmin,-experimental-zvfbfwma,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smepmp,-smstateen,-ssaia,-ssccptr,-sscofpmf,-sscounterenw,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-za128rs,-za64rs,-zacas,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-zmmul,-zvbb,-zvbc,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic-rv64" "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zaamo,-experimental-zabha,-experimental-zalasr,-experimental-zalrsc,-experimental-zfbfmin,-experimental-zicfilp,-experimental-zicfiss,-experimental-ztso,-experimental-zvfbfmin,-experimental-zvfbfwma,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smepmp,-smstateen,-ssaia,-ssccptr,-sscofpmf,-sscounterenw,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-za128rs,-za64rs,-zacas,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-zmmul,-zvbb,-zvbc,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
attributes #3 = { nounwind }

!0 = distinct !{!0, !1}
!1 = !{!"llvm.loop.mustprogress"}
```
LoopVectorize pass.

Looks like a sext/zext related issue.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWk1z6yjW_jVkQ9klIVl2FlnEyZu3uur2pnuqZ3YpBMjmGoECSHb866f4khTbt-dO3c0snEqJh_PF4XCAk0jYGL6TjD2B1RasXh9wb_dKP3XYak4OC80HZR5qRT-fXuA_mLEEGwaKZ5C9guwZVFn4JaEvlNxBDNALpKDYBprZK21hDVZblIHV6wWdXNHft0oJyK7oXFrYALQJ_B1AjxCsIw_CRmkI0MY7sIegeIUZKLYevsC8ihhtHcfpJj3oPduD1atXAmjj_XLWd-PQo3nnA5-s82AdeeyMu9-Z6ZnWd6_logK_h8e1OPTR4Ld8wX4kFtmTY5rZXss4iBN0s_kSNrB-neLXYi4B2lzE7v297rmwXL53mkvbeAkE0OpfYPUiPXzxoc-du-jx2vaYB6H7_4rWSlhQPMO9tZ1x-YLeAHrbBcZS6R1Ab2eA3or_2zTa5L-zaMg__8ntHgqlusXAiFWan13KQVBlb_FnHMqJqt7els5HsfD8g9GeMAq_ffvrd_jbH9dpLMTQQq4jtdjC3xXtBfstLchaM7oUAqB1zGHVa8LeGy6YxC2LUshJERc3L2Sx3jELKbZY4E_nbBRjixYUz2zRgeK5Kv1jwUeQow0onnO0WcgCBdqfeViZuVmreSemkbkhQ1UuenmQ6igXgsv-tNjJflSLzzKrvc5OqBoL6HcbPEGeVy79zkwrLrnlWPAz0279seA7CdGovjRWewtESWOxtM5G6UxsnAUyZVD27B7ZpQfFFr71kliuJHy2VrssgVI1mjEolWak18Yh8ykJlKqXRy4pbFmr9CdAG80wPWpumXdO71rWBgPSU7jEhDBjeC3YF9Yj7I8W14LBwRAs2LvGcscA2rgszzNUjluSsoZLBnmBICgzl_88hwCtwtGDimzaQ0xa_TmmE3RSRMnBx-fMThZGTWiVD_Ek5rjL3ZJX5W3hqkzCtYYC10w4XqP00p3J84A6GlGSFstOsz3DlGm_DYot7DSjJqbIha53IvM8oTD1A6IX2LnFLbP6auWj01p5FSy9hrfhRLOZkNV9SEtO2g6yjyTolC9l0cyBvPrPDrjgosormRCxKphxIStGSc1sWL6kcRkvH4ciHr4_8fPjYKIX1w15MPnZ7fkyBLfb8xCA1RZmc2noDmvXX20dDVMaucm0F5hMcnqKJnfMMpfc0rpgcVmrXjrPvmzly1g6H7IEkofJvLFKsxRMF7FRO457ezUwpSEbKIWyP0Jpjl_NhwlNqT5fybabkqQXNinGOEx7pdZxX5C2c5zrvXBJvNwM3ovcHfFLd1u4TnZ5j_3M0RRPov_yGHF6lDXQV1snm46V-Y2MivzvjxQshA-WxVxA37uwFg-pNJbbao7rtuKs0oim8r-zhTad9SFbLpfeuTIbiwOXEWkIqaTsnVvhRvCZVaCr2cYh4zSLyw36C-uQgkwE1j-M8oXrBHe2n0m7u0RJ8TmfLyq-XFfYWs3r3jITj363_9fb_5ELy139Ui2sxl3H5W7RYrt3923xChAKq-_WFBmLyWHRaWV9pbSo-6ZhemFcyZTEN1E21BcL0vUja8ck05ws9OBuiblUw7CLqBlFAdpWZc0tQC8AbXFoSGhoaJrQtKHRTOBTgENozpwYnWDDJGE89gZWoGaGTyOuSjrDzQyPMiJHm3rsFGjCVenwgvnHqWOau8MVi4Vp2669QZW3qOY29SbxQxlOr-n9DeEzxq26Qa33-AZVYB-6K7I25Jrc1E3rTqFLOicNF91tujHXdGtuODj8yLpjHFvv_N49zJ6oXlqmmTyG_g7bDgdoBywiHMxEHswXhh0Y8eE0LeaB2rLO3xcL0xqLLWPeE2MS3xASDjoHVdO1TcJffDFflI3729gGbElsR0dmbpi-Kk_CwwFTlkAfQI11JHE54CgmcaeC6aGrW49OZMCij6jmI7AtlryLXSaOEbWYJMTaiAxvvUcn0xDm_oIPeCBdQo3URPDu1Hw0I-nYYkI-Pj4S4cP1qaJf-h8q8nnD3cS5IVhTKsK5NtIb0Zv9RLXuUq7xDNczbCZMQtbHjpK0VcNEaFrWcnqaCGnyoXPJZG2HuZ4I7qieegMNkT8NLkUldqOpzvtyxjna6AirMiGCI2hxXtUBHiMzTO4c5nWuSWgOsXtI_VNogw4JOiQIhSQ6ExaaJjSt6iJIrXf6TLkMtppgpNnHJu6-c5ME9nOQuJzE4-_MSa3aEXUjOkdEcKtwwrxJSJikRHRIsDMnMuytM3exDGjPpZVWTJ0O90l-30UbaZKH8JSxobFlsQ1TPIQxDiY2LIqZyA7xads-DDrEJRnimgwxUsMUqiEu03DYxTbRJUkgjjIc5CgTjmKPkr5JbdIzo55JetHPITo6CHer1wlXxWbsoKzcjHhVJVigdTXSy-xxZKxylGC1WhUjfZM_OgaCY8X1tb7Jr-ubn65677XIvRa51yL3WuRei9xrkXstcq9FfrUWQT-sRe6Fxr3QuBca90LjXmjcC417oXEvNMCvFRrFrNBIFcbFCymUhzc_lBvLJbEQoByst_5NYni9mE8qKI__RkkyAKHx7eOy7Y3ttNppZnwB8YNPab4p1f2VPmuBHTZmOffom1IHAwU_MIj9q3CA3vw3BK6ysIxCbkzPlg_0qaCPxSN-YE_5Ol_l2WpVFQ_7pzxHtC6bhtFqjem6XNG8XrO6ImTDqk1TP_AnlKEyW2XrfJOjEi3XGNEmJw0qHgu83lBQZqzFXCz91JTePfghnx7zonp88C9kjf-2DCHJjsEfN9_V64N-cjqLut8ZUGaCG2smK5Zb4T9K-xIBsHqFf_KdXLCTZdJwJWHLDVFtxwV76LV4uvjgiNt9Xy-J29tvznZsXDn4nbnr7M17ZAB68x7_OwAA__8sSUJe">