2002-05-02 18:16:39 +02:00
|
|
|
; This test contains two cast instructions that cannot be eliminated. If the
|
|
|
|
; input of the "test" function is negative, it should be correctly converted
|
|
|
|
; to a 32 bit version of the number with all upper 16 bits clear (ushort->uint
|
|
|
|
; involves no sign extension). Optimizing this to a single cast is invalid!
|
|
|
|
;
|
2003-09-16 17:35:14 +02:00
|
|
|
; RUN: llvm-as < %s | opt -raise -q | lli
|
2002-05-02 18:16:39 +02:00
|
|
|
;
|
|
|
|
implementation
|
|
|
|
|
|
|
|
uint "test"(short %argc)
|
|
|
|
begin
|
|
|
|
%cast223 = cast short %argc to ushort ; <ushort> [#uses=1]
|
|
|
|
%cast114 = cast ushort %cast223 to uint ; <uint> [#uses=1]
|
|
|
|
ret uint %cast114
|
|
|
|
end
|
|
|
|
|
|
|
|
int "main"()
|
|
|
|
begin
|
|
|
|
%Ret = call uint %test(short -1)
|
|
|
|
%test = cast uint %Ret to int
|
|
|
|
%Res = seteq int %test, -1 ; If it returns -1 as int, it's a failure
|
|
|
|
%Res = cast bool %Res to int
|
|
|
|
ret int %Res
|
|
|
|
end
|