xref: /llvm-project/llvm/test/Transforms/InstCombine/pr49688.ll (revision a105877646d68e48cdeeeadd9d1e075dc3c5d68d)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
4; %cmp should not vanish
5define i1 @f(i32 %i1) {
6; CHECK-LABEL: @f(
7; CHECK-NEXT:  entry:
8; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[I1:%.*]], 0
9; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 7, [[I1]]
10; CHECK-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[I1]], [[SHR]]
11; CHECK-NEXT:    [[I2:%.*]] = select i1 [[CMP]], i1 true, i1 [[CMP4]]
12; CHECK-NEXT:    ret i1 [[I2]]
13;
14entry:
15  %cmp = icmp slt i32 %i1, 0
16  %shr = ashr i32 7, %i1
17  %cmp4 = icmp sgt i32 %i1, %shr
18  %i2 = select i1 %cmp, i1 true, i1 %cmp4
19  ret i1 %i2
20}
21
22; %cmp should not vanish
23define i32 @f2(i32 signext %g, i32 zeroext %h) {
24; CHECK-LABEL: @f2(
25; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[G:%.*]], 0
26; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 7, [[H:%.*]]
27; CHECK-NEXT:    [[CMP1:%.*]] = icmp sgt i32 [[G]], [[SHR]]
28; CHECK-NEXT:    [[DOT0:%.*]] = select i1 [[CMP]], i1 true, i1 [[CMP1]]
29; CHECK-NEXT:    [[LOR_EXT:%.*]] = zext i1 [[DOT0]] to i32
30; CHECK-NEXT:    ret i32 [[LOR_EXT]]
31;
32  %cmp = icmp slt i32 %g, 0
33  %shr = ashr i32 7, %h
34  %cmp1 = icmp sgt i32 %g, %shr
35  %.0 = select i1 %cmp, i1 true, i1 %cmp1
36  %lor.ext = zext i1 %.0 to i32
37  ret i32 %lor.ext
38}
39