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