blob: 1d5c2862819e932ee92d6da97101ae327185631e [file] [log] [blame]
Chris Lattner5c9040e2002-04-29 22:24:24 +00001; This test makes sure that mul instructions are properly eliminated.
2;
Reid Spencerd0e30dc2006-12-02 04:23:10 +00003; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep mul
Reid Spencerede8c3b2007-04-15 07:38:21 +00004; END.
Chris Lattner5c9040e2002-04-29 22:24:24 +00005
6implementation
7
Chris Lattner2fa75772003-03-10 19:44:01 +00008int %test1(int %A) {
Chris Lattner5c9040e2002-04-29 22:24:24 +00009 %B = mul int %A, 1
10 ret int %B
Chris Lattner2fa75772003-03-10 19:44:01 +000011}
Chris Lattner5c9040e2002-04-29 22:24:24 +000012
Chris Lattner2fa75772003-03-10 19:44:01 +000013int %test2(int %A) {
Chris Lattner5c9040e2002-04-29 22:24:24 +000014 %B = mul int %A, 2 ; Should convert to an add instruction
15 ret int %B
Chris Lattner2fa75772003-03-10 19:44:01 +000016}
Chris Lattner5c9040e2002-04-29 22:24:24 +000017
Chris Lattner2fa75772003-03-10 19:44:01 +000018int %test3(int %A) {
Chris Lattner5c9040e2002-04-29 22:24:24 +000019 %B = mul int %A, 0 ; This should disappear entirely
20 ret int %B
Chris Lattner2fa75772003-03-10 19:44:01 +000021}
Chris Lattner5c9040e2002-04-29 22:24:24 +000022
Chris Lattnerc5fccf32003-02-18 19:28:47 +000023double %test4(double %A) {
24 %B = mul double 1.0, %A ; This is safe for FP
25 ret double %B
26}
27
28int %test5(int %A) {
29 %B = mul int %A, 8
30 ret int %B
31}
Chris Lattnerf67d52d2003-03-10 22:43:56 +000032
Chris Lattner63912f02003-06-25 17:10:34 +000033ubyte %test6(ubyte %A) {
Chris Lattnerf67d52d2003-03-10 22:43:56 +000034 %B = mul ubyte %A, 8
Chris Lattner4be846d2003-06-28 22:31:37 +000035 %C = mul ubyte %B, 8
Chris Lattnerf67d52d2003-03-10 22:43:56 +000036 ret ubyte %C
37}
Chris Lattner63912f02003-06-25 17:10:34 +000038
39int %test7(int %i) {
40 %tmp = mul int %i, -1 ; %tmp = sub 0, %i
41 ret int %tmp
42}
43
44ulong %test8(ulong %i) {
45 %j = mul ulong %i, 18446744073709551615 ; tmp = sub 0, %i
46 ret ulong %j
47}
Chris Lattner80e8c462003-09-11 22:23:48 +000048
49uint %test9(uint %i) {
50 %j = mul uint %i, 4294967295 ; %j = sub 0, %i
51 ret uint %j
52}
Chris Lattnerd0ffbe12004-02-23 05:38:47 +000053
54uint %test10(int %a, uint %b) {
55 %c = setlt int %a, 0
56 %d = cast bool %c to uint
57 %e = mul uint %d, %b ; e = b & (a >> 31)
58 ret uint %e
59}
60
Chris Lattnerfb302df2004-02-23 05:59:52 +000061uint %test11(int %a, uint %b) {
62 %c = setle int %a, -1
63 %d = cast bool %c to uint
64 %e = mul uint %d, %b ; e = b & (a >> 31)
65 ret uint %e
66}
67
Chris Lattnerd8bdf532007-07-16 04:09:00 +000068uint %test12(ubyte %a, uint %b) {
Chris Lattner6ddaa242004-02-23 06:37:33 +000069 %c = setgt ubyte %a, 127
70 %d = cast bool %c to uint
71 %e = mul uint %d, %b ; e = b & (a >> 31)
72 ret uint %e
73}
74