xref: /llvm-project/llvm/test/Transforms/ConstraintElimination/zext.ll (revision 13ffde316a8541d77116bd18f73efada236617f3)
1a14a59f2SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
28ebb3eacSBjorn Pettersson; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
3a14a59f2SFlorian Hahn
40bcfd4cbSFlorian Hahndefine i1 @uge_zext(i8 %x, i16 %y) {
5a14a59f2SFlorian Hahn; CHECK-LABEL: @uge_zext(
6a14a59f2SFlorian Hahn; CHECK-NEXT:  entry:
70bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_EXT:%.*]] = zext i8 [[X:%.*]] to i16
80bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y:%.*]]
9a14a59f2SFlorian Hahn; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
10a14a59f2SFlorian Hahn; CHECK:       bb1:
110bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i16 [[X_EXT]], 10
120bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_1:%.*]] = xor i1 true, [[C_2]]
130bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_3:%.*]] = icmp uge i16 [[Y]], [[X_EXT]]
140bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
150bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_4:%.*]] = icmp uge i16 10, [[X_EXT]]
160bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
170bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_3]]
18a14a59f2SFlorian Hahn; CHECK:       bb2:
190bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_4:%.*]] = xor i1 true, false
200bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_5:%.*]] = icmp uge i16 [[X_EXT]], 10
210bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
220bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_6:%.*]] = icmp uge i16 10, [[X_EXT]]
230bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_6:%.*]] = xor i1 [[R_5]], [[C_6]]
240bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_6]]
25a14a59f2SFlorian Hahn;
26a14a59f2SFlorian Hahnentry:
270bcfd4cbSFlorian Hahn  %x.ext = zext i8 %x to i16
280bcfd4cbSFlorian Hahn  %c.1 = icmp uge i16 %x.ext, %y
29a14a59f2SFlorian Hahn  br i1 %c.1, label %bb1, label %bb2
30a14a59f2SFlorian Hahn
31a14a59f2SFlorian Hahnbb1:
320bcfd4cbSFlorian Hahn  %t.1 = icmp uge i16 %x.ext, %y
330bcfd4cbSFlorian Hahn  %c.2 = icmp uge i16 %x.ext, 10
340bcfd4cbSFlorian Hahn  %r.1 = xor i1 %t.1, %c.2
350bcfd4cbSFlorian Hahn  %c.3 = icmp uge i16 %y, %x.ext
360bcfd4cbSFlorian Hahn  %r.2 = xor i1 %r.1, %c.3
370bcfd4cbSFlorian Hahn  %c.4 = icmp uge i16 10, %x.ext
380bcfd4cbSFlorian Hahn  %r.3 = xor i1 %r.2, %c.4
390bcfd4cbSFlorian Hahn  ret i1 %r.3
40a14a59f2SFlorian Hahn
41a14a59f2SFlorian Hahnbb2:
420bcfd4cbSFlorian Hahn  %t.2 = icmp uge i16 %y, %x.ext
430bcfd4cbSFlorian Hahn  %f.1 = icmp uge i16 %x.ext, %y
440bcfd4cbSFlorian Hahn  %r.4 = xor i1 %t.2, %f.1
450bcfd4cbSFlorian Hahn  %c.5 = icmp uge i16 %x.ext, 10
460bcfd4cbSFlorian Hahn  %r.5 = xor i1 %r.4, %c.5
470bcfd4cbSFlorian Hahn  %c.6 = icmp uge i16 10, %x.ext
480bcfd4cbSFlorian Hahn  %r.6 = xor i1 %r.5, %c.6
490bcfd4cbSFlorian Hahn  ret i1 %r.6
50a14a59f2SFlorian Hahn}
51a14a59f2SFlorian Hahn
520bcfd4cbSFlorian Hahndefine i1 @uge_compare_short_and_extended(i8 %x, i8 %y) {
53a14a59f2SFlorian Hahn; CHECK-LABEL: @uge_compare_short_and_extended(
54a14a59f2SFlorian Hahn; CHECK-NEXT:  entry:
550bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
560bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_EXT:%.*]] = zext i8 [[X]] to i16
570bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[Y_EXT:%.*]] = zext i8 [[Y]] to i16
58a14a59f2SFlorian Hahn; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
59a14a59f2SFlorian Hahn; CHECK:       bb1:
600bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i16 [[X_EXT]], 10
610bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_1:%.*]] = xor i1 true, [[C_2]]
620bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_3:%.*]] = icmp sge i16 [[Y_EXT]], [[X_EXT]]
630bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
640bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_4:%.*]] = icmp uge i16 10, [[X_EXT]]
650bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
660bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_3]]
67a14a59f2SFlorian Hahn; CHECK:       bb2:
680bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_4:%.*]] = xor i1 true, false
690bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_5:%.*]] = icmp uge i16 [[X_EXT]], 10
700bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
710bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_6:%.*]] = icmp uge i16 10, [[X_EXT]]
720bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_6:%.*]] = xor i1 [[R_5]], [[C_6]]
730bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_6]]
74a14a59f2SFlorian Hahn;
75a14a59f2SFlorian Hahnentry:
760bcfd4cbSFlorian Hahn  %c.1 = icmp uge i8 %x, %y
770bcfd4cbSFlorian Hahn  %x.ext = zext i8 %x to i16
780bcfd4cbSFlorian Hahn  %y.ext = zext i8 %y to i16
79a14a59f2SFlorian Hahn  br i1 %c.1, label %bb1, label %bb2
80a14a59f2SFlorian Hahn
81a14a59f2SFlorian Hahnbb1:
820bcfd4cbSFlorian Hahn  %t.1 = icmp uge i16 %x.ext, %y.ext
830bcfd4cbSFlorian Hahn  %c.2 = icmp uge i16 %x.ext, 10
840bcfd4cbSFlorian Hahn  %r.1 = xor i1 %t.1, %c.2
850bcfd4cbSFlorian Hahn  %c.3 = icmp sge i16 %y.ext, %x.ext
860bcfd4cbSFlorian Hahn  %r.2 = xor i1 %r.1, %c.3
870bcfd4cbSFlorian Hahn  %c.4 = icmp uge i16 10, %x.ext
880bcfd4cbSFlorian Hahn  %r.3 = xor i1 %r.2, %c.4
890bcfd4cbSFlorian Hahn  ret i1 %r.3
90a14a59f2SFlorian Hahn
91a14a59f2SFlorian Hahnbb2:
920bcfd4cbSFlorian Hahn  %t.2 = icmp uge i16 %y.ext, %x.ext
930bcfd4cbSFlorian Hahn  %f.1 = icmp uge i16 %x.ext, %y.ext
940bcfd4cbSFlorian Hahn  %r.4 = xor i1 %t.2, %f.1
950bcfd4cbSFlorian Hahn  %c.5 = icmp uge i16 %x.ext, 10
960bcfd4cbSFlorian Hahn  %r.5 = xor i1 %r.4, %c.5
970bcfd4cbSFlorian Hahn  %c.6 = icmp uge i16 10, %x.ext
980bcfd4cbSFlorian Hahn  %r.6 = xor i1 %r.5, %c.6
990bcfd4cbSFlorian Hahn  ret i1 %r.6
100a14a59f2SFlorian Hahn}
101a14a59f2SFlorian Hahn
1020bcfd4cbSFlorian Hahndefine i1 @uge_zext_add(i8 %x, i16 %y) {
103a14a59f2SFlorian Hahn; CHECK-LABEL: @uge_zext_add(
104a14a59f2SFlorian Hahn; CHECK-NEXT:  entry:
1050bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_ADD_1:%.*]] = add nuw nsw i8 [[X:%.*]], 1
1060bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_ADD_1_EXT:%.*]] = zext i8 [[X_ADD_1]] to i16
1070bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_EXT:%.*]] = zext i8 [[X]] to i16
1080bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_1:%.*]] = icmp uge i16 [[X_ADD_1_EXT]], [[Y:%.*]]
109a14a59f2SFlorian Hahn; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
110a14a59f2SFlorian Hahn; CHECK:       bb1:
1110bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[T_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y]]
1120bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_2:%.*]] = icmp uge i16 [[X_EXT]], 10
1130bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_1:%.*]] = xor i1 [[T_1]], [[C_2]]
1140bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_3:%.*]] = icmp uge i16 [[Y]], [[X_EXT]]
1150bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
1160bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_4:%.*]] = icmp uge i16 10, [[X_EXT]]
1170bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
1180bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_3]]
119a14a59f2SFlorian Hahn; CHECK:       bb2:
1200bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_4:%.*]] = xor i1 true, false
1210bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_5:%.*]] = icmp uge i16 [[X_EXT]], 10
1220bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
1230bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_6:%.*]] = icmp uge i16 10, [[X_EXT]]
1240bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_6:%.*]] = xor i1 [[R_5]], [[C_6]]
1250bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_6]]
126a14a59f2SFlorian Hahn;
127a14a59f2SFlorian Hahnentry:
1280bcfd4cbSFlorian Hahn  %x.add.1 = add nuw nsw i8 %x, 1
1290bcfd4cbSFlorian Hahn  %x.add.1.ext = zext i8 %x.add.1 to i16
1300bcfd4cbSFlorian Hahn  %x.ext = zext i8 %x to i16
1310bcfd4cbSFlorian Hahn  %c.1 = icmp uge i16 %x.add.1.ext, %y
132a14a59f2SFlorian Hahn  br i1 %c.1, label %bb1, label %bb2
133a14a59f2SFlorian Hahn
134a14a59f2SFlorian Hahnbb1:
1350bcfd4cbSFlorian Hahn  %t.1 = icmp uge i16 %x.ext, %y
1360bcfd4cbSFlorian Hahn  %c.2 = icmp uge i16 %x.ext, 10
1370bcfd4cbSFlorian Hahn  %r.1 = xor i1 %t.1, %c.2
1380bcfd4cbSFlorian Hahn  %c.3 = icmp uge i16 %y, %x.ext
1390bcfd4cbSFlorian Hahn  %r.2 = xor i1 %r.1, %c.3
1400bcfd4cbSFlorian Hahn  %c.4 = icmp uge i16 10, %x.ext
1410bcfd4cbSFlorian Hahn  %r.3 = xor i1 %r.2, %c.4
1420bcfd4cbSFlorian Hahn  ret i1 %r.3
143a14a59f2SFlorian Hahn
144a14a59f2SFlorian Hahnbb2:
1450bcfd4cbSFlorian Hahn  %t.2 = icmp uge i16 %y, %x.ext
1460bcfd4cbSFlorian Hahn  %f.1 = icmp uge i16 %x.ext, %y
1470bcfd4cbSFlorian Hahn  %r.4 = xor i1 %t.2, %f.1
1480bcfd4cbSFlorian Hahn  %c.5 = icmp uge i16 %x.ext, 10
1490bcfd4cbSFlorian Hahn  %r.5 = xor i1 %r.4, %c.5
1500bcfd4cbSFlorian Hahn  %c.6 = icmp uge i16 10, %x.ext
1510bcfd4cbSFlorian Hahn  %r.6 = xor i1 %r.5, %c.6
1520bcfd4cbSFlorian Hahn  ret i1 %r.6
153a14a59f2SFlorian Hahn}
154a14a59f2SFlorian Hahn
1550bcfd4cbSFlorian Hahndefine i1 @sge_zext(i8 %x, i16 %y) {
156a14a59f2SFlorian Hahn; CHECK-LABEL: @sge_zext(
157a14a59f2SFlorian Hahn; CHECK-NEXT:  entry:
1580bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_EXT:%.*]] = zext i8 [[X:%.*]] to i16
1590bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_1:%.*]] = icmp sge i16 [[X_EXT]], [[Y:%.*]]
160a14a59f2SFlorian Hahn; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
161a14a59f2SFlorian Hahn; CHECK:       bb1:
1620bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_2:%.*]] = icmp sge i16 [[X_EXT]], 10
1630a781d98SFlorian Hahn; CHECK-NEXT:    [[R_1:%.*]] = xor i1 true, [[C_2]]
1640bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_3:%.*]] = icmp sge i16 [[Y]], [[X_EXT]]
1650bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
1660bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_4:%.*]] = icmp sge i16 10, [[X_EXT]]
1670bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
1680bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_3]]
169a14a59f2SFlorian Hahn; CHECK:       bb2:
1700a781d98SFlorian Hahn; CHECK-NEXT:    [[R_4:%.*]] = xor i1 true, false
1710bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_5:%.*]] = icmp sge i16 [[X_EXT]], 10
1720bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
1730bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_6:%.*]] = icmp sge i16 10, [[X_EXT]]
1740bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_6:%.*]] = xor i1 [[R_5]], [[C_6]]
1750bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_6]]
176a14a59f2SFlorian Hahn;
177a14a59f2SFlorian Hahnentry:
1780bcfd4cbSFlorian Hahn  %x.ext = zext i8 %x to i16
1790bcfd4cbSFlorian Hahn  %c.1 = icmp sge i16 %x.ext, %y
180a14a59f2SFlorian Hahn  br i1 %c.1, label %bb1, label %bb2
181a14a59f2SFlorian Hahn
182a14a59f2SFlorian Hahnbb1:
1830bcfd4cbSFlorian Hahn  %t.1 = icmp sge i16 %x.ext, %y
1840bcfd4cbSFlorian Hahn  %c.2 = icmp sge i16 %x.ext, 10
1850bcfd4cbSFlorian Hahn  %r.1 = xor i1 %t.1, %c.2
1860bcfd4cbSFlorian Hahn  %c.3 = icmp sge i16 %y, %x.ext
1870bcfd4cbSFlorian Hahn  %r.2 = xor i1 %r.1, %c.3
1880bcfd4cbSFlorian Hahn  %c.4 = icmp sge i16 10, %x.ext
1890bcfd4cbSFlorian Hahn  %r.3 = xor i1 %r.2, %c.4
1900bcfd4cbSFlorian Hahn  ret i1 %r.3
191a14a59f2SFlorian Hahn
192a14a59f2SFlorian Hahnbb2:
1930bcfd4cbSFlorian Hahn  %t.2 = icmp sge i16 %y, %x.ext
1940bcfd4cbSFlorian Hahn  %f.1 = icmp sge i16 %x.ext, %y
1950bcfd4cbSFlorian Hahn  %r.4 = xor i1 %t.2, %f.1
1960bcfd4cbSFlorian Hahn  %c.5 = icmp sge i16 %x.ext, 10
1970bcfd4cbSFlorian Hahn  %r.5 = xor i1 %r.4, %c.5
1980bcfd4cbSFlorian Hahn  %c.6 = icmp sge i16 10, %x.ext
1990bcfd4cbSFlorian Hahn  %r.6 = xor i1 %r.5, %c.6
2000bcfd4cbSFlorian Hahn  ret i1 %r.6
201a14a59f2SFlorian Hahn}
202a14a59f2SFlorian Hahn
203a14a59f2SFlorian Hahn
2040bcfd4cbSFlorian Hahndefine i1 @sge_compare_short_and_extended(i8 %x, i8 %y) {
205a14a59f2SFlorian Hahn; CHECK-LABEL: @sge_compare_short_and_extended(
206a14a59f2SFlorian Hahn; CHECK-NEXT:  entry:
2070bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_1:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
2080bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[X_EXT:%.*]] = zext i8 [[X]] to i16
2090bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[Y_EXT:%.*]] = zext i8 [[Y]] to i16
210a14a59f2SFlorian Hahn; CHECK-NEXT:    br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
211a14a59f2SFlorian Hahn; CHECK:       bb1:
2120bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[T_1:%.*]] = icmp sge i16 [[X_EXT]], [[Y_EXT]]
2130bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_2:%.*]] = icmp sge i16 [[X_EXT]], 10
2140bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_1:%.*]] = xor i1 [[T_1]], [[C_2]]
2150bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_3:%.*]] = icmp sge i16 [[Y_EXT]], [[X_EXT]]
2160bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
2170bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_4:%.*]] = icmp sge i16 10, [[X_EXT]]
2180bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
2190bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_3]]
220a14a59f2SFlorian Hahn; CHECK:       bb2:
2210bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[T_2:%.*]] = icmp sge i16 [[Y_EXT]], [[X_EXT]]
2220bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[F_1:%.*]] = icmp sge i16 [[X_EXT]], [[Y_EXT]]
2230bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_4:%.*]] = xor i1 [[T_2]], [[F_1]]
2240bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_5:%.*]] = icmp sge i16 [[X_EXT]], 10
2250bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
2260bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[C_6:%.*]] = icmp sge i16 10, [[X_EXT]]
2270bcfd4cbSFlorian Hahn; CHECK-NEXT:    [[R_6:%.*]] = xor i1 [[R_5]], [[C_6]]
2280bcfd4cbSFlorian Hahn; CHECK-NEXT:    ret i1 [[R_6]]
229a14a59f2SFlorian Hahn;
230a14a59f2SFlorian Hahnentry:
2310bcfd4cbSFlorian Hahn  %c.1 = icmp sge i8 %x, %y
2320bcfd4cbSFlorian Hahn  %x.ext = zext i8 %x to i16
2330bcfd4cbSFlorian Hahn  %y.ext = zext i8 %y to i16
234a14a59f2SFlorian Hahn  br i1 %c.1, label %bb1, label %bb2
235a14a59f2SFlorian Hahn
236a14a59f2SFlorian Hahnbb1:
2370bcfd4cbSFlorian Hahn  %t.1 = icmp sge i16 %x.ext, %y.ext
2380bcfd4cbSFlorian Hahn  %c.2 = icmp sge i16 %x.ext, 10
2390bcfd4cbSFlorian Hahn  %r.1 = xor i1 %t.1, %c.2
2400bcfd4cbSFlorian Hahn  %c.3 = icmp sge i16 %y.ext, %x.ext
2410bcfd4cbSFlorian Hahn  %r.2 = xor i1 %r.1, %c.3
2420bcfd4cbSFlorian Hahn  %c.4 = icmp sge i16 10, %x.ext
2430bcfd4cbSFlorian Hahn  %r.3 = xor i1 %r.2, %c.4
2440bcfd4cbSFlorian Hahn  ret i1 %r.3
245a14a59f2SFlorian Hahn
246a14a59f2SFlorian Hahnbb2:
2470bcfd4cbSFlorian Hahn  %t.2 = icmp sge i16 %y.ext, %x.ext
2480bcfd4cbSFlorian Hahn  %f.1 = icmp sge i16 %x.ext, %y.ext
2490bcfd4cbSFlorian Hahn  %r.4 = xor i1 %t.2, %f.1
2500bcfd4cbSFlorian Hahn  %c.5 = icmp sge i16 %x.ext, 10
2510bcfd4cbSFlorian Hahn  %r.5 = xor i1 %r.4, %c.5
2520bcfd4cbSFlorian Hahn  %c.6 = icmp sge i16 10, %x.ext
2530bcfd4cbSFlorian Hahn  %r.6 = xor i1 %r.5, %c.6
2540bcfd4cbSFlorian Hahn  ret i1 %r.6
255a14a59f2SFlorian Hahn}
25604c711c7SFlorian Hahn
25704c711c7SFlorian Hahndefine i1 @test_pr58009_const_zext() {
258*13ffde31SFlorian Hahn; CHECK-LABEL: @test_pr58009_const_zext(
259*13ffde31SFlorian Hahn; CHECK-NEXT:  entry:
260*13ffde31SFlorian Hahn; CHECK-NEXT:    [[EXT_T_1:%.*]] = zext i1 true to i16
261*13ffde31SFlorian Hahn; CHECK-NEXT:    [[EXT_T_2:%.*]] = zext i1 true to i16
262*13ffde31SFlorian Hahn; CHECK-NEXT:    [[RES_1:%.*]] = xor i1 true, false
263*13ffde31SFlorian Hahn; CHECK-NEXT:    [[EXT_F_1:%.*]] = zext i1 false to i16
264*13ffde31SFlorian Hahn; CHECK-NEXT:    [[EXT_F_2:%.*]] = zext i1 false to i16
265*13ffde31SFlorian Hahn; CHECK-NEXT:    [[RES_2:%.*]] = xor i1 [[RES_1]], true
266*13ffde31SFlorian Hahn; CHECK-NEXT:    [[RES_3:%.*]] = xor i1 [[RES_2]], false
267*13ffde31SFlorian Hahn; CHECK-NEXT:    [[T_3:%.*]] = icmp ult i16 [[EXT_F_1]], [[EXT_T_2]]
268*13ffde31SFlorian Hahn; CHECK-NEXT:    [[F_3:%.*]] = icmp ugt i16 [[EXT_F_1]], [[EXT_T_2]]
269*13ffde31SFlorian Hahn; CHECK-NEXT:    [[RES_4:%.*]] = xor i1 [[RES_3]], [[T_3]]
270*13ffde31SFlorian Hahn; CHECK-NEXT:    [[RES_5:%.*]] = xor i1 [[RES_4]], [[F_3]]
271*13ffde31SFlorian Hahn; CHECK-NEXT:    ret i1 [[RES_5]]
272*13ffde31SFlorian Hahn;
27304c711c7SFlorian Hahnentry:
27404c711c7SFlorian Hahn  %ext.t.1 = zext i1 true to i16
27504c711c7SFlorian Hahn  %ext.t.2 = zext i1 true to i16
27604c711c7SFlorian Hahn  %t.1 = icmp uge i16 %ext.t.1, %ext.t.2
27704c711c7SFlorian Hahn  %f.1 = icmp ugt i16 %ext.t.1, %ext.t.2
27804c711c7SFlorian Hahn  %res.1 = xor i1 %t.1, %f.1
27904c711c7SFlorian Hahn
28004c711c7SFlorian Hahn  %ext.f.1 = zext i1 false to i16
28104c711c7SFlorian Hahn  %ext.f.2 = zext i1 false to i16
28204c711c7SFlorian Hahn  %t.2 = icmp uge i16 %ext.f.1, %ext.f.2
28304c711c7SFlorian Hahn  %f.2 = icmp ugt i16 %ext.f.1, %ext.f.2
28404c711c7SFlorian Hahn  %res.2 = xor i1 %res.1, %t.2
28504c711c7SFlorian Hahn  %res.3 = xor i1 %res.2, %f.2
28604c711c7SFlorian Hahn
28704c711c7SFlorian Hahn  %t.3 = icmp ult i16 %ext.f.1, %ext.t.2
28804c711c7SFlorian Hahn  %f.3 = icmp ugt i16 %ext.f.1, %ext.t.2
28904c711c7SFlorian Hahn  %res.4 = xor i1 %res.3, %t.3
29004c711c7SFlorian Hahn  %res.5 = xor i1 %res.4, %f.3
29104c711c7SFlorian Hahn
29204c711c7SFlorian Hahn  ret i1 %res.5
29304c711c7SFlorian Hahn}
294