@@ -1829,3 +1829,42 @@ define i8 @neg_select_trunc_or_2(i8 %x, i8 %y) {
18291829 %select = select i1 %trunc , i8 %y , i8 %or
18301830 ret i8 %select
18311831}
1832+
1833+ define i8 @select_icmp_bittest_range (i8 range(i8 0 , 64 ) %a , i8 %y ) {
1834+ ; CHECK-LABEL: @select_icmp_bittest_range(
1835+ ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ult i8 [[A:%.*]], 32
1836+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1837+ ; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i8 [[Y]], i8 [[OR]]
1838+ ; CHECK-NEXT: ret i8 [[RES]]
1839+ ;
1840+ %cmp = icmp ult i8 %a , 32
1841+ %or = or i8 %y , 2
1842+ %res = select i1 %cmp , i8 %y , i8 %or
1843+ ret i8 %res
1844+ }
1845+
1846+ define i8 @neg_select_icmp_bittest_range (i8 range(i8 0 , 65 ) %a , i8 %y ) {
1847+ ; CHECK-LABEL: @neg_select_icmp_bittest_range(
1848+ ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ult i8 [[A:%.*]], 32
1849+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1850+ ; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i8 [[Y]], i8 [[OR]]
1851+ ; CHECK-NEXT: ret i8 [[RES]]
1852+ ;
1853+ %cmp = icmp ult i8 %a , 32
1854+ %or = or i8 %y , 2
1855+ %res = select i1 %cmp , i8 %y , i8 %or
1856+ ret i8 %res
1857+ }
1858+
1859+ define i8 @neg_select_icmp_bittest_range_2 (i8 range(i8 0 , 64 ) %a , i8 %y ) {
1860+ ; CHECK-LABEL: @neg_select_icmp_bittest_range_2(
1861+ ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ult i8 [[A:%.*]], 16
1862+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1863+ ; CHECK-NEXT: [[RES:%.*]] = select i1 [[CMP]], i8 [[Y]], i8 [[OR]]
1864+ ; CHECK-NEXT: ret i8 [[RES]]
1865+ ;
1866+ %cmp = icmp ult i8 %a , 16
1867+ %or = or i8 %y , 2
1868+ %res = select i1 %cmp , i8 %y , i8 %or
1869+ ret i8 %res
1870+ }
0 commit comments