xref: /llvm-project/llvm/test/Transforms/BDCE/intrinsics.ll (revision 3f8027fb67bc4efae9959a4d75f8f37ecf0c3985)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=bdce < %s | FileCheck %s
3
4declare i8 @llvm.umax.i8(i8, i8)
5declare i8 @llvm.umin.i8(i8, i8)
6declare i8 @llvm.smax.i8(i8, i8)
7declare i8 @llvm.smin.i8(i8, i8)
8
9define i8 @umax(i8 %x, i8 %y, i1 %a, i1 %b) {
10; CHECK-LABEL: @umax(
11; CHECK-NEXT:    [[A2:%.*]] = zext i1 false to i8
12; CHECK-NEXT:    [[B2:%.*]] = zext i1 false to i8
13; CHECK-NEXT:    [[X2:%.*]] = or i8 [[X:%.*]], [[A2]]
14; CHECK-NEXT:    [[Y2:%.*]] = or i8 [[Y:%.*]], [[B2]]
15; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.umax.i8(i8 [[X2]], i8 [[Y2]])
16; CHECK-NEXT:    [[R:%.*]] = lshr i8 [[M]], 1
17; CHECK-NEXT:    ret i8 [[R]]
18;
19  %a2 = zext i1 %a to i8
20  %b2 = zext i1 %b to i8
21  %x2 = or i8 %x, %a2
22  %y2 = or i8 %y, %b2
23  %m = call i8 @llvm.umax.i8(i8 %x2, i8 %y2)
24  %r = lshr i8 %m, 1
25  ret i8 %r
26}
27
28define i8 @umin(i8 %x, i8 %y, i1 %a, i1 %b) {
29; CHECK-LABEL: @umin(
30; CHECK-NEXT:    [[A2:%.*]] = zext i1 false to i8
31; CHECK-NEXT:    [[B2:%.*]] = zext i1 false to i8
32; CHECK-NEXT:    [[X2:%.*]] = or i8 [[X:%.*]], [[A2]]
33; CHECK-NEXT:    [[Y2:%.*]] = or i8 [[Y:%.*]], [[B2]]
34; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[X2]], i8 [[Y2]])
35; CHECK-NEXT:    [[R:%.*]] = lshr i8 [[M]], 1
36; CHECK-NEXT:    ret i8 [[R]]
37;
38  %a2 = zext i1 %a to i8
39  %b2 = zext i1 %b to i8
40  %x2 = or i8 %x, %a2
41  %y2 = or i8 %y, %b2
42  %m = call i8 @llvm.umin.i8(i8 %x2, i8 %y2)
43  %r = lshr i8 %m, 1
44  ret i8 %r
45}
46
47define i8 @smax(i8 %x, i8 %y, i1 %a, i1 %b) {
48; CHECK-LABEL: @smax(
49; CHECK-NEXT:    [[A2:%.*]] = zext i1 false to i8
50; CHECK-NEXT:    [[B2:%.*]] = zext i1 false to i8
51; CHECK-NEXT:    [[X2:%.*]] = or i8 [[X:%.*]], [[A2]]
52; CHECK-NEXT:    [[Y2:%.*]] = or i8 [[Y:%.*]], [[B2]]
53; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[X2]], i8 [[Y2]])
54; CHECK-NEXT:    [[R:%.*]] = lshr i8 [[M]], 1
55; CHECK-NEXT:    ret i8 [[R]]
56;
57  %a2 = zext i1 %a to i8
58  %b2 = zext i1 %b to i8
59  %x2 = or i8 %x, %a2
60  %y2 = or i8 %y, %b2
61  %m = call i8 @llvm.smax.i8(i8 %x2, i8 %y2)
62  %r = lshr i8 %m, 1
63  ret i8 %r
64}
65
66define i8 @smin(i8 %x, i8 %y, i1 %a, i1 %b) {
67; CHECK-LABEL: @smin(
68; CHECK-NEXT:    [[A2:%.*]] = zext i1 false to i8
69; CHECK-NEXT:    [[B2:%.*]] = zext i1 false to i8
70; CHECK-NEXT:    [[X2:%.*]] = or i8 [[X:%.*]], [[A2]]
71; CHECK-NEXT:    [[Y2:%.*]] = or i8 [[Y:%.*]], [[B2]]
72; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[X2]], i8 [[Y2]])
73; CHECK-NEXT:    [[R:%.*]] = lshr i8 [[M]], 1
74; CHECK-NEXT:    ret i8 [[R]]
75;
76  %a2 = zext i1 %a to i8
77  %b2 = zext i1 %b to i8
78  %x2 = or i8 %x, %a2
79  %y2 = or i8 %y, %b2
80  %m = call i8 @llvm.smin.i8(i8 %x2, i8 %y2)
81  %r = lshr i8 %m, 1
82  ret i8 %r
83}
84