<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98750>98750</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[JumpThreading] Non-deterministic output
</td>
</tr>
<tr>
<th>Labels</th>
<td>
bug,
llvm:optimizations
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reproducer:
```
; ./test.sh test.ll
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"
define void @"_ZN10ockam_node7context17context_lifecycle55_$LT$impl$u20$ockam_node..context..context..Context$GT$28copy_with_mailboxes_detached17h7c77f3fc19191f13E"() personality ptr null {
br label %4
1: ; preds = %12, %7, %2
%.02 = phi i1 [ true, %12 ], [ true, %7 ], [ false, %2 ]
br i1 %.02, label %13, label %14
2: ; No predecessors!
%3 = landingpad { ptr, i32 }
cleanup
br label %1
4: ; preds = %0
br label %5
5: ; preds = %4
%6 = invoke ptr null(ptr null)
to label %10 unwind label %8
7: ; preds = %10, %8
%.0 = phi i1 [ true, %8 ], [ false, %10 ]
br i1 %.0, label %12, label %1
8: ; preds = %10, %5
%9 = landingpad { ptr, i32 }
cleanup
br label %7
10: ; preds = %5
%11 = invoke ptr null(ptr null)
to label %7 unwind label %8
12: ; preds = %7
br label %1
13: ; preds = %1
br label %14
14: ; preds = %13, %1
resume { ptr, i32 } zeroinitializer
}
```
test.sh
```
#!/usr/bin/bash
bin/opt -passes=jump-threading $1 -S -o diff1.ll
for i in $(seq 1 100);
do
bin/opt -passes=jump-threading $1 -S -o diff2.ll
diff -q diff1.ll diff2.ll
if [ $? -ne 0 ]; then
exit 0
fi
done
exit 1
```
I have seen this happen with other ***Rust*** programs as well. I am sorry I cannot provide a test case showing actual codegen difference.
I believe it is caused by https://github.com/llvm/llvm-project/commit/f05b15b21b46835efeb88eb8bfd456e82582722c.
It has caused 150+ false alarms on my benchmark https://github.com/dtcxzyw/llvm-opt-benchmark/issues?page=6&q=is%3Aissue+label%3Anon-deterministic+is%3Aclosed. It is annoying and llvm-diff doesn't work around this.
cc @kazutakahirata @nikic @MaskRay
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysV01zozwS_jXypQsXasDggw_OeL2Vrd05zPue9uIS0BiNQWIkkcT59VuSsWNnPKlKbShKtKRu6enuRx8Ia-VeEa1Y9sCyzUyMrtVmVbvq5fX4PCt1fVz9oMHoeqzIsGTN4g2L12wRT--pmjzAnOHWkXVz20L4dt2p0wmzJwe1cKITRz06YMkGGCJFPUvWFA2YxyxZJxgKX-W3VS8t0lBE8iJwLFiy5lhETRFPkgpNi7P5Io3-8mqIN1CckUNHZxgvxWK3SKNRHZR-VlEn1fgS7dV4sTqVNTVSETxpWQNLY4a4--93HuvqIPqd0jXllVaOXhw_C7tONlQdq46ybMcw_fffDFPZDx3DdMSYYfpmPJ9PRlfCt5PAMP2nt8Si0sNx9yxdu-uF7Er9QnZXkxNVSzXP27zK8yZpKr7kS97w5B_eA-_9EgYyVivRSXeEwRlQY9cByx9OrgGUBjpRUgcMs_Taa58J8OkdDNV2ClnGkeE3L-TTF88DMczmMQa9oZUgObDsAZwZadLkCCzbhMptR37d3ojOnjtOBm9A_ZhhFt9_Qc2T2-qNF3j24rsOjlBF1mpjGfIr4EmA3QlVS7UfRO0D5KPlB5YJAssvMM5P1ZFQ43AvjPwaQHo3jPE9u-zaLvN2n3x-m2YKhRcXoU2qJ32gCxEYFm_i8r2LTl_5FMOonqWq35qKa7j5V8Dl8ZT44oZUH3Cq-BN1ePwH7txy5R2Trj0qvtSj7Mqj5ZeyLb9ZtPHnUf8GOntjDef_H23yj1nD8QvgTgH48xLkyRfMwu-u9Nsd8_5aP-1P10MYsmNPd9IOr2S0VNJJ0clXMtPoZz68P3tPJ9vp5L2vgYnf6HA7WsNwW0rlS3HRDuWpVQ8OokFYS5Ylm59jP0SuNSQ8R4FhyiH6CyINtWwafjnhG21AglReg2Fh6Rdw4HHsaZFMZ0ytzwn69ER4mcjnxLdA9OsC4Y6KbMJO4NEkW4gUwWkfSB7AtaRuqUov0sF5J27kGa2i6-gEJf5B_B-hFU8ElkiBa6WFVgwDKfCnNWjXkgGG69P7Y7TuUoHB6L0RvQVh4Zm6bg6PIHqw2pgjPEIllNLOaz3JmkCEuxVUwhLYVj_7cInKjaKDSte0JxXiQYZURfNbhCV1kp4IpANpoRKjpRrKI7TODdZf7XDLcLuXrh3LeaV7htuuezp_osHon1Q5httK9730QhNnJc9K5GW6KJKMGiqLgsqibOo0W1CBWYE5YjUBeXTQisvMPIsZTvs1iE6Y3oJW0B-hJFW1vTCHj6BNV9QzOj246GLHcCutHT23toPYE0s2C4aLXyzZSOtP-nXoZvgQFnFoUVpFNTkyvVTSOlkxfJiUq05bqufwGALnE3IMcfc7mp87ULLWZBXD3MGzNgcQRo-qDly4SUNV-dvjQbyOThxEK41wwrcoeZCh6z_CHn6II1wbzepVUi-TpZjRiucYF8UCl_GsXTU1F01TN43Aos5Kvsx4g0VZN1XK40WczeQKY0zjnCc8ywoez4uU86qmrEx4k4qmYmlM_jY5957MtdnPQmhWyyLP4lkIjw0_B4jluA83ym8MMRAjWevByV6-Cie1sr4z28zMKgSlHPeWpXEnrbNvgzvpuvCz8a-xH_4-r3iWbeD7-_iDHt0wutloutWnKTqlH7cnP55W-L8AAAD___HYhEU">