[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / InstSimplify / icmp-bool-constant.ll
blob0b7a8297c682cff5513942ddc724390c0e3afd0c
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -instsimplify -S | FileCheck %s
4 ; Test all integer predicates with bool types and true/false constants.
5 ; Use vectors to provide test coverage that is not duplicated in other folds.
7 define <2 x i1> @eq_t(<2 x i1> %a) {
8 ; CHECK-LABEL: @eq_t(
9 ; CHECK-NEXT:    ret <2 x i1> %a
11   %r = icmp eq <2 x i1> %a, <i1 true, i1 true>
12   ret <2 x i1> %r
15 define <2 x i1> @eq_t_undef_elt(<2 x i1> %a) {
16 ; CHECK-LABEL: @eq_t_undef_elt(
17 ; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]
19   %r = icmp eq <2 x i1> %a, <i1 undef, i1 true>
20   ret <2 x i1> %r
23 define <2 x i1> @eq_f(<2 x i1> %a) {
24 ; CHECK-LABEL: @eq_f(
25 ; CHECK-NEXT:    [[R:%.*]] = icmp eq <2 x i1> %a, zeroinitializer
26 ; CHECK-NEXT:    ret <2 x i1> [[R]]
28   %r = icmp eq <2 x i1> %a, <i1 false, i1 false>
29   ret <2 x i1> %r
32 define <2 x i1> @ne_t(<2 x i1> %a) {
33 ; CHECK-LABEL: @ne_t(
34 ; CHECK-NEXT:    [[R:%.*]] = icmp ne <2 x i1> %a, <i1 true, i1 true>
35 ; CHECK-NEXT:    ret <2 x i1> [[R]]
37   %r = icmp ne <2 x i1> %a, <i1 true, i1 true>
38   ret <2 x i1> %r
41 define <2 x i1> @ne_f(<2 x i1> %a) {
42 ; CHECK-LABEL: @ne_f(
43 ; CHECK-NEXT:    ret <2 x i1> %a
45   %r = icmp ne <2 x i1> %a, <i1 false, i1 false>
46   ret <2 x i1> %r
49 define <2 x i1> @ugt_t(<2 x i1> %a) {
50 ; CHECK-LABEL: @ugt_t(
51 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
53   %r = icmp ugt <2 x i1> %a, <i1 true, i1 true>
54   ret <2 x i1> %r
57 define <2 x i1> @ugt_t_undef_elt(<2 x i1> %a) {
58 ; CHECK-LABEL: @ugt_t_undef_elt(
59 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
61   %r = icmp ugt <2 x i1> %a, <i1 true, i1 undef>
62   ret <2 x i1> %r
65 define <2 x i1> @ugt_f(<2 x i1> %a) {
66 ; CHECK-LABEL: @ugt_f(
67 ; CHECK-NEXT:    ret <2 x i1> %a
69   %r = icmp ugt <2 x i1> %a, <i1 false, i1 false>
70   ret <2 x i1> %r
73 define <2 x i1> @ult_t(<2 x i1> %a) {
74 ; CHECK-LABEL: @ult_t(
75 ; CHECK-NEXT:    [[R:%.*]] = icmp ult <2 x i1> %a, <i1 true, i1 true>
76 ; CHECK-NEXT:    ret <2 x i1> [[R]]
78   %r = icmp ult <2 x i1> %a, <i1 true, i1 true>
79   ret <2 x i1> %r
82 define <2 x i1> @ult_f(<2 x i1> %a) {
83 ; CHECK-LABEL: @ult_f(
84 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
86   %r = icmp ult <2 x i1> %a, <i1 false, i1 false>
87   ret <2 x i1> %r
90 define <2 x i1> @sgt_t(<2 x i1> %a) {
91 ; CHECK-LABEL: @sgt_t(
92 ; CHECK-NEXT:    [[R:%.*]] = icmp sgt <2 x i1> %a, <i1 true, i1 true>
93 ; CHECK-NEXT:    ret <2 x i1> [[R]]
95   %r = icmp sgt <2 x i1> %a, <i1 true, i1 true>
96   ret <2 x i1> %r
99 define <2 x i1> @sgt_f(<2 x i1> %a) {
100 ; CHECK-LABEL: @sgt_f(
101 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
103   %r = icmp sgt <2 x i1> %a, <i1 false, i1 false>
104   ret <2 x i1> %r
107 define <2 x i1> @slt_t(<2 x i1> %a) {
108 ; CHECK-LABEL: @slt_t(
109 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
111   %r = icmp slt <2 x i1> %a, <i1 true, i1 true>
112   ret <2 x i1> %r
115 define <2 x i1> @slt_f(<2 x i1> %a) {
116 ; CHECK-LABEL: @slt_f(
117 ; CHECK-NEXT:    ret <2 x i1> %a
119   %r = icmp slt <2 x i1> %a, <i1 false, i1 false>
120   ret <2 x i1> %r
123 define <2 x i1> @uge_t(<2 x i1> %a) {
124 ; CHECK-LABEL: @uge_t(
125 ; CHECK-NEXT:    ret <2 x i1> %a
127   %r = icmp uge <2 x i1> %a, <i1 true, i1 true>
128   ret <2 x i1> %r
131 define <2 x i1> @uge_f(<2 x i1> %a) {
132 ; CHECK-LABEL: @uge_f(
133 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
135   %r = icmp uge <2 x i1> %a, <i1 false, i1 false>
136   ret <2 x i1> %r
139 define <2 x i1> @ule_t(<2 x i1> %a) {
140 ; CHECK-LABEL: @ule_t(
141 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
143   %r = icmp ule <2 x i1> %a, <i1 true, i1 true>
144   ret <2 x i1> %r
147 define <2 x i1> @ule_f(<2 x i1> %a) {
148 ; CHECK-LABEL: @ule_f(
149 ; CHECK-NEXT:    [[R:%.*]] = icmp ule <2 x i1> %a, zeroinitializer
150 ; CHECK-NEXT:    ret <2 x i1> [[R]]
152   %r = icmp ule <2 x i1> %a, <i1 false, i1 false>
153   ret <2 x i1> %r
156 define <2 x i1> @sge_t(<2 x i1> %a) {
157 ; CHECK-LABEL: @sge_t(
158 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
160   %r = icmp sge <2 x i1> %a, <i1 true, i1 true>
161   ret <2 x i1> %r
164 define <2 x i1> @sge_t_undef_elt(<2 x i1> %a) {
165 ; CHECK-LABEL: @sge_t_undef_elt(
166 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
168   %r = icmp sge <2 x i1> %a, <i1 true, i1 undef>
169   ret <2 x i1> %r
172 define <2 x i1> @sge_f(<2 x i1> %a) {
173 ; CHECK-LABEL: @sge_f(
174 ; CHECK-NEXT:    [[R:%.*]] = icmp sge <2 x i1> %a, zeroinitializer
175 ; CHECK-NEXT:    ret <2 x i1> [[R]]
177   %r = icmp sge <2 x i1> %a, <i1 false, i1 false>
178   ret <2 x i1> %r
181 define <2 x i1> @sle_t(<2 x i1> %a) {
182 ; CHECK-LABEL: @sle_t(
183 ; CHECK-NEXT:    ret <2 x i1> %a
185   %r = icmp sle <2 x i1> %a, <i1 true, i1 true>
186   ret <2 x i1> %r
189 define <2 x i1> @sle_f(<2 x i1> %a) {
190 ; CHECK-LABEL: @sle_f(
191 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
193   %r = icmp sle <2 x i1> %a, <i1 false, i1 false>
194   ret <2 x i1> %r