[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / InstCombine / unordered-fcmp-select.ll
blob0eb729047e7100c7f7ec493953badb8db159a47e
1 ; RUN: opt -S -instcombine < %s | FileCheck %s
3 ; CHECK-LABEL: @select_max_ugt(
4 ; CHECK: %cmp.inv = fcmp ole float %a, %b
5 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
6 ; CHECK-NEXT: ret float %sel
7 define float @select_max_ugt(float %a, float %b) {
8   %cmp = fcmp ugt float %a, %b
9   %sel = select i1 %cmp, float %a, float %b
10   ret float %sel
13 ; CHECK-LABEL: @select_max_uge(
14 ; CHECK: %cmp.inv = fcmp olt float %a, %b
15 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
16 ; CHECK-NEXT: ret float %sel
17 define float @select_max_uge(float %a, float %b) {
18   %cmp = fcmp uge float %a, %b
19   %sel = select i1 %cmp, float %a, float %b
20   ret float %sel
23 ; CHECK-LABEL: @select_min_ugt(
24 ; CHECK: %cmp.inv = fcmp ole float %a, %b
25 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
26 ; CHECK-NEXT: ret float %sel
27 define float @select_min_ugt(float %a, float %b) {
28   %cmp = fcmp ugt float %a, %b
29   %sel = select i1 %cmp, float %b, float %a
30   ret float %sel
33 ; CHECK-LABEL: @select_min_uge(
34 ; CHECK: %cmp.inv = fcmp olt float %a, %b
35 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
36 ; CHECK-NEXT: ret float %sel
37 define float @select_min_uge(float %a, float %b) {
38   %cmp = fcmp uge float %a, %b
39   %sel = select i1 %cmp, float %b, float %a
40   ret float %sel
43 ; CHECK-LABEL: @select_max_ult(
44 ; CHECK: %cmp.inv = fcmp oge float %a, %b
45 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
46 ; CHECK-NEXT: ret float %sel
47 define float @select_max_ult(float %a, float %b) {
48   %cmp = fcmp ult float %a, %b
49   %sel = select i1 %cmp, float %b, float %a
50   ret float %sel
53 ; CHECK-LABEL: @select_max_ule(
54 ; CHECK: %cmp.inv = fcmp ogt float %a, %b
55 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
56 ; CHECK: ret float %sel
57 define float @select_max_ule(float %a, float %b) {
58   %cmp = fcmp ule float %a, %b
59   %sel = select i1 %cmp, float %b, float %a
60   ret float %sel
63 ; CHECK-LABEL: @select_min_ult(
64 ; CHECK: %cmp.inv = fcmp oge float %a, %b
65 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
66 ; CHECK-NEXT: ret float %sel
67 define float @select_min_ult(float %a, float %b) {
68   %cmp = fcmp ult float %a, %b
69   %sel = select i1 %cmp, float %a, float %b
70   ret float %sel
73 ; CHECK-LABEL: @select_min_ule(
74 ; CHECK: %cmp.inv = fcmp ogt float %a, %b
75 ; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
76 ; CHECK-NEXT: ret float %sel
77 define float @select_min_ule(float %a, float %b) {
78   %cmp = fcmp ule float %a, %b
79   %sel = select i1 %cmp, float %a, float %b
80   ret float %sel
83 ; CHECK-LABEL: @select_fcmp_une(
84 ; CHECK:  %cmp.inv = fcmp oeq float %a, %b
85 ; CHECK-NEXT:  %sel = select i1 %cmp.inv, float %b, float %a
86 ; CHECK-NEXT: ret float %sel
87 define float @select_fcmp_une(float %a, float %b) {
88   %cmp = fcmp une float %a, %b
89   %sel = select i1 %cmp, float %a, float %b
90   ret float %sel
93 ; CHECK-LABEL: @select_fcmp_ueq
94 ; CHECK:  %cmp.inv = fcmp one float %a, %b
95 ; CHECK-NEXT:  %sel = select i1 %cmp.inv, float %b, float %a
96 ; CHECK-NEXT: ret float %sel
97 define float @select_fcmp_ueq(float %a, float %b) {
98   %cmp = fcmp ueq float %a, %b
99   %sel = select i1 %cmp, float %a, float %b
100   ret float %sel
103 declare void @foo(i1)
105 ; CHECK-LABEL: @select_max_ugt_2_use_cmp(
106 ; CHECK: fcmp ugt
107 ; CHECK-NOT: fcmp
108 ; CHECK: ret
109 define float @select_max_ugt_2_use_cmp(float %a, float %b) {
110   %cmp = fcmp ugt float %a, %b
111   call void @foo(i1 %cmp)
112   %sel = select i1 %cmp, float %a, float %b
113   ret float %sel
116 ; CHECK-LABEL: @select_min_uge_2_use_cmp(
117 ; CHECK: fcmp uge
118 ; CHECK-NOT: fcmp
119 ; CHECK: ret
120 define float @select_min_uge_2_use_cmp(float %a, float %b) {
121   %cmp = fcmp uge float %a, %b
122   call void @foo(i1 %cmp)
123   %sel = select i1 %cmp, float %b, float %a
124   ret float %sel