xref: /llvm-project/llvm/test/Transforms/InstSimplify/ConstProp/bitcount.ll (revision b280ee1dd7e9b36ae7aaa3953556e4b7a7f31a29)
1486ed885SArthur Eubanks; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3486ed885SArthur Eubanks
4486ed885SArthur Eubanksdeclare i31 @llvm.ctpop.i31(i31 %val)
5486ed885SArthur Eubanksdeclare i32 @llvm.cttz.i32(i32 %val, i1)
6486ed885SArthur Eubanksdeclare i33 @llvm.ctlz.i33(i33 %val, i1)
7486ed885SArthur Eubanksdeclare <2 x i31> @llvm.ctpop.v2i31(<2 x i31> %val)
8486ed885SArthur Eubanksdeclare <2 x i32> @llvm.cttz.v2i32(<2 x i32> %val, i1)
9486ed885SArthur Eubanksdeclare <2 x i33> @llvm.ctlz.v2i33(<2 x i33> %val, i1)
10486ed885SArthur Eubanks
11486ed885SArthur Eubanksdefine i31 @ctpop_const() {
12486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_const(
13486ed885SArthur Eubanks; CHECK-NEXT:    ret i31 12
14486ed885SArthur Eubanks;
15486ed885SArthur Eubanks  %x = call i31 @llvm.ctpop.i31(i31 12415124)
16486ed885SArthur Eubanks  ret i31 %x
17486ed885SArthur Eubanks}
18486ed885SArthur Eubanks
19486ed885SArthur Eubanksdefine i32 @cttz_const() {
20486ed885SArthur Eubanks; CHECK-LABEL: @cttz_const(
21486ed885SArthur Eubanks; CHECK-NEXT:    ret i32 1
22486ed885SArthur Eubanks;
23486ed885SArthur Eubanks  %x = call i32 @llvm.cttz.i32(i32 87359874, i1 true)
24486ed885SArthur Eubanks  ret i32 %x
25486ed885SArthur Eubanks}
26486ed885SArthur Eubanks
27486ed885SArthur Eubanksdefine i33 @ctlz_const() {
28486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_const(
29486ed885SArthur Eubanks; CHECK-NEXT:    ret i33 6
30486ed885SArthur Eubanks;
31486ed885SArthur Eubanks  %x = call i33 @llvm.ctlz.i33(i33 87359874, i1 true)
32486ed885SArthur Eubanks  ret i33 %x
33486ed885SArthur Eubanks}
34486ed885SArthur Eubanks
35486ed885SArthur Eubanksdefine i31 @ctpop_zero() {
36486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_zero(
37486ed885SArthur Eubanks; CHECK-NEXT:    ret i31 0
38486ed885SArthur Eubanks;
39486ed885SArthur Eubanks  %x = call i31 @llvm.ctpop.i31(i31 0)
40486ed885SArthur Eubanks  ret i31 %x
41486ed885SArthur Eubanks}
42486ed885SArthur Eubanks
43486ed885SArthur Eubanksdefine i32 @cttz_zero_defined() {
44486ed885SArthur Eubanks; CHECK-LABEL: @cttz_zero_defined(
45486ed885SArthur Eubanks; CHECK-NEXT:    ret i32 32
46486ed885SArthur Eubanks;
47486ed885SArthur Eubanks  %x = call i32 @llvm.cttz.i32(i32 0, i1 false)
48486ed885SArthur Eubanks  ret i32 %x
49486ed885SArthur Eubanks}
50486ed885SArthur Eubanks
512e26633aSSanjay Pateldefine i32 @cttz_zero_is_poison() {
522e26633aSSanjay Patel; CHECK-LABEL: @cttz_zero_is_poison(
532e26633aSSanjay Patel; CHECK-NEXT:    ret i32 poison
54486ed885SArthur Eubanks;
55486ed885SArthur Eubanks  %x = call i32 @llvm.cttz.i32(i32 0, i1 true)
56486ed885SArthur Eubanks  ret i32 %x
57486ed885SArthur Eubanks}
58486ed885SArthur Eubanks
59486ed885SArthur Eubanksdefine i33 @ctlz_zero_defined() {
60486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_zero_defined(
61486ed885SArthur Eubanks; CHECK-NEXT:    ret i33 33
62486ed885SArthur Eubanks;
63486ed885SArthur Eubanks  %x = call i33 @llvm.ctlz.i33(i33 0, i1 false)
64486ed885SArthur Eubanks  ret i33 %x
65486ed885SArthur Eubanks}
66486ed885SArthur Eubanks
672e26633aSSanjay Pateldefine i33 @ctlz_zero_is_poison() {
682e26633aSSanjay Patel; CHECK-LABEL: @ctlz_zero_is_poison(
692e26633aSSanjay Patel; CHECK-NEXT:    ret i33 poison
70486ed885SArthur Eubanks;
71486ed885SArthur Eubanks  %x = call i33 @llvm.ctlz.i33(i33 0, i1 true)
72486ed885SArthur Eubanks  ret i33 %x
73486ed885SArthur Eubanks}
74486ed885SArthur Eubanks
75486ed885SArthur Eubanksdefine i31 @ctpop_undef() {
76486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_undef(
77486ed885SArthur Eubanks; CHECK-NEXT:    ret i31 0
78486ed885SArthur Eubanks;
79486ed885SArthur Eubanks  %x = call i31 @llvm.ctpop.i31(i31 undef)
80486ed885SArthur Eubanks  ret i31 %x
81486ed885SArthur Eubanks}
82486ed885SArthur Eubanks
83486ed885SArthur Eubanksdefine i32 @cttz_undef_defined() {
84486ed885SArthur Eubanks; CHECK-LABEL: @cttz_undef_defined(
85486ed885SArthur Eubanks; CHECK-NEXT:    ret i32 0
86486ed885SArthur Eubanks;
87486ed885SArthur Eubanks  %x = call i32 @llvm.cttz.i32(i32 undef, i1 false)
88486ed885SArthur Eubanks  ret i32 %x
89486ed885SArthur Eubanks}
90486ed885SArthur Eubanks
912e26633aSSanjay Pateldefine i32 @cttz_undef_zero_is_poison() {
922e26633aSSanjay Patel; CHECK-LABEL: @cttz_undef_zero_is_poison(
932e26633aSSanjay Patel; CHECK-NEXT:    ret i32 poison
94486ed885SArthur Eubanks;
95486ed885SArthur Eubanks  %x = call i32 @llvm.cttz.i32(i32 undef, i1 true)
96486ed885SArthur Eubanks  ret i32 %x
97486ed885SArthur Eubanks}
98486ed885SArthur Eubanks
99486ed885SArthur Eubanksdefine i33 @ctlz_undef_defined() {
100486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_undef_defined(
101486ed885SArthur Eubanks; CHECK-NEXT:    ret i33 0
102486ed885SArthur Eubanks;
103486ed885SArthur Eubanks  %x = call i33 @llvm.ctlz.i33(i33 undef, i1 false)
104486ed885SArthur Eubanks  ret i33 %x
105486ed885SArthur Eubanks}
106486ed885SArthur Eubanks
1072e26633aSSanjay Pateldefine i33 @ctlz_undef_zero_is_poison() {
1082e26633aSSanjay Patel; CHECK-LABEL: @ctlz_undef_zero_is_poison(
1092e26633aSSanjay Patel; CHECK-NEXT:    ret i33 poison
110486ed885SArthur Eubanks;
111486ed885SArthur Eubanks  %x = call i33 @llvm.ctlz.i33(i33 undef, i1 true)
112486ed885SArthur Eubanks  ret i33 %x
113486ed885SArthur Eubanks}
114486ed885SArthur Eubanks
115486ed885SArthur Eubanksdefine <2 x i31> @ctpop_vector() {
116486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_vector(
117486ed885SArthur Eubanks; CHECK-NEXT:    ret <2 x i31> <i31 8, i31 1>
118486ed885SArthur Eubanks;
119486ed885SArthur Eubanks  %x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 255, i31 16>)
120486ed885SArthur Eubanks  ret <2 x i31> %x
121486ed885SArthur Eubanks}
122486ed885SArthur Eubanks
123486ed885SArthur Eubanksdefine <2 x i31> @ctpop_vector_undef() {
124486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_vector_undef(
125486ed885SArthur Eubanks; CHECK-NEXT:    ret <2 x i31> zeroinitializer
126486ed885SArthur Eubanks;
127486ed885SArthur Eubanks  %x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 0, i31 undef>)
128486ed885SArthur Eubanks  ret <2 x i31> %x
129486ed885SArthur Eubanks}
130486ed885SArthur Eubanks
131486ed885SArthur Eubanksdefine <2 x i32> @cttz_vector() {
132486ed885SArthur Eubanks; CHECK-LABEL: @cttz_vector(
133486ed885SArthur Eubanks; CHECK-NEXT:    ret <2 x i32> <i32 0, i32 4>
134486ed885SArthur Eubanks;
135486ed885SArthur Eubanks  %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 255, i32 16>, i1 true)
136486ed885SArthur Eubanks  ret <2 x i32> %x
137486ed885SArthur Eubanks}
138486ed885SArthur Eubanks
139486ed885SArthur Eubanksdefine <2 x i32> @cttz_vector_undef_defined() {
140486ed885SArthur Eubanks; CHECK-LABEL: @cttz_vector_undef_defined(
141486ed885SArthur Eubanks; CHECK-NEXT:    ret <2 x i32> <i32 32, i32 0>
142486ed885SArthur Eubanks;
143486ed885SArthur Eubanks  %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 false)
144486ed885SArthur Eubanks  ret <2 x i32> %x
145486ed885SArthur Eubanks}
146486ed885SArthur Eubanks
1472e26633aSSanjay Pateldefine <2 x i32> @cttz_vector_undef_zero_is_poison() {
1482e26633aSSanjay Patel; CHECK-LABEL: @cttz_vector_undef_zero_is_poison(
1492e26633aSSanjay Patel; CHECK-NEXT:    ret <2 x i32> poison
150486ed885SArthur Eubanks;
151486ed885SArthur Eubanks  %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 true)
152486ed885SArthur Eubanks  ret <2 x i32> %x
153486ed885SArthur Eubanks}
154486ed885SArthur Eubanks
155486ed885SArthur Eubanksdefine <2 x i33> @ctlz_vector() {
156486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_vector(
157486ed885SArthur Eubanks; CHECK-NEXT:    ret <2 x i33> <i33 25, i33 28>
158486ed885SArthur Eubanks;
159486ed885SArthur Eubanks  %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 255, i33 16>, i1 true)
160486ed885SArthur Eubanks  ret <2 x i33> %x
161486ed885SArthur Eubanks}
162486ed885SArthur Eubanks
163486ed885SArthur Eubanksdefine <2 x i33> @ctlz_vector_undef_defined() {
164486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_vector_undef_defined(
165486ed885SArthur Eubanks; CHECK-NEXT:    ret <2 x i33> <i33 33, i33 0>
166486ed885SArthur Eubanks;
167486ed885SArthur Eubanks  %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 false)
168486ed885SArthur Eubanks  ret <2 x i33> %x
169486ed885SArthur Eubanks}
170486ed885SArthur Eubanks
1712e26633aSSanjay Pateldefine <2 x i33> @ctlz_vector_undef_zero_is_poison() {
1722e26633aSSanjay Patel; CHECK-LABEL: @ctlz_vector_undef_zero_is_poison(
1732e26633aSSanjay Patel; CHECK-NEXT:    ret <2 x i33> poison
174486ed885SArthur Eubanks;
175486ed885SArthur Eubanks  %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 true)
176486ed885SArthur Eubanks  ret <2 x i33> %x
177486ed885SArthur Eubanks}
178