new testcases
[oota-llvm.git] / test / Transforms / InstCombine / div.ll
1 ; This test makes sure that div instructions are properly eliminated.
2 ;
3
4 ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep div
5
6 implementation
7
8 int %test1(int %A) {
9         %B = div int %A, 1
10         ret int %B
11 }
12
13 uint %test2(uint %A) {
14         %B = div uint %A, 8   ; => Shift
15         ret uint %B
16 }
17
18 int %test3(int %A) {
19         %B = div int 0, %A    ; => 0, don't need to keep traps
20         ret int %B
21 }
22
23 int %test4(int %A) {
24         %B = div int %A, -1    ; 0-A
25         ret int %B
26 }
27
28 uint %test5(uint %A) {
29         %B = div uint %A, 4294967280
30         %C = div uint %B, 4294967292
31         ret uint %C
32 }
33
34 bool %test6(uint %A) {
35         %B = div uint %A, 123
36         %C = seteq uint %B, 0   ; A < 123
37         ret bool %C
38
39
40 bool %test7(uint %A) {
41         %B = div uint %A, 10
42         %C = seteq uint %B, 2    ; A >= 20 && A < 30
43         ret bool %C
44 }
45
46 bool %test8(ubyte %A) {
47         %B = div ubyte %A, 123
48         %C = seteq ubyte %B, 2   ; A >= 246
49         ret bool %C
50
51
52 bool %test9(ubyte %A) {
53         %B = div ubyte %A, 123
54         %C = setne ubyte %B, 2   ; A < 246
55         ret bool %C
56
57
58 uint %test10(uint %X, bool %C) {
59         %V = select bool %C, uint 64, uint 8
60         %R = div uint %X, %V
61         ret uint %R
62 }
63
64 uint %test10(uint %X, ubyte %B) {
65         %Amt = shl uint 32, ubyte %B
66         %V = div uint %X, %Amt
67         ret uint %V
68 }
69