• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt < %s -instcombine -S | not grep call.*bswap
2
3define i1 @test1(i16 %tmp2) {
4        %tmp10 = call i16 @llvm.bswap.i16( i16 %tmp2 )
5        %tmp = icmp eq i16 %tmp10, 1
6        ret i1 %tmp
7}
8
9define i1 @test2(i32 %tmp) {
10        %tmp34 = tail call i32 @llvm.bswap.i32( i32 %tmp )
11        %tmp.upgrd.1 = icmp eq i32 %tmp34, 1
12        ret i1 %tmp.upgrd.1
13}
14
15declare i32 @llvm.bswap.i32(i32)
16
17define i1 @test3(i64 %tmp) {
18        %tmp34 = tail call i64 @llvm.bswap.i64( i64 %tmp )
19        %tmp.upgrd.2 = icmp eq i64 %tmp34, 1
20        ret i1 %tmp.upgrd.2
21}
22
23declare i64 @llvm.bswap.i64(i64)
24
25declare i16 @llvm.bswap.i16(i16)
26
27; rdar://5992453
28; A & 255
29define i32 @test4(i32 %a) nounwind  {
30entry:
31	%tmp2 = tail call i32 @llvm.bswap.i32( i32 %a )
32	%tmp4 = lshr i32 %tmp2, 24
33	ret i32 %tmp4
34}
35
36; A
37define i32 @test5(i32 %a) nounwind  {
38entry:
39	%tmp2 = tail call i32 @llvm.bswap.i32( i32 %a )
40	%tmp4 = tail call i32 @llvm.bswap.i32( i32 %tmp2 )
41	ret i32 %tmp4
42}
43
44; a >> 24
45define i32 @test6(i32 %a) nounwind  {
46entry:
47	%tmp2 = tail call i32 @llvm.bswap.i32( i32 %a )
48	%tmp4 = and i32 %tmp2, 255
49	ret i32 %tmp4
50}
51
52; PR5284
53define i16 @test7(i32 %A) {
54  %B = tail call i32 @llvm.bswap.i32(i32 %A) nounwind
55  %C = trunc i32 %B to i16
56  %D = tail call i16 @llvm.bswap.i16(i16 %C) nounwind
57  ret i16 %D
58}
59
60define i16 @test8(i64 %A) {
61  %B = tail call i64 @llvm.bswap.i64(i64 %A) nounwind
62  %C = trunc i64 %B to i16
63  %D = tail call i16 @llvm.bswap.i16(i16 %C) nounwind
64  ret i16 %D
65}
66
67; Misc: Fold bswap(undef) to undef.
68define i64 @foo() {
69  %a = call i64 @llvm.bswap.i64(i64 undef)
70  ret i64 %a
71}
72