Skip to content

Commit a422bc7

Browse files
committed
[InstCombine] Test for trunc to i1 in foldSelectICmpAndBinOp. (NFC)
1 parent 538b8f8 commit a422bc7

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

llvm/test/Transforms/InstCombine/select-with-bitwise-ops.ll

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)