Dan Gohman | 1880092 | 2009-09-11 18:01:28 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -instcombine -S | not grep call.*bswap |
Chris Lattner | e7f83dc | 2006-11-29 05:00:14 +0000 | [diff] [blame] | 2 | |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 3 | define i1 @test1(i16 %tmp2) { |
Chris Lattner | 25c87e9 | 2010-01-01 18:34:40 +0000 | [diff] [blame] | 4 | %tmp10 = call i16 @llvm.bswap.i16( i16 %tmp2 ) |
| 5 | %tmp = icmp eq i16 %tmp10, 1 |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 6 | ret i1 %tmp |
Chris Lattner | e7f83dc | 2006-11-29 05:00:14 +0000 | [diff] [blame] | 7 | } |
| 8 | |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 9 | define i1 @test2(i32 %tmp) { |
Chris Lattner | 25c87e9 | 2010-01-01 18:34:40 +0000 | [diff] [blame] | 10 | %tmp34 = tail call i32 @llvm.bswap.i32( i32 %tmp ) |
| 11 | %tmp.upgrd.1 = icmp eq i32 %tmp34, 1 |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 12 | ret i1 %tmp.upgrd.1 |
Chris Lattner | e7f83dc | 2006-11-29 05:00:14 +0000 | [diff] [blame] | 13 | } |
| 14 | |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 15 | declare i32 @llvm.bswap.i32(i32) |
Reid Spencer | a5f996b | 2007-04-02 00:51:15 +0000 | [diff] [blame] | 16 | |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 17 | define i1 @test3(i64 %tmp) { |
Chris Lattner | 25c87e9 | 2010-01-01 18:34:40 +0000 | [diff] [blame] | 18 | %tmp34 = tail call i64 @llvm.bswap.i64( i64 %tmp ) |
| 19 | %tmp.upgrd.2 = icmp eq i64 %tmp34, 1 |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 20 | ret i1 %tmp.upgrd.2 |
Chris Lattner | e7f83dc | 2006-11-29 05:00:14 +0000 | [diff] [blame] | 21 | } |
| 22 | |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 23 | declare i64 @llvm.bswap.i64(i64) |
Chris Lattner | e7f83dc | 2006-11-29 05:00:14 +0000 | [diff] [blame] | 24 | |
Tanya Lattner | aa6f5c9 | 2008-03-09 08:16:40 +0000 | [diff] [blame] | 25 | declare i16 @llvm.bswap.i16(i16) |
| 26 | |
Chris Lattner | ef36dcd | 2008-06-18 04:33:20 +0000 | [diff] [blame] | 27 | ; rdar://5992453 |
| 28 | ; A & 255 |
| 29 | define i32 @test4(i32 %a) nounwind { |
| 30 | entry: |
| 31 | %tmp2 = tail call i32 @llvm.bswap.i32( i32 %a ) |
| 32 | %tmp4 = lshr i32 %tmp2, 24 |
| 33 | ret i32 %tmp4 |
| 34 | } |
| 35 | |
| 36 | ; A |
| 37 | define i32 @test5(i32 %a) nounwind { |
| 38 | entry: |
| 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 |
| 45 | define i32 @test6(i32 %a) nounwind { |
| 46 | entry: |
| 47 | %tmp2 = tail call i32 @llvm.bswap.i32( i32 %a ) |
| 48 | %tmp4 = and i32 %tmp2, 255 |
| 49 | ret i32 %tmp4 |
| 50 | } |
| 51 | |
Chris Lattner | 25c87e9 | 2010-01-01 18:34:40 +0000 | [diff] [blame] | 52 | ; PR5284 |
| 53 | declare i64 @llvm.bswap.i64(i64) |
| 54 | declare i32 @llvm.bswap.i32(i32) |
| 55 | declare i16 @llvm.bswap.i16(i16) |
| 56 | |
| 57 | define 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 | |
| 64 | define 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 Gohman | cf39be3 | 2010-02-17 00:54:58 +0000 | [diff] [blame] | 70 | |
| 71 | ; Misc: Fold bswap(undef) to undef. |
| 72 | define i64 @foo() { |
| 73 | %a = call i64 @llvm.bswap.i64(i64 undef) |
| 74 | ret i64 %a |
| 75 | } |