@@ -1709,3 +1709,82 @@ define i8 @select_icmp_eq_and_1_0_lshr_tv(i8 %x, i8 %y) {
17091709 %select = select i1 %cmp , i8 %blshr , i8 %y
17101710 ret i8 %select
17111711}
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