• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt < %s -instcombine -S | FileCheck %s
2
3define i32 @identity_bitreverse_i32(i32 %p) {
4; CHECK-LABEL: @identity_bitreverse_i32(
5; 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
11; 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
40; CHECK-LABEL: @reverse_false_i1(
41; CHECK-NEXT: ret i1 false
42define i1 @reverse_false_i1() {
43  %x = call i1 @llvm.bitreverse.i1(i1 false)
44  ret i1 %x
45}
46
47; CHECK-LABEL: @reverse_true_i1(
48; CHECK-NEXT: ret i1 true
49define i1 @reverse_true_i1() {
50  %x = call i1 @llvm.bitreverse.i1(i1 true)
51  ret i1 %x
52}
53
54; CHECK-LABEL: @reverse_false_v2i1(
55; CHECK-NEXT: ret <2 x i1> zeroinitializer
56define <2 x i1> @reverse_false_v2i1() {
57  %x = call <2  x i1> @llvm.bitreverse.v2i1(<2 x i1> zeroinitializer)
58  ret <2 x i1> %x
59}
60
61; CHECK-LABEL: @reverse_true_v2i1(
62; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
63define <2 x i1> @reverse_true_v2i1() {
64  %x = call <2 x i1> @llvm.bitreverse.v2i1(<2 x i1> <i1 true, i1 true>)
65  ret <2 x i1> %x
66}
67
68; CHECK-LABEL: @bitreverse_920_1234_v2i32(
69; CHECK-NEXT: ret <2 x i32> <i32 432013312, i32 1260388352>
70define <2 x i32> @bitreverse_920_1234_v2i32() {
71  %x = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> <i32 920, i32 1234>)
72  ret <2 x i32> %x
73}
74
75; CHECK-LABEL: @reverse_100_i3(
76; CHECK-NEXT: ret i3 1
77define i3 @reverse_100_i3() {
78  %x = call i3 @llvm.bitreverse.i3(i3 100)
79  ret i3 %x
80}
81
82; CHECK-LABEL: @reverse_6_3_v2i3(
83; CHECK-NEXT: ret <2 x i3> <i3 3, i3 -2>
84define <2 x i3> @reverse_6_3_v2i3() {
85  %x = call <2  x i3> @llvm.bitreverse.v2i3(<2 x i3> <i3 6, i3 3>)
86  ret <2 x i3> %x
87}
88
89declare i1 @llvm.bitreverse.i1(i1) readnone
90declare <2 x i1> @llvm.bitreverse.v2i1(<2 x i1>) readnone
91
92declare i3 @llvm.bitreverse.i3(i3) readnone
93declare <2 x i3> @llvm.bitreverse.v2i3(<2 x i3>) readnone
94
95declare i32 @llvm.bitreverse.i32(i32) readnone
96declare <2 x i32> @llvm.bitreverse.v2i32(<2 x i32>) readnone
97