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

    <tr>
        <th>Summary</th>
        <td>
            Dead Code Elimination Regression at -O3 (trunk vs. llvmorg-16.0.6)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    ```c
static int b = 1755906428, c;
static unsigned e;
static char f;
void bar3_(void);
void bar96_(void);
void foo(void);
static char(a)(char h, int j) { return h < 0 ? h : h >> j; }
void(d)();
static void g();
static void i() {
  e = 4;
  if (!(b >= 1755906428 && b <= 1755906428))
    bar96_();
  e = 4;
  f = a(5 ^ b, 5);
 g(f);
}
static void g(int h) {
  if (!(h >= 3))
    bar3_();
 c = !h || e;
  if (!c)
    foo();
  b = 0;
  for (; b; ++b)
 d(a);
}
int main() { i(); }
```

`clang-e90f4fc6acaf (trunk) -O3` cannot eliminate the call to foo but `clang-llvmorg-16.0.6 -O3` can.

-----------------------------------------------------------------------

`clang-e90f4fc6acaffd216e06e47df0aee6a8b5b2d4a9 -O3 case.c -S -emit-llvm -o case.ll`
<details ><summary>Emitted IR</summary><p>

```ll
; ModuleID = 'case.c'
source_filename = "case.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@e = internal unnamed_addr global i1 false, align 4
@b = internal unnamed_addr global i1 false, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
  store i1 true, ptr @e, align 4
  %1 = load i1, ptr @b, align 4
  br i1 %1, label %2, label %5

2: ; preds = %0
  tail call void @bar96_() #2
  %3 = load i1, ptr @b, align 4
  %4 = select i1 %3, i32 0, i32 3
  br label %5

5:                                                ; preds = %2, %0
  %6 = phi i32 [ 3, %0 ], [ %4, %2 ]
  store i1 true, ptr @e, align 4
  %7 = icmp eq i32 %6, 3
  br i1 %7, label %13, label %8

8:                                                ; preds = %5
 tail call void @bar3_() #2
  %9 = load i1, ptr @e, align 4
  %10 = icmp eq i32 %6, 0
  %11 = select i1 %10, i1 true, i1 %9
  br i1 %11, label %13, label %12

12:                                               ; preds = %8
  tail call void @foo() #2
  br label %13

13: ; preds = %5, %8, %12
  store i1 true, ptr @b, align 4
  ret i32 0
}

declare void @bar96_() local_unnamed_addr #1

declare void @bar3_() local_unnamed_addr #1

declare void @foo() local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 18.0.0 (git@github.com:llvm/llvm-project.git e90f4fc6acaffd216e06e47df0aee6a8b5b2d4a9)"}
```


</p></details>

-----------------------------------------------------------------------

`clang-af2ed9f794c422923414d162dd1f48d986e2d6e3 -O3 case.c -S -emit-llvm -o case.ll`
<details ><summary>Emitted IR</summary><p>

```ll
; ModuleID = 'case.c'
source_filename = "case.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@e = internal unnamed_addr global i1 false, align 4
@b = internal unnamed_addr global i1 false, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
  store i1 true, ptr @e, align 4
  %1 = load i1, ptr @b, align 4
  br i1 %1, label %2, label %6

2: ; preds = %0
  tail call void @bar96_() #2
  %3 = load i1, ptr @b, align 4
  %4 = freeze i1 %3
  store i1 true, ptr @e, align 4
  br i1 %4, label %5, label %6

5: ; preds = %2
  tail call void @bar3_() #2
  br label %6

6: ; preds = %5, %0, %2
  store i1 true, ptr @b, align 4
  ret i32 0
}

declare void @bar96_() local_unnamed_addr #1

declare void @bar3_() local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 16.0.6 (git@github.com:llvm/llvm-project.git 7cbf1a2591520c2491aa35339f227775f4d3adf6)"}
```


</p></details>

-----------------------------------------------------------------------

Bisects to 09d6fa7968e8299c1b9348dc66c1ead477fb5580
Committed by: @nikic
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWe-O27gRfxruF0IGOdTfD_4Qe9dAgBYtLg-woMiRzUSWXIrabO7pC1KSLdne5HJ3BdrrLgybIuf__EjOrGTXmX2DuCbJhiSPD7J3h9auP71g81l-Uge0Fu1D2epva5Ky4aMIeyTsQ-ekM4qaxtGSEvFIeZYkBUtjyAlsqSJisyDsm6BKU7xeUQdpaXWefWmNpqW04plA7h8IFDeLRfrmatW2d5Zmugjk0i9BHjQfvLnejc8ECkqyDbXoetvQAyViSxklYhfGH8L3ExFP9DMRG0qyx4taArkehN7RGuzaf2fNDGte-7BIKYagxmdySk1FAxknkJeDJfOoUwIpgTRkY3udkMJ_Rjn0EsC5PfdUVmFGEsgTSpInWvpYJQsu71Y1nzmH5dp5H-PDlZdznw6TT-KOveLGXBVsI8APlGRbkm1nyJoJVgtJAziWbg_wZXO3Wxu4xYaWIdOwIbApL5L0hKEbp72TR2maS0Kn5C4gc95N4-M0qWrZ7CMsWBVXKpVKBjec7ZsvXlz0D0FSRpVsmtZRrM3RNNIhdQekStY1da13kZa9o2dpdf1ybO0-4umKrdKZjNVcefTn_P3Qn0oDT5GlGGe6YhIxlXmZlKBjGfyjSna4UjT6RCM8GhfMp1E7zNf1JWZiq9FJU3cDbrZdfzxK-42Ip6ejcQ41_fiL3wqwu6wQsT35n6WVw6euJ8Eb-vdW9zV-fBwxlg1GEchGaLe9VfhcmRobecSRCiYqGKictHt0VEsna_mt9TkZ6DA6EvEBoxNkjIgPAsKXf-TLRz9K4_AVmWlQ5Z6JQx41uR-kE08aR5-4x9pSv7PmVJ9tfM3T5zSO-uZL035toto0_Wu0b_oz1_gds4HFNA5tI2vaN95V_Sy1tnRft6WsqeG0knWH_liQtdk3ND6zl3-E_ZyIXd8oZ9qGfnDOdv4Qbtq--WoaTfuvTpY1DrQaK9Mg1V37XLfKyxZAScxmezHMPy_sICDY_DjqXGvRm-VsH6w6Oeul3FpIKYGEBxfrVmpq-Iy8vENeWi_XM_nFWpZY-ydYPCVz931KqY_ByaLuxvwlbBLooT9s-nDCerWzY927BjNTxU-YSiCJA3mHNSo32i3CPSmAsmkgZr7ddyHxLvzk343HIURzzwkkaVg8HcyQ52RDxURFSfIYxskmeDLOQ5j_fXnOBiir44nivwaNkKSeVtykN1sklIvFYz4PTv5nBGcM9300iDfAULwBhrdgzt70f54Tzm9BwwewXAI9TBe3u4J_L258cTZx-PnI3QQuf3sfnYuERdzmIOdiYY-4u1OTEXn5-MvhR_C7txktunHXLQuN6dhTtbR4_wi4f-DxH_CLP8B-idxvYJbOWVP2DrvxHPZhyzY3B7y_tY6miWrcyzp6QeVaG3012h38nSUeCQAj4DEJTRs5K08n0-yjo5wRDIEONJ2T6kt0sq0bJJV9VaGNOvMrnsnzkXa4QSN16s9Lr3kapfFyvULpeovdmYjARh3bFwJbP3rNh0H12tlhdDy-DoMuXH7DAIbRa55N0vsGF7r32KA1KixPOFhGkZ-j-B4N8OfUNaau9g8B7uvL1THUe6uqlvtp_3JfF8BwgBEYzicCfLyNuLhIGmUYjY1bMse36tiMwu_rSS4B-Or70ecp9OMlG8_18Cvm_ML8z49b-jd8wXrGC3NeuOLN5rxP3-cVb_NOVdgbnPEyIL5I9i0BfUHb-bKO5yu2Yr7J2RtHYrY37tCXK9X6CtmHlcDO_3iIfkblVnvj6G_tJ0IfCT9ouqZmgsDuNHQIBHZjZ3HVKvwneyRZAeqiyopYxQAFiJjHmqegNa_iXBd5iqBTFO890nuP9H_dI6X_XT1SZRF_xXOP9DuCdPY6vuoF3_Q6ues1fNfru73AvKZdaEi_W9Gyqaf6yxW0f_Ga9L0Sfa8_3-vPRf05_FP85-rPTJUVl5AUPAGmIC64lCIRoqgAsixLqlgLqav0f6D-3JgOleuoaykrdFrJrEhzzKEoFC8LEedapaniKHWcZVWZJPlo_bY9jhVk-S1cFjFrzBejHvRa6EIU8gHXPC1YkQOL-cNhLRXDouCQ60pDDnHBKilzrpIiZZjn1YNZAwPBcgZc8JjxVZWmKpes4DLjGWOxvz-P0tSrAPfW7h9M1_W4TmMR84dwkXXTm0y7Dlkr-31HYlabznUXNmdcjetHlJpuW430aXyR4gHxC-4tdgEb0oVie3oBQ1-6FV2-TCFQPPS2Xh-cO_nCi8COwG6GoQE8VxgisAuGdwR2wfZ_BwAA__-evM0A">