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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimizations on code that compares integer sign bits
        </td>
    </tr>

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

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

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

<pre>
    Given this code:
```c++
bool diffSignBit(int x, int y) {
    return x < 0 && y >= 0 || x >= 0 && y < 0;
}
```

Output with `-O3`:
```llvm
define dso_local noundef zeroext i1 @diffSignBit(int, int)(i32 noundef %x, i32 noundef %y) local_unnamed_addr {
entry:
  %cmp = icmp slt i32 %x, 0
  %cmp1 = icmp sgt i32 %y, -1
  %or.cond = and i1 %cmp, %cmp1
  br i1 %or.cond, label %lor.end, label %lor.rhs

lor.rhs:
  %cmp2 = icmp sgt i32 %x, -1
  %cmp3 = icmp slt i32 %y, 0
  %0 = and i1 %cmp2, %cmp3
  br label %lor.end

lor.end:
  %1 = phi i1 [ %0, %lor.rhs ], [ true, %entry ]
  ret i1 %1
}
```

If it is written as the equivalent of `!sameSignBit(x, y)`,
```c++
bool diffSignBit(int x, int y) {
    return !(x >= 0 && y >= 0 || x < 0 && y < 0);
}
```
... we get the desired output:
```llvm
define dso_local noundef zeroext i1 @diffSignBit(int, int)(i32 noundef %x, i32 noundef %y) local_unnamed_addr {
entry:
  %0 = xor i32 %y, %x
  %lnot = icmp slt i32 %0, 0
  ret i1 %lnot
}
```

See:
https://compiler-explorer.com/z/vWv38bGzT
https://alive2.llvm.org/ce/z/VWL1FE
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVU2P4jgQ_TXmUgI5FcLHIQegh9FKO5rDjHaOIycuEq8cO2s7NPSvX9mEphH0bS8rWcKuelWuV7yKhfeqMUQlK7aseJmIIbTWld9EQyaIn46otYOnSWXlufyqjmQgtMpDbSWxfMP4hi34ZdUMt3HxTWWtBqkOhx-qMVsVGK6UCXBiuIO4OTNcA1tGKACAozA4Aydg-Q44MFwwXMAZWP6F5S_Rstyx5S4BrpYbZgec5TEVW758LCfu-eb7EPohwKsKLbAFn37Po-u-cK2PHeMbSQdlCKS3v7WthQZjByPpAG_kLJ0CqAzYnD_wGlkxXMdzju9xDIsL5XtbYp9u-D0YIzqSv4WUbmwImeDOlwIhouuuh8hZxY3XIWW7ZuYfUNkHWPMOO0fYNLvirJvV1sgEFUYmSik6wsY8CVu50TdGRL8WFelo09bN6InNtf7S9evhjgY-LfB0X2Dd9flTvuc7vvyRAd4o5FcKDxW_VxcPt-ouvetbldIV23TFmG_kAqx4SZZiC8ENNHrT35V8MZWjMBaUfSbIPw6gAigPr06FQAaEh9AS0D-DOgpNJoA9RKkyzLzo6Ca11KkonuTc_ZejxzCLFzydr8cZ3D0OIK4_m8HZbAavBA2FRFOSV44k2DSX_6dBvEjuZN2dIlPqEaGNDU-1y2_avSkkoj8TyQ8aP65tCH0aI9wz3Ne265UmN6VTr62jOJodw_0bw_3x1zFfVV_ffj5ECa2OhLPY3Jl1TcxDY9Bfv_7M9l8msszlOl-LCZXZcl7MF_PVik_aUqLgdb7CakmVlFm1EMUhX9UCcbWsDwWfqBI5FnyOc55jhnyGyLN6kR2qWgiBq4zNOXVC6ffbJ8r7gcosX2bZfJLm06e3B9HQKyQvQ4xPkStj0LQaGs_mXCsf_C1NUEFT-U15H8XUB9WpNxGUNR6sSa8ThFYEiC0TjnwUBjXkID53UKngJ4PT5X2nGhXaoRqbmsR4-Zn2zv5NdWC4TwV6hvuRwbHEfwMAAP__3g8UHQ">