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

    <tr>
        <th>Summary</th>
        <td>
            Missed Optimization: comparing the result of a disjoint or with a constant can be simplified
        </td>
    </tr>

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

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

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

<pre>
    godbolt: https://godbolt.org/z/KhbTx6jM5
Alive2: https://alive2.llvm.org/ce/z/dYuU3i
```llvm
define i1 @src1(ptr readonly captures(none) %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds nuw i8, ptr %0, i64 1
  %3 = load i8, ptr %2, align 1
  %4 = zext i8 %3 to i32
  %5 = shl nuw nsw i32 %4, 8
  %6 = getelementptr inbounds nuw i8, ptr %0, i64 2
  %7 = load i8, ptr %6, align 1
  %8 = zext i8 %7 to i32
  %9 = or disjoint i32 %5, %8
  %10 = icmp ne i32 %9, 256
  ret i1 %10
}

define i1 @tgt1(ptr readonly captures(none) %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds nuw i8, ptr %0, i64 1
  %3 = load i8, ptr %2, align 1
  %4 = getelementptr inbounds nuw i8, ptr %0, i64 2
  %5 = load i8, ptr %4, align 1
  %6 = icmp ne i8 %3, 1
  %7 = icmp ne i8 %5, 0
 %8 = or i1 %6, %7
  ret i1 %8
}

define i1 @src2(ptr readonly captures(none) %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds nuw i8, ptr %0, i64 8
  %3 = load i8, ptr %2, align 1
  %4 = zext i8 %3 to i16
  %5 = shl nuw i16 %4, 8
  %6 = getelementptr inbounds nuw i8, ptr %0, i64 9
  %7 = load i8, ptr %6, align 1
  %8 = zext i8 %7 to i16
  %9 = or disjoint i16 %5, %8
  %.not103170.i = icmp eq i16 %9, 0
  ret i1 %.not103170.i
}

define i1 @tgt2(ptr readonly captures(none) %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds nuw i8, ptr %0, i64 8
  %3 = load i8, ptr %2, align 1
  %4 = getelementptr inbounds nuw i8, ptr %0, i64 9
  %5 = load i8, ptr %4, align 1
  %6 = or i8 %5, %3
 %.not103170.i = icmp eq i8 %6, 0
  ret i1 %.not103170.i
}
```
The first pattern is found here: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/4eda6e7d8f48cfd3eadcc8778a1a557e670e2f08/bench/openssl/optimized/bad_dtls_test.ll#L685-L693
The second pattern is found here: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/4eda6e7d8f48cfd3eadcc8778a1a557e670e2f08/bench/curl/optimized/doh.ll#L1139-L1147
Although in this case, the result of ```or disjoint``` is used else where, and thus probably cannot be optimized.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVk1vIykQ_TX4UopFQ3_Qhz54EvmyGe1l9rCniIaymywGL9Bxkl-_ov2VeJLRTpTDjGTZreZVUcV7z5SM0awdYkeqL6S6mckxDT5019IptNbOeq-furXXvbeJ8AUMKW0j4QvCloQtDwtzH9aELZ8JW_4x9N8e6_uvFaGLhTUPyL6PktP7ubUPm0OkwkO4_nv8ixtCF6Sm-09GEbrQuDIOwRRAShqDKggT2xQgoNTe2SdQcpvGgJEw4bxDwlogrKL513ol7d3onNygvpNaByCMUyDNF0IXkHEMCL-BNSa0uEGXcmrjej86HcGNOzCCsGvIr_dZr8HUJRTHeD7FWy_1ayTLz9KatTtjywn7jI8JjNgHJw-GsyOgmgBxsNPOLu7y4hSZs4kjrP5Yzadtmndqrt-oWVzW3FzU3E4AH0CbeO-NS8eaq5wtZzgiCzpBjdpsITO6h7UZlvfOqIBpYjqDsxaam_x9IYK0Tr-9CD5OXvXOXuUbe9WvD3yvuYwrXkvhNWIiLh__mX8fDrTUB1KbC7rEu2zFoNgvwZb4RMsW9duWNUX9aXZtP9Gu53rfsOu-5u_sOnc-FZQXDZ2bs0rw32NAe5LJCx28DPqRgX97SXyczp83cHafeMkRP5jzfYrESSD_j6HjpUvo4tuAsDIhJtjKlDA4MBFWuT0YMOAbs4BJw9jPld_kezypx-enHWHLfH9f-W266tGpYSPDP4Qte-t7wpYlalljo8WqFGqlOUqtlGgaIQtZVQ3WDUW2oiJH5GjCln6LLkY7PSWzMc-o86rUdzrZeJcwprm1hPHbWlRXt3XLD71EVN7pX6sZNYbLTrQfDvUXBW-vbouibKZRKg1-XA9gHKTBRFAyYuY1DQgB42gT-BWcCHzh7NO73PMYUQPaiLCbGs9acxrSMEbYBt_LfjKhcz5Bj3CqbD7THdctb-UMu6IpWVPxlpezoVtRXJW6b3nNaqmqVkpBVaF6XVes6ZmcmY5RVlHOeCEKUZVz0cqelg02SqLSLSclxY009jQQzkyMI3YFZzUTMyt7tHGaTxlzuINplTCWx9XQTZT04zqSkloTUzynSSZZ7L6amJv-c9-KTMa7zLfym60Mxq0vjlCe_xJ9gJ1JA0hQ3sUkXcpHk88lms3WmpVBPRuD7X6gnWl8PQhnG_w9qkTYcmohErY89PjQsf8CAAD__8bKWi4">