<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/71704>71704</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Miscompile at -O1 and greater
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
meheff
</td>
</tr>
</table>
<pre>
Tested at trunk on x86-64. Does not repro at 16.0.6.
Example produces wrong result at -O1 and greater. Repro at -O2:
```
$ llc bad.ll -filetype=obj -o bad.o
$ clang bad.o main.c -o main
$ ./main
0x0
$ opt bad.ll -O2 -S > opt.bad.ll
$ llc opt.bad.ll -filetype=obj -o opt.bad.o
$ clang opt.bad.o main.c -o opt.main
$ ./opt.main
0x1
$ opt -version
LLVM (http://llvm.org/):
LLVM version 18.0.0git
DEBUG build with assertions.
Default target: x86_64-unknown-linux-gnu
Host CPU: skylake-avx512
```
bad.ll
```
; ModuleID = '/tmp/xls_fuzzer_debug.A5ZryC/test.ll'
source_filename = "__module"
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"
define i64 @__sample__main(ptr %_input_ptrs, ptr %_output_ptrs, ptr %_tmp_buffer, ptr %_events, ptr %_user_data, ptr %_runtime, i64 %_continuation_point) {
entry:
%_2 = alloca i8, align 1
%_3 = load ptr, ptr %_input_ptrs, align 8
%_x4.i.i = load i8, ptr %_3, align 1
%_4 = xor i8 %_x4.i.i, -1
%_5 = and i8 %_4, 31
%_6 = and i8 %_5, 15
%_7 = lshr i8 %_5, 1
%_8 = and i8 %_7, 15
store i8 %_8, ptr %_2, align 1
%_9 = load ptr, ptr %_output_ptrs, align 8
%_10 = icmp ne i8 %_6, %_8
store i1 %_10, ptr %_9, align 1
ret i64 0
}
```
main.c
```
#include <stdio.h>
#include <stdint.h>
uint64_t __sample__main(void** input_ptrs, void** output_ptrs, void* tmp_buffer,
void* events, void* user_data,
int64_t continuation_point);
int main (int argc, char** argv) {
uint8_t input0 = 0x0;
void* inputs[1] = {&input0};
uint8_t output0;
void* outputs[1] = {&output0};
__sample__main(inputs, outputs, NULL, NULL, NULL, 0);
printf("0x%x\n", output0);
return 0;
}
```
Found via fuzzing in the XLS project (https://github.com/google/xls)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8Vllv4zgS_jX0S0GCRB2WH_zgI95dIL292J4eDOZFoCVKZociBR6O079-QB22lCgJAlqq-urjV6XiQbRmtaB0i5I9So4rYs1Fqm1DL7SqVmdZvm3_oNrQEogBo6x4ASnglqVeGvtwlFSDkAYUbZV0kDD1Az_1UXBEwa4fn26kaTmFVsnSFlTDq5KiBkW15cbFeN9DIKKEWlFiqPLh_yOb9x2jaDclQ2kw_PevOAbOCziT0uccvIpxat5aiqKjPP8CT3Ye-QAXnIi6N0JDmPALB3JPD4yP8OlhCW7BTACOQbbmPuN3DN4PQNGTs_q9da7tYV_SN3o_aLw7Jjqd7aPWuTW4hUt6vStVmskB9Pz85zdAOLsY07oK4xPCJ86vjS9V3b1t7oUH6NBDPISZH_hBzczoPT7tf_4LzpbxEl6ZuQDRmirDpND-HUMr4r62IaqmBkU710J5GntWvAj5KjzOhL15tbBDxL-lNnD4308H1S9vnLxQj1xvSYiX-6AbZ9V_B4j28E2WltP_HAFFR0B4jfDJNC3CpxvXeWV__6YqL-nZ1v4u-Vu9HZyfauMo8bqn0dKqgubuMwrS0IEJ53nTcSM8yOvzhJIYwsmbtGZEUq9B0Y56LV4HKNpFuBvcazh_dU9p3A0euz-EOEPRLsSZV2XB8CQ6UzqGp7H3w8FGKf1Y0ooJCiyNAcVBnutuTeZ51zc4a40ChJOcidaavDVKI3yA0SqtWTKbps3PtqqomlrplQozw1ntCksMmRqVFYY11Jk6UTjJCykME5a41slbyYRBeANove9ToMKot0lXuhDc1ZVwLgsCLHNshLNaQDhFRR2KS1K66acq5vn2odk09Bb7zGeP-H6OMTz6ZMK4C7hJBSyb0Di0NwMmvX5RjsDYYaIZJn2PSRwmTAaMs6x7gfqi5pgpTfaeZj2jAW2koqNvliX-JMvNp2V91zALdQ2DLpgVTQviPm3q0P38c1XhEDSdZLMgS1HTtdO46tfHL7aLfl_95FyJmCi4Ld0SP2hTMulfUPT0mVeYqbsbLRMmjXMDHxbbVbIS4R3CO5j338TxroKDB2ZLbkx6-W8MeazH0TJdj19zjCksrkwU7af5MmG6k8odK-6ZqLpwsxYXooakiKqvsyUN4KqU5aYvRN8T7sCN7oBRdAfQKNmHKBl28PUe4bQPdB96LudB3ZdyibP3LJCOIRNW-PgdB0n4cCfCB_jvz-fnpd_gY8UAWsWEqVC3Wwc3hJMbSg7Cbd130sU4RY1VAh45fd3oJ2lFCVdGwJ1yTNTABJgLhb-ef7hr2S9amPE2oO_XgZqZiz37hWzci5S1O9_cWYnwZlVuo3ITbciKbsN0s4nTKMvw6rKltMBBFkZBSaLzZkPDsIrLCmdVTEmchnjFtjjAURgGWbgOsyD04yzenOM4TqskWOM4QXFAG8K4P15HVkxrS7frcB3EK07OlOvutoqxoK_QOV3FkuNKbV2Md7a1RnHAmTb6wWKY4XT7jelCNi3jdOHmubKKb78oguMafryhbAifOgUa4VOn8J8AAAD__1g6NgM">