@@ -1749,3 +1749,31 @@ define <4 x i32> @select_vector_cmp_with_bitcasts(<2 x i64> %x, <4 x i32> %y) {
17491749 %sel = select <4 x i1 > %cmp , <4 x i32 > %sub.bc , <4 x i32 > zeroinitializer
17501750 ret <4 x i32 > %sel
17511751}
1752+
1753+ define i8 @bittest_trunc_or (i8 %x ) {
1754+ ; CHECK-LABEL: @bittest_trunc_or(
1755+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X1:%.*]] to i1
1756+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[X1]], 1
1757+ ; CHECK-NEXT: [[X:%.*]] = select i1 [[TRUNC]], i8 [[OR]], i8 [[X1]]
1758+ ; CHECK-NEXT: ret i8 [[X]]
1759+ ;
1760+ %trunc = trunc i8 %x to i1
1761+ %or = or i8 %x , 1
1762+ %cond = select i1 %trunc , i8 %or , i8 %x
1763+ ret i8 %cond
1764+ }
1765+
1766+ define i8 @bittest_trunc_not_or (i8 %x ) {
1767+ ; CHECK-LABEL: @bittest_trunc_not_or(
1768+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
1769+ ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[TRUNC]], true
1770+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[X]], 1
1771+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[NOT]], i8 [[OR]], i8 [[X]]
1772+ ; CHECK-NEXT: ret i8 [[COND]]
1773+ ;
1774+ %trunc = trunc i8 %x to i1
1775+ %not = xor i1 %trunc , true
1776+ %or = or i8 %x , 1
1777+ %cond = select i1 %not , i8 %or , i8 %x
1778+ ret i8 %cond
1779+ }
0 commit comments