xref: /llvm-project/llvm/test/Transforms/InstCombine/2008-08-05-And.ll (revision 4ab40eca080965c65802710e39adbb78c4ce7bde)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3; PR2629
4
5define void @f(ptr %x) nounwind  {
6; CHECK-LABEL: @f(
7; CHECK-NEXT:  entry:
8; CHECK-NEXT:    br label [[BB:%.*]]
9; CHECK:       bb:
10; CHECK-NEXT:    [[L1:%.*]] = load i8, ptr [[X:%.*]], align 1
11; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[L1]], -9
12; CHECK-NEXT:    [[C1:%.*]] = icmp ult i8 [[TMP0]], -3
13; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[L1]], -13
14; CHECK-NEXT:    [[C2:%.*]] = icmp ult i8 [[TMP1]], -3
15; CHECK-NEXT:    [[A1:%.*]] = and i1 [[C1]], [[C2]]
16; CHECK-NEXT:    br i1 [[A1]], label [[INCOMPATIBLE:%.*]], label [[OKAY:%.*]]
17; CHECK:       okay:
18; CHECK-NEXT:    ret void
19; CHECK:       incompatible:
20; CHECK-NEXT:    ret void
21;
22entry:
23  br label %bb
24
25bb:
26  %l1 = load i8, ptr %x, align 1
27  %s1 = sub i8 %l1, 6
28  %c1 = icmp ugt i8 %s1, 2
29  %s2 = sub i8 %l1, 10
30  %c2 = icmp ugt i8 %s2, 2
31  %a1 = and i1 %c1, %c2
32  br i1 %a1, label %incompatible, label %okay
33
34okay:
35  ret void
36
37incompatible:
38  ret void
39}
40
41define void @f_logical(ptr %x) nounwind  {
42; CHECK-LABEL: @f_logical(
43; CHECK-NEXT:  entry:
44; CHECK-NEXT:    br label [[BB:%.*]]
45; CHECK:       bb:
46; CHECK-NEXT:    [[L1:%.*]] = load i8, ptr [[X:%.*]], align 1
47; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[L1]], -9
48; CHECK-NEXT:    [[C1:%.*]] = icmp ult i8 [[TMP0]], -3
49; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[L1]], -13
50; CHECK-NEXT:    [[C2:%.*]] = icmp ult i8 [[TMP1]], -3
51; CHECK-NEXT:    [[A1:%.*]] = and i1 [[C1]], [[C2]]
52; CHECK-NEXT:    br i1 [[A1]], label [[INCOMPATIBLE:%.*]], label [[OKAY:%.*]]
53; CHECK:       okay:
54; CHECK-NEXT:    ret void
55; CHECK:       incompatible:
56; CHECK-NEXT:    ret void
57;
58entry:
59  br label %bb
60
61bb:
62  %l1 = load i8, ptr %x, align 1
63  %s1 = sub i8 %l1, 6
64  %c1 = icmp ugt i8 %s1, 2
65  %s2 = sub i8 %l1, 10
66  %c2 = icmp ugt i8 %s2, 2
67  %a1 = select i1 %c1, i1 %c2, i1 false
68  br i1 %a1, label %incompatible, label %okay
69
70okay:
71  ret void
72
73incompatible:
74  ret void
75}
76