blob: 6333c4d24d094dcda47ca4415de9c4e8b25c1fe6 [file] [log] [blame]
Nikita Popovf17421e2018-12-20 19:46:52 +00001; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -constprop -S | FileCheck %s
3
4declare i31 @llvm.ctpop.i31(i31 %val)
5declare i32 @llvm.cttz.i32(i32 %val, i1)
6declare i33 @llvm.ctlz.i33(i33 %val, i1)
7declare <2 x i31> @llvm.ctpop.v2i31(<2 x i31> %val)
8declare <2 x i32> @llvm.cttz.v2i32(<2 x i32> %val, i1)
9declare <2 x i33> @llvm.ctlz.v2i33(<2 x i33> %val, i1)
10
11define i31 @ctpop_const() {
12; CHECK-LABEL: @ctpop_const(
13; CHECK-NEXT: ret i31 12
14;
15 %x = call i31 @llvm.ctpop.i31(i31 12415124)
16 ret i31 %x
17}
18
19define i32 @cttz_const() {
20; CHECK-LABEL: @cttz_const(
21; CHECK-NEXT: ret i32 1
22;
23 %x = call i32 @llvm.cttz.i32(i32 87359874, i1 true)
24 ret i32 %x
25}
26
27define i33 @ctlz_const() {
28; CHECK-LABEL: @ctlz_const(
29; CHECK-NEXT: ret i33 6
30;
31 %x = call i33 @llvm.ctlz.i33(i33 87359874, i1 true)
32 ret i33 %x
33}
34
35define i31 @ctpop_zero() {
36; CHECK-LABEL: @ctpop_zero(
37; CHECK-NEXT: ret i31 0
38;
39 %x = call i31 @llvm.ctpop.i31(i31 0)
40 ret i31 %x
41}
42
43define i32 @cttz_zero_defined() {
44; CHECK-LABEL: @cttz_zero_defined(
45; CHECK-NEXT: ret i32 32
46;
47 %x = call i32 @llvm.cttz.i32(i32 0, i1 false)
48 ret i32 %x
49}
50
51define i32 @cttz_zero_undefined() {
52; CHECK-LABEL: @cttz_zero_undefined(
53; CHECK-NEXT: ret i32 undef
54;
55 %x = call i32 @llvm.cttz.i32(i32 0, i1 true)
56 ret i32 %x
57}
58
59define i33 @ctlz_zero_defined() {
60; CHECK-LABEL: @ctlz_zero_defined(
61; CHECK-NEXT: ret i33 33
62;
63 %x = call i33 @llvm.ctlz.i33(i33 0, i1 false)
64 ret i33 %x
65}
66
67define i33 @ctlz_zero_undefined() {
68; CHECK-LABEL: @ctlz_zero_undefined(
69; CHECK-NEXT: ret i33 undef
70;
71 %x = call i33 @llvm.ctlz.i33(i33 0, i1 true)
72 ret i33 %x
73}
74
75define i31 @ctpop_undef() {
76; CHECK-LABEL: @ctpop_undef(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +000077; CHECK-NEXT: ret i31 0
Nikita Popovf17421e2018-12-20 19:46:52 +000078;
79 %x = call i31 @llvm.ctpop.i31(i31 undef)
80 ret i31 %x
81}
82
83define i32 @cttz_undef_defined() {
84; CHECK-LABEL: @cttz_undef_defined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +000085; CHECK-NEXT: ret i32 0
Nikita Popovf17421e2018-12-20 19:46:52 +000086;
87 %x = call i32 @llvm.cttz.i32(i32 undef, i1 false)
88 ret i32 %x
89}
90
91define i32 @cttz_undef_undefined() {
92; CHECK-LABEL: @cttz_undef_undefined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +000093; CHECK-NEXT: ret i32 undef
Nikita Popovf17421e2018-12-20 19:46:52 +000094;
95 %x = call i32 @llvm.cttz.i32(i32 undef, i1 true)
96 ret i32 %x
97}
98
99define i33 @ctlz_undef_defined() {
100; CHECK-LABEL: @ctlz_undef_defined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000101; CHECK-NEXT: ret i33 0
Nikita Popovf17421e2018-12-20 19:46:52 +0000102;
103 %x = call i33 @llvm.ctlz.i33(i33 undef, i1 false)
104 ret i33 %x
105}
106
107define i33 @ctlz_undef_undefined() {
108; CHECK-LABEL: @ctlz_undef_undefined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000109; CHECK-NEXT: ret i33 undef
Nikita Popovf17421e2018-12-20 19:46:52 +0000110;
111 %x = call i33 @llvm.ctlz.i33(i33 undef, i1 true)
112 ret i33 %x
113}
114
115define <2 x i31> @ctpop_vector() {
116; CHECK-LABEL: @ctpop_vector(
117; CHECK-NEXT: ret <2 x i31> <i31 8, i31 1>
118;
119 %x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 255, i31 16>)
120 ret <2 x i31> %x
121}
122
123define <2 x i31> @ctpop_vector_undef() {
124; CHECK-LABEL: @ctpop_vector_undef(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000125; CHECK-NEXT: ret <2 x i31> zeroinitializer
Nikita Popovf17421e2018-12-20 19:46:52 +0000126;
127 %x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 0, i31 undef>)
128 ret <2 x i31> %x
129}
130
131define <2 x i32> @cttz_vector() {
132; CHECK-LABEL: @cttz_vector(
133; CHECK-NEXT: ret <2 x i32> <i32 0, i32 4>
134;
135 %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 255, i32 16>, i1 true)
136 ret <2 x i32> %x
137}
138
139define <2 x i32> @cttz_vector_undef_defined() {
140; CHECK-LABEL: @cttz_vector_undef_defined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000141; CHECK-NEXT: ret <2 x i32> <i32 32, i32 0>
Nikita Popovf17421e2018-12-20 19:46:52 +0000142;
143 %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 false)
144 ret <2 x i32> %x
145}
146
147define <2 x i32> @cttz_vector_undef_undefined() {
148; CHECK-LABEL: @cttz_vector_undef_undefined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000149; CHECK-NEXT: ret <2 x i32> undef
Nikita Popovf17421e2018-12-20 19:46:52 +0000150;
151 %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 true)
152 ret <2 x i32> %x
153}
154
155define <2 x i33> @ctlz_vector() {
156; CHECK-LABEL: @ctlz_vector(
157; CHECK-NEXT: ret <2 x i33> <i33 25, i33 28>
158;
159 %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 255, i33 16>, i1 true)
160 ret <2 x i33> %x
161}
162
163define <2 x i33> @ctlz_vector_undef_defined() {
164; CHECK-LABEL: @ctlz_vector_undef_defined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000165; CHECK-NEXT: ret <2 x i33> <i33 33, i33 0>
Nikita Popovf17421e2018-12-20 19:46:52 +0000166;
167 %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 false)
168 ret <2 x i33> %x
169}
170
171define <2 x i33> @ctlz_vector_undef_undefined() {
172; CHECK-LABEL: @ctlz_vector_undef_undefined(
Nikita Popov9f6e9cf2019-01-11 21:18:00 +0000173; CHECK-NEXT: ret <2 x i33> undef
Nikita Popovf17421e2018-12-20 19:46:52 +0000174;
175 %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 true)
176 ret <2 x i33> %x
177}