1 ; Tests to make sure elimination of casts is working correctly
3 ; RUN: llvm-as < %s | opt -instcombine -die | llvm-dis | grep '%c' | not grep cast
5 %inbuf = external global [32832 x ubyte]
10 %c1 = cast int %A to uint
11 %c2 = cast uint %c1 to int
15 ulong %test2(ubyte %A) {
16 %c1 = cast ubyte %A to ushort
17 %c2 = cast ushort %c1 to uint
18 %Ret = cast uint %c2 to ulong
22 ulong %test3(ulong %A) { ; This function should just use bitwise AND
23 %c1 = cast ulong %A to ubyte
24 %c2 = cast ubyte %c1 to ulong
28 uint %test4(int %A, int %B) {
29 %COND = setlt int %A, %B
30 %c = cast bool %COND to ubyte ; Booleans are unsigned integrals
31 %result = cast ubyte %c to uint ; for the cast elim purpose
36 %c = cast bool %B to ubyte ; This cast should get folded into
37 %result = cast ubyte %c to int ; this cast
41 int %test6(ulong %A) {
42 %c1 = cast ulong %A to uint
43 %res = cast uint %c1 to int
47 long %test7(bool %A) {
48 %c1 = cast bool %A to int
49 %res = cast int %c1 to long
53 long %test8(sbyte %A) {
54 %c1 = cast sbyte %A to ulong
55 %res = cast ulong %c1 to long
59 short %test9(short %A) {
60 %c1 = cast short %A to int
61 %c2 = cast int %c1 to short
65 short %test10(short %A) {
66 %c1 = cast short %A to uint
67 %c2 = cast uint %c1 to short
71 declare void %varargs(int, ...)
73 void %test11(int* %P) {
74 %c = cast int* %P to short*
75 call void(int, ...)* %varargs(int 5, short* %c)
80 %p = malloc [4 x sbyte]
81 %c = cast [4 x sbyte]* %p to int*
85 ubyte *%test13(long %A) {
86 %c = getelementptr [0 x ubyte]* cast ([32832 x ubyte]* %inbuf to [0 x ubyte]*), long 0, long %A
90 bool %test14(sbyte %A) {
91 %B = cast sbyte %A to ubyte
92 %X = setlt ubyte %B, 128 ; setge %A, 0
96 bool %test15(ubyte %A) {
97 %B = cast ubyte %A to sbyte
98 %X = setlt sbyte %B, 0 ; setgt %A, 127