xref: /llvm-project/llvm/test/Transforms/InstCombine/pr38677.ll (revision deab451e7a7f2dff42097049274637052c87eabd)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=instcombine -S %s | FileCheck %s
3
4@A = extern_weak global i32, align 4
5@B = extern_weak global i32, align 4
6
7define i32 @foo(i1 %which, ptr %dst) {
8; CHECK-LABEL: @foo(
9; CHECK-NEXT:  entry:
10; CHECK-NEXT:    br i1 true, label [[FINAL:%.*]], label [[DELAY:%.*]]
11; CHECK:       delay:
12; CHECK-NEXT:    br label [[FINAL]]
13; CHECK:       final:
14; CHECK-NEXT:    store i1 false, ptr [[DST:%.*]], align 1
15; CHECK-NEXT:    ret i32 1
16;
17entry:
18  br i1 true, label %final, label %delay
19
20delay:                                            ; preds = %entry
21  %cmp = icmp eq ptr @A, @B
22  br label %final
23
24final:                                            ; preds = %delay, %entry
25  %use2 = phi i1 [ false, %entry ], [ %cmp, %delay ]
26  %value = select i1 %use2, i32 2, i32 1
27  %B7 = mul i32 %value, 2147483647
28  %C3 = icmp ule i32 %B7, 0
29  store i1 %C3, ptr %dst
30  ret i32 %value
31}
32