From a38ef97d0b121f6a42da0daeae3bea16b857c899 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 2 May 2002 16:16:39 +0000 Subject: [PATCH] New testcase for bug found by Vikram git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2426 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../2002-05-02-BadCastElimination.ll | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 test/Transforms/LevelRaise/2002-05-02-BadCastElimination.ll diff --git a/test/Transforms/LevelRaise/2002-05-02-BadCastElimination.ll b/test/Transforms/LevelRaise/2002-05-02-BadCastElimination.ll new file mode 100644 index 00000000000..d78a9466669 --- /dev/null +++ b/test/Transforms/LevelRaise/2002-05-02-BadCastElimination.ll @@ -0,0 +1,24 @@ +; 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! +; +; RUN: as < %s | opt -raise -q | lli -abort-on-exception +; +implementation + +uint "test"(short %argc) +begin + %cast223 = cast short %argc to ushort ; [#uses=1] + %cast114 = cast ushort %cast223 to 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