When simplifying a call to a bitcast function, tighten up
[oota-llvm.git] / test / Transforms / InstCombine / sext-misc.ll
1 ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep sext
2 ; RUN: llvm-as < %s | llc -march=x86-64 | not grep movslq
3 ; RUN: llvm-as < %s | llc -march=x86 | not grep sar
4
5 declare i32 @llvm.ctpop.i32(i32)
6 declare i32 @llvm.ctlz.i32(i32)
7 declare i32 @llvm.cttz.i32(i32)
8
9 define i64 @foo(i32 %x) {
10   %t = call i32 @llvm.ctpop.i32(i32 %x)
11   %s = sext i32 %t to i64
12   ret i64 %s
13 }
14 define i64 @boo(i32 %x) {
15   %t = call i32 @llvm.ctlz.i32(i32 %x)
16   %s = sext i32 %t to i64
17   ret i64 %s
18 }
19 define i64 @zoo(i32 %x) {
20   %t = call i32 @llvm.cttz.i32(i32 %x)
21   %s = sext i32 %t to i64
22   ret i64 %s
23 }
24 define i64 @coo(i32 %x) {
25   %t = udiv i32 %x, 3
26   %s = sext i32 %t to i64
27   ret i64 %s
28 }
29 define i64 @moo(i32 %x) {
30   %t = urem i32 %x, 30000
31   %s = sext i32 %t to i64
32   ret i64 %s
33 }
34 define i64 @yoo(i32 %x) {
35   %u = lshr i32 %x, 3
36   %t = mul i32 %u, 3
37   %s = sext i32 %t to i64
38   ret i64 %s
39 }
40 define i64 @voo(i32 %x) {
41   %t = and i32 %x, 511
42   %u = sub i32 20000, %t
43   %s = sext i32 %u to i64
44   ret i64 %s
45 }
46 define i32 @woo(i8 %a, i32 %f, i1 %p, i32* %z) {
47   %d = lshr i32 %f, 24
48   %e = select i1 %p, i32 %d, i32 0
49   %s = trunc i32 %e to i16
50   %n = sext i16 %s to i32
51   ret i32 %n
52 }