blob: eab4b07a16e9463d62395439ca07e27c6b0ed617 [file] [log] [blame]
Philip Reames3e9c6712017-12-30 03:13:00 +00001; RUN: opt < %s -instsimplify -S | FileCheck %s
James Molloy2d09c002015-11-12 12:39:41 +00002
Matt Arsenault155dda92016-03-21 15:00:35 +00003define i32 @identity_bitreverse_i32(i32 %p) {
4; CHECK-LABEL: @identity_bitreverse_i32(
James Molloy2d09c002015-11-12 12:39:41 +00005; CHECK-NEXT: ret i32 %p
6 %a = call i32 @llvm.bitreverse.i32(i32 %p)
7 %b = call i32 @llvm.bitreverse.i32(i32 %a)
8 ret i32 %b
9}
10
Matt Arsenault155dda92016-03-21 15:00:35 +000011; CHECK-LABEL: @identity_bitreverse_v2i32(
12; CHECK-NEXT: ret <2 x i32> %p
13define <2 x i32> @identity_bitreverse_v2i32(<2 x i32> %p) {
14 %a = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %p)
15 %b = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %a)
16 ret <2 x i32> %b
17}
18
19; CHECK-LABEL: @reverse_0_i32(
20; CHECK-NEXT: ret i32 0
21define i32 @reverse_0_i32() {
22 %x = call i32 @llvm.bitreverse.i32(i32 0)
23 ret i32 %x
24}
25
26; CHECK-LABEL: @reverse_1_i32(
27; CHECK-NEXT: ret i32 -2147483648
28define i32 @reverse_1_i32() {
29 %x = call i32 @llvm.bitreverse.i32(i32 1)
30 ret i32 %x
31}
32
33; CHECK-LABEL: @reverse_neg1_i32(
34; CHECK-NEXT: ret i32 -1
35define i32 @reverse_neg1_i32() {
36 %x = call i32 @llvm.bitreverse.i32(i32 -1)
37 ret i32 %x
38}
39
Brian Gesiak1640e682017-03-19 04:40:42 +000040; CHECK-LABEL: @reverse_undef_i32(
41; CHECK-NEXT: ret i32 undef
42define i32 @reverse_undef_i32() {
43 %x = call i32 @llvm.bitreverse.i32(i32 undef)
44 ret i32 %x
45}
46
Matt Arsenault155dda92016-03-21 15:00:35 +000047; CHECK-LABEL: @reverse_false_i1(
48; CHECK-NEXT: ret i1 false
49define i1 @reverse_false_i1() {
50 %x = call i1 @llvm.bitreverse.i1(i1 false)
51 ret i1 %x
52}
53
54; CHECK-LABEL: @reverse_true_i1(
55; CHECK-NEXT: ret i1 true
56define i1 @reverse_true_i1() {
57 %x = call i1 @llvm.bitreverse.i1(i1 true)
58 ret i1 %x
59}
60
Brian Gesiak1640e682017-03-19 04:40:42 +000061; CHECK-LABEL: @reverse_undef_i1(
62; CHECK-NEXT: ret i1 undef
63define i1 @reverse_undef_i1() {
64 %x = call i1 @llvm.bitreverse.i1(i1 undef)
65 ret i1 %x
66}
67
Matt Arsenault155dda92016-03-21 15:00:35 +000068; CHECK-LABEL: @reverse_false_v2i1(
69; CHECK-NEXT: ret <2 x i1> zeroinitializer
70define <2 x i1> @reverse_false_v2i1() {
71 %x = call <2 x i1> @llvm.bitreverse.v2i1(<2 x i1> zeroinitializer)
72 ret <2 x i1> %x
73}
74
75; CHECK-LABEL: @reverse_true_v2i1(
76; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
77define <2 x i1> @reverse_true_v2i1() {
78 %x = call <2 x i1> @llvm.bitreverse.v2i1(<2 x i1> <i1 true, i1 true>)
79 ret <2 x i1> %x
80}
81
82; CHECK-LABEL: @bitreverse_920_1234_v2i32(
83; CHECK-NEXT: ret <2 x i32> <i32 432013312, i32 1260388352>
84define <2 x i32> @bitreverse_920_1234_v2i32() {
85 %x = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> <i32 920, i32 1234>)
86 ret <2 x i32> %x
87}
88
89; CHECK-LABEL: @reverse_100_i3(
90; CHECK-NEXT: ret i3 1
91define i3 @reverse_100_i3() {
92 %x = call i3 @llvm.bitreverse.i3(i3 100)
93 ret i3 %x
94}
95
96; CHECK-LABEL: @reverse_6_3_v2i3(
97; CHECK-NEXT: ret <2 x i3> <i3 3, i3 -2>
98define <2 x i3> @reverse_6_3_v2i3() {
99 %x = call <2 x i3> @llvm.bitreverse.v2i3(<2 x i3> <i3 6, i3 3>)
100 ret <2 x i3> %x
101}
102
103declare i1 @llvm.bitreverse.i1(i1) readnone
104declare <2 x i1> @llvm.bitreverse.v2i1(<2 x i1>) readnone
105
106declare i3 @llvm.bitreverse.i3(i3) readnone
107declare <2 x i3> @llvm.bitreverse.v2i3(<2 x i3>) readnone
108
James Molloy2d09c002015-11-12 12:39:41 +0000109declare i32 @llvm.bitreverse.i32(i32) readnone
Matt Arsenault155dda92016-03-21 15:00:35 +0000110declare <2 x i32> @llvm.bitreverse.v2i32(<2 x i32>) readnone