1 ; This test makes sure that div instructions are properly eliminated.
4 ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep div
14 uint %test2(uint %A) {
15 %B = div uint %A, 8 ; => Shift
20 %B = div int 0, %A ; => 0, don't need to keep traps
25 %B = div int %A, -1 ; 0-A
29 uint %test5(uint %A) {
30 %B = div uint %A, 4294967280
31 %C = div uint %B, 4294967292
35 bool %test6(uint %A) {
37 %C = seteq uint %B, 0 ; A < 123
41 bool %test7(uint %A) {
43 %C = seteq uint %B, 2 ; A >= 20 && A < 30
47 bool %test8(ubyte %A) {
48 %B = div ubyte %A, 123
49 %C = seteq ubyte %B, 2 ; A >= 246
53 bool %test9(ubyte %A) {
54 %B = div ubyte %A, 123
55 %C = setne ubyte %B, 2 ; A < 246
59 uint %test10(uint %X, bool %C) {
60 %V = select bool %C, uint 64, uint 8
65 int %test11(int %X, bool %C) {
66 %A = select bool %C, int 1024, int 32