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

    <tr>
        <th>Summary</th>
        <td>
            [RISC-V] Miscompile with LTO and -fno-strict-aliasing
        </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>
    Testcase:
```c
long a, c;
char e = 17;
int f[20];
_Bool g[20];
unsigned b;
int h[500];
void d(char i, int j[]) {
  for (int l = 1; l < i; l++) {
    a = ({ f[l] ?: e; });
    b &= (e ? ~j[0] : 1) ? 1 ? g[l] : 0 : 1;
    for (; c;)
 ;
  }
}
int main() {
  b = 5;
  for (long l = 0; l < 20; ++l)
    f[l] = g[l] = 1;
  for (long l = 0; l < 13; ++l)
    for (long m = 0; m < 13; ++m)
      h[l * 13 + m] = 1;
  d(e, f);
 __builtin_printf("%d\n", b);
}
```

Commands:
```bash
> /scratch/tc-testing/tc-mar-25/build-rv64gcv/bin/clang -march=rv64gcv -flto -O3 -fuse-ld=lld red.c -o red.out -fno-strict-aliasing
> /scratch/tc-testing/tc-mar-25/build-rv64gcv/bin/qemu-riscv64 red.out
5
> /scratch/tc-testing/tc-mar-25/build-rv64gcv/bin/clang -march=rv64gcv -flto -O3 -fuse-ld=lld red.c -o red.out
> /scratch/tc-testing/tc-mar-25/build-rv64gcv/bin/qemu-riscv64 red.out
1
```




Reduced llvm-ir
```llvm ir
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"

@e = global i8 17
@f = global [20 x i32] zeroinitializer
@g = global [20 x i8] zeroinitializer
@b = global i32 0
@.str = constant [4 x i8] c"%d\0A\00"

define void @d(i8 %i, ptr %j) #0 {
entry:
  %conv = sext i8 %i to i64
  br label %for.body.us27

for.body.us27:                                    ; preds = %cond.end16.us39, %entry
  %indvars.iv = phi i64 [ 1, %entry ], [ %indvars.iv.next, %cond.end16.us39 ]
  %0 = load i32, ptr %j, align 4
 %tobool8.not.us = icmp eq i32 %0, -1
  br i1 %tobool8.not.us, label %cond.end16.us39, label %cond.true10.us36

cond.true10.us36: ; preds = %for.body.us27
  %arrayidx12.us37 = getelementptr [20 x i8], ptr @g, i64 0, i64 %indvars.iv
  %1 = load i8, ptr %arrayidx12.us37, align 1, !range !1
  %conv14.us38 = zext i8 %1 to i32
  br label %cond.end16.us39

cond.end16.us39: ; preds = %cond.true10.us36, %for.body.us27
  %cond17.us40 = phi i32 [ %conv14.us38, %cond.true10.us36 ], [ 1, %for.body.us27 ]
  %2 = load i32, ptr @b, align 4
  %and.us41 = and i32 %2, %cond17.us40
 store i32 %and.us41, ptr @b, align 4
  %indvars.iv.next = add i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %conv
 br i1 %exitcond.not, label %for.cond.cleanup, label %for.body.us27

for.cond.cleanup:                                 ; preds = %cond.end16.us39
  ret void
}

define i32 @main() {
entry:
  store i32 5, ptr @b, align 4
  tail call void @llvm.memset.p0.i64(ptr @g, i8 1, i64 20, i1 false)
  store <8 x i32> zeroinitializer, ptr @f, align 32
  %0 = load i8, ptr @e, align 1
 tail call void @d(i8 %0, ptr @f)
  %1 = load i32, ptr @b, align 4
 %call = tail call i32 (ptr, ...) @printf(ptr @.str, i32 %1)
  ret i32 0
}

declare i32 @printf(ptr, ...)

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

attributes #0 = { "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-zcmop,-experimental-zfbfmin,-experimental-zicfilp,-experimental-zicfiss,-experimental-zimop,-experimental-ztso,-experimental-zvfbfmin,-experimental-zvfbfwma,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smepmp,-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,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmp,-zcmt,-zdinx,-zfa,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-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 = { nocallback nofree nounwind willreturn memory(argmem: write) }

!llvm.module.flags = !{!0}

!0 = !{i32 1, !"target-abi", !"lp64d"}
!1 = !{i8 0, i8 2}
```

Discovered/tested using 3e6e54eb795ce7a1ccd47df8c22fc08125a88886

Found via fuzzer.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMOUlv6zjSv0a5EDIkarF8yCGJ28AHfIMGuhtzfaBIyuYLF4WkFMeH-e0DLlq8vPcGmBlggkAsFmuvYpGSkTHsKCl9TqrXpNo_ocGelH7ukdUMv6eajco8tYp8Pf9FjcXI0KR4SbJ9kr0kdRb-cZhzJY8AJfAN4KR4DTh8QhpQkBR7kG9nLJMWdEn1CrOk2s_Yb69KcXC8ww_Sm0hAeyXglFSvVXZFOSpGAElg49UyZ4qj_B58S-AOJNtICkCnNEhg4wh4MDApXj34BpgHE_jq_6_YAECeOoFNsn31bvCk2oOkOCTFC6COM9k6ZbNZjqkFCawjn4vHAfzDmZUF1heQezXFAeT-eVzEvoAsUqzlReudNh9tuItrKypnRsjUBDhnBWLScV671XqnqhV31OCzGgKULQGCHg4B4otyZ9hi-X7txv7KgZ8Kz4sfCl-xiYVN3LGJKzbgi4WDBL6AvHAkQDyyypUOdVXTXaXv27d2YNwy-a3XTNrORw8msCJJ9SY9-AbaNcsS-WmPxKl_vikhkCTmfie1yJwiqvgNJPBgsEYWnxJ4sDi11Fgmj2EikE5hlcCDs42keqzLIx7d3KX3gDmSR-Co8Ckp9nEZpB23CqS_FyDtBkNTTpJizzkBmpINBqnygBosSDupUuO6gE0RZ8g4zf8R0z6oGFLNDB7rclIXJFf_G77_t93Mf1Ib988_KBkwJYDzUaRM3_A6LJiwFukjtYAgizj6clkMHQfSVCTFC037pHipS_9I2Qzkro-85LBJZQED7s881PharNWs53QSGT1LB_ku1adMOZPDOT3KYWaLzzILPEeuWsQBa9xJMC116yXf-cEZsAK63XmhWjHJLEOcXaieeY4PeZqfsbRXFhQQZPPSxljtV7GSxiJpnchyloiXnZ69uEd24x-hHZMU-KMnKTPXQlgDElj546d3wmH13XdbWGRLy6XS6q-5AwBHhZUcvSmGni2IUoBVwKVq6tMacNRS18uqTumNO5o3g4HbtU3XC0XsgT__c72z15SYmGBnDdlQSfJ6M5hi57xJYBXMXmxmkoxImw0Llvcn5qx1MXRH2sIC_AH85heu2DaSnm2kvFHpeRZVmdfAFSK-Qq6i-wYQZ0cJpjglsLKqVYo3G6nsZgheMSx6QD98BTiBji_NV6Fl-T2nI5pD_iAo12tWDzTP3GK9zsjdWvFyH_EH-fSOI63RFyPnHDrebahlaimngkrrg7DeBXNkyuzor0B1CbIJuIr9Ske-Cm6ziu2N7iXSMbu5RvJIHZDfVHJeOo7Gy70sBZ37gi7go4K-je5tAFdLj-J3F-RQVT8KqyPPt5vBlNlSu64yQomufFiX50r-uqbzR8puChg-LuAya-8L2MdeEmddSA2SZKpbuLInOhC5jFWaTmQT-68V3ezGoI-QBwUD38A6z_TMrI-KVPZ6h91y3mzzqfTmPbeWdLWrXED9AuYUyaG_W_xhB7zi-hea4C87YPRbU-vb_e1Vb30c-BSU2aO79m3jX3JW_SJTFjEOMOJ8Pm3c6b8RVBhqN322cecEbK72fhMq0-UDhiaQgw5xQ1cX5GBBUrw18fAtfrs7SRfLusWyZRfftOdmRU_XPSOQ3zuyHJvZtardD3rUr_aPS59T4DgWdWFnuAg5js1m4zNTZvO9Pgp0lwIfrLCT8pUdLvvrG8Rt-jFHes7_Wu6i8ep6VLyCwyCxZUqCF2u1eysAUjlzW4TfgVSdphRINchPJgn4ZJxragctgaBC6a8ENkgfBXU3PPCpmV1SO1nzy3Jx-no7aBoEKMm_QvXE2omFw4RA-hjvMvnaDWStZu1gqYnXHLeDtq6PwnB7TDuKnALjrk_F3t-qXuuyZW63J_AVhQGHgYShC4MIg6YcnQM4huHCsNET2FGJKYuzkRawW8HnGa5LsoK7FTzT8Bw27Twp4ALXpYNT6h_nnmrmTmDEUyNELx5g5SOseYx9iPxQhpF7_PCA-IKQUA-w7Qk9wHLkQ3eH1gbfo7FQ_T22azvh-tstnuGO8Qf0Dm_MA_xD6dY8cGb8kU638Cm8oyf3MCesBmmppvIzzI_I9iiAdkQ8gqNZ0KO5WrAjxT70RiAWsIL2wptqzIQyGIfN7UDV9aKb4Cv1xlhkKZXTxL1XB9jiOM66V5rNUJdn7sEREToBQwBapCOKyRFFMol6FUSPfSs8dMYj4kOEWjYDViDJ-jil_DNCAuEJoiJChglv0dl0mCJDIzzifoI6qTFn_bn76GbUp0AYf3x8TIgPNyeKXM0_VFxnHXOOM4ORJoQrSdf4jg_mtGDtiSLSohXcrmCzwDhsijhRkgg1LohOUMHIeUFMzofJ7SIVPWJ6QZgvuSIfSYj8eXRVKZHTpnpvywXlsNERrMsJwigCnxETPLoEZy4tDsN7nL5P83MYAw8OPDgQhcq5YBqGLgyhbC84FMSFMBlEdIG3O8Uhbq5LNxGc1sC0ynDshBeGWyVmqJ-hS4QwEgpNMOsmiJuJCetQTBeGZdhHF-biFqATk1Zavkx6NEz0p9ADL-_hKeNA4kjjGDx7D6LfTRxoJDNxOYRFiCHoGmMCxpiBMQZoXCI0xqSM78c4TniJJyBqGd_lTBOasYcmfjONE5-Z-czEF-0co6EjzzMYUzDyvC6aeQKzspnhqp7AAm7rGV9mu3mhyuEE1lVVzPgm37kFuHxGvj7k8_mQ_7dvK-DmFpXAPFxVFBk43XQcHadLee7u0TDP7jmyFYW7fk0vqMsVBLnWBxc07_1lAC6yYJ6vpTTxvbkB8OdfdPfMYDVS7fJ2sNRYSsBgmDyCgta0Kmm73VWYblGOMSm3pGswhB3OmhxWqGma5upjwUENkoCRIdANlwvVmyfyXJBdsUNP9Dnf5nmV57CAT6fnNi-2lHZdSUlHd_WWZh2pC1wUWV23NYZP7BlmsMwKuM2KcpvDDaJl3qHdDiHSdHSH3AVdIMY3PuBKH5-YMQN9buptXTz5Fy3jfxuCUNJP4BddyKr9k372nyTb4Wjc3ZIZaxYpllnuf1T64__-fEv_nlR78DcXJNEzTsEnsyfw_3_97t9qH31pfho0fz5Z2_uP5PCQwMOR2dPQbrBrNwenJw5pr9V36k7Tg7fOJPDgrf9nAAAA__-BkNqf">