llvm-6502/test/Transforms/InstCombine/cast.ll
Chris Lattner a73fede714 New testcases
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7240 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-22 21:44:06 +00:00

92 lines
1.9 KiB
LLVM

; Tests to make sure elimination of casts is working correctly
; RUN: as < %s | opt -instcombine -die | dis | grep '%c' | not grep cast
implementation
int %test1(int %A) {
%c1 = cast int %A to uint
%c2 = cast uint %c1 to int
ret int %c2
}
ulong %test2(ubyte %A) {
%c1 = cast ubyte %A to ushort
%c2 = cast ushort %c1 to uint
%Ret = cast uint %c2 to ulong
ret ulong %Ret
}
ulong %test3(ulong %A) { ; This function should just use bitwise AND
%c1 = cast ulong %A to ubyte
%c2 = cast ubyte %c1 to ulong
ret ulong %c2
}
uint %test4(int %A, int %B) {
%COND = setlt int %A, %B
%c = cast bool %COND to ubyte ; Booleans are unsigned integrals
%result = cast ubyte %c to uint ; for the cast elim purpose
ret uint %result
}
int %test5(bool %B) {
%c = cast bool %B to ubyte ; This cast should get folded into
%result = cast ubyte %c to int ; this cast
ret int %result
}
int %test6(ulong %A) {
%c1 = cast ulong %A to uint
%res = cast uint %c1 to int
ret int %res
}
long %test7(bool %A) {
%c1 = cast bool %A to int
%res = cast int %c1 to long
ret long %res
}
long %test8(sbyte %A) {
%c1 = cast sbyte %A to ulong
%res = cast ulong %c1 to long
ret long %res
}
short %test9(short %A) {
%c1 = cast short %A to int
%c2 = cast int %c1 to short
ret short %c2
}
short %test10(short %A) {
%c1 = cast short %A to uint
%c2 = cast uint %c1 to short
ret short %c2
}
bool %test11(ubyte %A, ubyte %B) {
%C = sub ubyte %A, %B
%cD = cast ubyte %C to bool ; == setne A, B
ret bool %cD
}
bool %test12(ubyte %A) {
%B = add ubyte %A, 255
%c = cast ubyte %B to bool ; === A != 1
ret bool %c
}
bool %test13(ubyte %A, ubyte %b) {
%B = add ubyte %A, %b
%c = cast ubyte %B to bool ; === A != -b
ret bool %c
}
bool %test14(ubyte %A) {
%B = xor ubyte %A, 4
%c = cast ubyte %B to bool
ret bool %c
}