Skip to content

Commit 2912f42

Browse files
[InstCombine] Added tests for PR50096; NFC
1 parent fd28f71 commit 2912f42

File tree

1 file changed

+53
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+53
-0
lines changed

llvm/test/Transforms/InstCombine/ctpop.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,56 @@ define <2 x i32> @mask_one_bit_splat(<2 x i32> %x, <2 x i32>* %p) {
117117
%r = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %a)
118118
ret <2 x i32> %r
119119
}
120+
121+
define i32 @_parity_of_not(i32 %x) {
122+
; CHECK-LABEL: @_parity_of_not(
123+
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[X:%.*]], -1
124+
; CHECK-NEXT: [[CNT:%.*]] = tail call i32 @llvm.ctpop.i32(i32 [[NEG]]), !range [[RNG1:![0-9]+]]
125+
; CHECK-NEXT: [[R:%.*]] = and i32 [[CNT]], 1
126+
; CHECK-NEXT: ret i32 [[R]]
127+
;
128+
%neg = xor i32 %x, -1
129+
%cnt = tail call i32 @llvm.ctpop.i32(i32 %neg)
130+
%r = and i32 %cnt, 1
131+
ret i32 %r
132+
}
133+
134+
135+
define <2 x i32> @_parity_of_not_vec(<2 x i32> %x) {
136+
; CHECK-LABEL: @_parity_of_not_vec(
137+
; CHECK-NEXT: [[NEG:%.*]] = xor <2 x i32> [[X:%.*]], <i32 -1, i32 -1>
138+
; CHECK-NEXT: [[CNT:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[NEG]])
139+
; CHECK-NEXT: [[R:%.*]] = and <2 x i32> [[CNT]], <i32 1, i32 1>
140+
; CHECK-NEXT: ret <2 x i32> [[R]]
141+
;
142+
%neg = xor <2 x i32> %x, <i32 -1 ,i32 -1>
143+
%cnt = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %neg)
144+
%r = and <2 x i32> %cnt, <i32 1 ,i32 1>
145+
ret <2 x i32> %r
146+
}
147+
148+
define <2 x i32> @_parity_of_not_undef(<2 x i32> %x) {
149+
; CHECK-LABEL: @_parity_of_not_undef(
150+
; CHECK-NEXT: [[NEG:%.*]] = xor <2 x i32> [[X:%.*]], <i32 undef, i32 -1>
151+
; CHECK-NEXT: [[CNT:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[NEG]])
152+
; CHECK-NEXT: [[R:%.*]] = and <2 x i32> [[CNT]], <i32 1, i32 1>
153+
; CHECK-NEXT: ret <2 x i32> [[R]]
154+
;
155+
%neg = xor <2 x i32> %x, <i32 undef ,i32 -1>
156+
%cnt = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %neg)
157+
%r = and <2 x i32> %cnt, <i32 1 ,i32 1>
158+
ret <2 x i32> %r
159+
}
160+
161+
define <2 x i32> @_parity_of_not_undef2(<2 x i32> %x) {
162+
; CHECK-LABEL: @_parity_of_not_undef2(
163+
; CHECK-NEXT: [[NEG:%.*]] = xor <2 x i32> [[X:%.*]], <i32 -1, i32 -1>
164+
; CHECK-NEXT: [[CNT:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[NEG]])
165+
; CHECK-NEXT: [[R:%.*]] = and <2 x i32> [[CNT]], <i32 1, i32 undef>
166+
; CHECK-NEXT: ret <2 x i32> [[R]]
167+
;
168+
%neg = xor <2 x i32> %x, <i32 -1 ,i32 -1>
169+
%cnt = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %neg)
170+
%r = and <2 x i32> %cnt, <i32 1 ,i32 undef>
171+
ret <2 x i32> %r
172+
}

0 commit comments

Comments
 (0)