@@ -1709,3 +1709,82 @@ define i8 @select_icmp_eq_and_1_0_lshr_tv(i8 %x, i8 %y) {
1709
1709
%select = select i1 %cmp , i8 %blshr , i8 %y
1710
1710
ret i8 %select
1711
1711
}
1712
+
1713
+ define i8 @select_trunc_or_2 (i8 %x , i8 %y ) {
1714
+ ; CHECK-LABEL: @select_trunc_or_2(
1715
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
1716
+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1717
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TRUNC]], i8 [[OR]], i8 [[Y]]
1718
+ ; CHECK-NEXT: ret i8 [[SELECT]]
1719
+ ;
1720
+ %trunc = trunc i8 %x to i1
1721
+ %or = or i8 %y , 2
1722
+ %select = select i1 %trunc , i8 %or , i8 %y
1723
+ ret i8 %select
1724
+ }
1725
+
1726
+ define i8 @select_not_trunc_or_2 (i8 %x , i8 %y ) {
1727
+ ; CHECK-LABEL: @select_not_trunc_or_2(
1728
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
1729
+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1730
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TRUNC]], i8 [[OR]], i8 [[Y]]
1731
+ ; CHECK-NEXT: ret i8 [[SELECT]]
1732
+ ;
1733
+ %trunc = trunc i8 %x to i1
1734
+ %not = xor i1 %trunc , true
1735
+ %or = or i8 %y , 2
1736
+ %select = select i1 %not , i8 %y , i8 %or
1737
+ ret i8 %select
1738
+ }
1739
+
1740
+ define i8 @select_trunc_nuw_or_2 (i8 %x , i8 %y ) {
1741
+ ; CHECK-LABEL: @select_trunc_nuw_or_2(
1742
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[X:%.*]] to i1
1743
+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1744
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TRUNC]], i8 [[OR]], i8 [[Y]]
1745
+ ; CHECK-NEXT: ret i8 [[SELECT]]
1746
+ ;
1747
+ %trunc = trunc nuw i8 %x to i1
1748
+ %or = or i8 %y , 2
1749
+ %select = select i1 %trunc , i8 %or , i8 %y
1750
+ ret i8 %select
1751
+ }
1752
+
1753
+ define i8 @select_trunc_nsw_or_2 (i8 %x , i8 %y ) {
1754
+ ; CHECK-LABEL: @select_trunc_nsw_or_2(
1755
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc nsw i8 [[X:%.*]] to i1
1756
+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1757
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TRUNC]], i8 [[OR]], i8 [[Y]]
1758
+ ; CHECK-NEXT: ret i8 [[SELECT]]
1759
+ ;
1760
+ %trunc = trunc nsw i8 %x to i1
1761
+ %or = or i8 %y , 2
1762
+ %select = select i1 %trunc , i8 %or , i8 %y
1763
+ ret i8 %select
1764
+ }
1765
+
1766
+ define <2 x i8 > @select_trunc_or_2_vec (<2 x i8 > %x , <2 x i8 > %y ) {
1767
+ ; CHECK-LABEL: @select_trunc_or_2_vec(
1768
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc <2 x i8> [[X:%.*]] to <2 x i1>
1769
+ ; CHECK-NEXT: [[OR:%.*]] = or <2 x i8> [[Y:%.*]], splat (i8 2)
1770
+ ; CHECK-NEXT: [[SELECT:%.*]] = select <2 x i1> [[TRUNC]], <2 x i8> [[OR]], <2 x i8> [[Y]]
1771
+ ; CHECK-NEXT: ret <2 x i8> [[SELECT]]
1772
+ ;
1773
+ %trunc = trunc <2 x i8 > %x to <2 x i1 >
1774
+ %or = or <2 x i8 > %y , <i8 2 , i8 2 >
1775
+ %select = select <2 x i1 > %trunc , <2 x i8 > %or , <2 x i8 > %y
1776
+ ret <2 x i8 > %select
1777
+ }
1778
+
1779
+ define i8 @neg_select_trunc_or_2 (i8 %x , i8 %y ) {
1780
+ ; CHECK-LABEL: @neg_select_trunc_or_2(
1781
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
1782
+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[Y:%.*]], 2
1783
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TRUNC]], i8 [[Y]], i8 [[OR]]
1784
+ ; CHECK-NEXT: ret i8 [[SELECT]]
1785
+ ;
1786
+ %trunc = trunc i8 %x to i1
1787
+ %or = or i8 %y , 2
1788
+ %select = select i1 %trunc , i8 %y , i8 %or
1789
+ ret i8 %select
1790
+ }
0 commit comments