blob: a6b30c053eb66634551735c1c8f7e3ebfb095d4b [file] [log] [blame]
Dan Gohman18800922009-09-11 18:01:28 +00001; RUN: opt < %s -instcombine -S | not grep call.*bswap
Chris Lattnere7f83dc2006-11-29 05:00:14 +00002
Tanya Lattneraa6f5c92008-03-09 08:16:40 +00003define i1 @test1(i16 %tmp2) {
Chris Lattner25c87e92010-01-01 18:34:40 +00004 %tmp10 = call i16 @llvm.bswap.i16( i16 %tmp2 )
5 %tmp = icmp eq i16 %tmp10, 1
Tanya Lattneraa6f5c92008-03-09 08:16:40 +00006 ret i1 %tmp
Chris Lattnere7f83dc2006-11-29 05:00:14 +00007}
8
Tanya Lattneraa6f5c92008-03-09 08:16:40 +00009define i1 @test2(i32 %tmp) {
Chris Lattner25c87e92010-01-01 18:34:40 +000010 %tmp34 = tail call i32 @llvm.bswap.i32( i32 %tmp )
11 %tmp.upgrd.1 = icmp eq i32 %tmp34, 1
Tanya Lattneraa6f5c92008-03-09 08:16:40 +000012 ret i1 %tmp.upgrd.1
Chris Lattnere7f83dc2006-11-29 05:00:14 +000013}
14
Tanya Lattneraa6f5c92008-03-09 08:16:40 +000015declare i32 @llvm.bswap.i32(i32)
Reid Spencera5f996b2007-04-02 00:51:15 +000016
Tanya Lattneraa6f5c92008-03-09 08:16:40 +000017define i1 @test3(i64 %tmp) {
Chris Lattner25c87e92010-01-01 18:34:40 +000018 %tmp34 = tail call i64 @llvm.bswap.i64( i64 %tmp )
19 %tmp.upgrd.2 = icmp eq i64 %tmp34, 1
Tanya Lattneraa6f5c92008-03-09 08:16:40 +000020 ret i1 %tmp.upgrd.2
Chris Lattnere7f83dc2006-11-29 05:00:14 +000021}
22
Tanya Lattneraa6f5c92008-03-09 08:16:40 +000023declare i64 @llvm.bswap.i64(i64)
Chris Lattnere7f83dc2006-11-29 05:00:14 +000024
Tanya Lattneraa6f5c92008-03-09 08:16:40 +000025declare i16 @llvm.bswap.i16(i16)
26
Chris Lattneref36dcd2008-06-18 04:33:20 +000027; 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
Chris Lattner25c87e92010-01-01 18:34:40 +000052; PR5284
53declare i64 @llvm.bswap.i64(i64)
54declare i32 @llvm.bswap.i32(i32)
55declare i16 @llvm.bswap.i16(i16)
56
57define i16 @test7(i32 %A) {
58 %B = tail call i32 @llvm.bswap.i32(i32 %A) nounwind
59 %C = trunc i32 %B to i16
60 %D = tail call i16 @llvm.bswap.i16(i16 %C) nounwind
61 ret i16 %D
62}
63
64define i16 @test8(i64 %A) {
65 %B = tail call i64 @llvm.bswap.i64(i64 %A) nounwind
66 %C = trunc i64 %B to i16
67 %D = tail call i16 @llvm.bswap.i16(i16 %C) nounwind
68 ret i16 %D
69}
Dan Gohmancf39be32010-02-17 00:54:58 +000070
71; Misc: Fold bswap(undef) to undef.
72define i64 @foo() {
73 %a = call i64 @llvm.bswap.i64(i64 undef)
74 ret i64 %a
75}