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