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

    <tr>
        <th>Summary</th>
        <td>
            [SCEV] Incorrect scev result
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:SCEV
      </td>
    </tr>

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

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

<pre>
    Reproducer:
```
; bin/opt -passes="print<scalar-evolution>" test.ll -S
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@g = global i64 1013947741822887439

define i32 @main() {
entry:
  %.promoted60.i.i = load i64, ptr @g, align 8
  %0 = trunc i64 %.promoted60.i.i to i32
 %conv661.i.i = and i32 %0, 16382
  %cond.i1408.i.i = sub nsw i32 0, %conv661.i.i
  %1 = and i32 %cond.i1408.i.i, 268431360
  ret i32 %1
}
```
```
Printing analysis 'Scalar Evolution Analysis' for function 'main':
Classifying expressions for: @main
  %.promoted60.i.i = load i64, ptr @g, align 8
  -->  %.promoted60.i.i U: full-set S: full-set
  %0 = trunc i64 %.promoted60.i.i to i32
  -->  (trunc i64 %.promoted60.i.i to i32) U: full-set S: full-set
  %conv661.i.i = and i32 %0, 16382
  -->  (2 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> U: [0,16383) S: [0,16383)
  %cond.i1408.i.i = sub nsw i32 0, %conv661.i.i
  -->  (-2 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nsw> U: [0,-1) S: [-16382,1)
  %1 = and i32 %cond.i1408.i.i, 268431360
  -->  (4096 * (zext i16 (trunc i32 ((2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> /u 2048) to i16) to i32))<nuw><nsw> U: [0,268431361) S: [0,268431361)
```
llubi output:
```
Entering function main
 %.promoted60.i.i = load i64, ptr @g, align 8 -> i64 1013947741822887439
  %0 = trunc i64 %.promoted60.i.i to i32 -> i32 1546233359
  %conv661.i.i = and i32 %0, 16382 -> i32 9742
  %cond.i1408.i.i = sub nsw i32 0, %conv661.i.i -> i32 -9742
  %1 = and i32 %cond.i1408.i.i, 268431360 -> i32 268423168  (4096 * (zext i16 (trunc i32 ((2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> /u 2048) to i16) to i32))<nuw><nsw> = poison
  (zext i16 (trunc i32 ((2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> /u 2048) to i16) to i32) = poison
  (trunc i32 ((2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> /u 2048) to i16) = poison
  ((2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> /u 2048) = poison
  (2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> = poison
  (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32) = 4871
  (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) = -3321
  ((trunc i64 %.promoted60.i.i to i32) /u 2) = 773116679
  (trunc i64 %.promoted60.i.i to i32) = 1546233359
  %.promoted60.i.i = 1013947741822887439

UB triggered: SCEV result is more poisonous than real value
  %1 = and i32 %cond.i1408.i.i, 268431360 = i32 268423168
(4096 * (zext i16 (trunc i32 ((2147483647 * (zext i13 (trunc i32 ((trunc i64 %.promoted60.i.i to i32) /u 2) to i13) to i32))<nuw><nsw> /u 2048) to i16) to i32))<nuw><nsw> = poison

Exited with immediate UB.
Stacktrace:
    %1 = and i32 %cond.i1408.i.i, 268431360 at @main
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWF2P4yYX_jXkBjmCA8b4IheZzER671412t5WxCYeugQswPOxv77C-ZyZjDrZUdttV7ISDJznPIfz-GCjYjSd03qGyhsE0Kbm6dvzIwJA5e1EDeneh9m-c7L27fPsF90H3w6NDojNEZkjQfYXmSN2g9fGIVj6PuGiVzHqiNgtAuiDcQmxRWyUVaHQD94OyXiH2B0CwEnHNLUWFytE5kmFTifcqqSsevZDwojdYgSgiy1ic130UBHE5gzGn3xLX97mluDjT2GODQoSsTkFWWwk2bfc2CUO5oIXqzwN4MQjBdNbfeDwJMVvgheD--r8oyusccNT0blhZ5IvTrpxcmf9WllsBMeUUFbzquJUAkhZcVbvJrd6Y5zGhgFGnGxVXjyJoMaoukFkrl0Kz7t1xhhBOe2D3_qkW0GmZmpGN9arNjtBsMB9Chmny21lTeewPJiScXIKg2tGShfQks9EsgGCsvHuQQh6dKNcu6MJJcnwVDAJB_DGu3ZqKCfyOD8Oa-zi42gzGrzEPFjS1-AvobIhCMkZZaPCMA46HabSvIbV7WsRnrX_n1VnXIeVU_Y5mogRVKtRgvjuIEE83w8iqPDGB7wZXDMOIKh2Kal2OVjY_LhsnjOifuqDjtF4F7MRYvNjBj-ZrKJA7O4iwpfsZTNYW0Sd8Or87rvSfHIlP2IB9UcYfFw4J-95NKtOftNPCRvKziiNpvLjFBEsBzy2ch9lh9Y4mi-2cMNjrjts4WJu7KJC5U3ml-mNNqsLnZ_U-yng4u-O-G2gBT2PstilBRb0LMyrH85TgJzU4lWI4lKIQHnFJRO8-mclsDMhXB6txJXCOawEfS2e84FX9cnaYW2wH1I_pLfb6Z1LOuRacyxIh_LyfdUFj9l5fz-6roDs0RhgWnIBjLGyvqoGnADqin9iKznhFOdA14j3BJG7gFEhfyIV53XqvYn-sHX9J2K9ENa_LJS3AfyonN8y_WFovqftv4zH6JLLir6nuk84ydAFY0DPBHE1XAapKkapEFX9iuSforDbC-X-0l707ifPl5v8RdV1Oug275Krxd2vOOg42IRNxFsf9D5jfog43SuHg1YWPyg76O8q7nnqi9qeifyUxT2_VDyZpFv8aNI9Ntutbo1KGn-5mSIyXyXVfE1BNfrwzXn9Yqt09h10fJuZtDPW1qxWEz2jFeclAyBkcj-TtWyAKUKIqHUjFCWNrqERoGrWct1MzAwIlIRTRiQVnEw5EL6pSy2V3NRNSxAnequMnVr7sJ360E1MjIOeUVaWjE6sWmsb98cbWxMbv-2NVePZA-QXXgSQLRGbZyXuTz7CLPcV66GLiBNrYoon_GSSHQ9MRoPyFv_PNT4E3SQcG_2wF_NkCHZ2n1If82LCEsGyM-l-WE8bv0WwHJ3u_oo--N91kxAsR-4RwXJP_2EGfwQAAP__LTi6UQ">