@@ -1829,3 +1829,42 @@ define i8 @neg_select_trunc_or_2(i8 %x, i8 %y) {
1829
1829
%select = select i1 %trunc , i8 %y , i8 %or
1830
1830
ret i8 %select
1831
1831
}
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