This really only affects pointers in high memory, and only llvm 1.9, but make a regre...
authorAndrew Lenharth <andrewl@lenharth.org>
Wed, 7 Feb 2007 22:23:47 +0000 (22:23 +0000)
committerAndrew Lenharth <andrewl@lenharth.org>
Wed, 7 Feb 2007 22:23:47 +0000 (22:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34014 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/2007-02-07-PointerCast.ll [new file with mode: 0644]

diff --git a/test/Transforms/InstCombine/2007-02-07-PointerCast.ll b/test/Transforms/InstCombine/2007-02-07-PointerCast.ll
new file mode 100644 (file)
index 0000000..1f7f199
--- /dev/null
@@ -0,0 +1,28 @@
+;RUN: llvm-upgrade < %s | llvm-as | opt -instcombine |llvm-dis |grep zext
+
+;Make sure the uint isn't removed.
+;instcombine in llvm 1.9 was dropping the uint cast which was causing a sign
+;extend
+;this only affected code with pointers in the high half of memory, so it wasn't
+;noticed much :)
+;compile a kernel though...
+
+target datalayout = "e-p:32:32"
+target endian = little
+target pointersize = 32
+
+%str = internal constant [6 x sbyte] c"%llx\0A\00"
+
+implementation   ; Functions:
+
+declare int %printf(sbyte*, ...)
+
+int %main(int %x, sbyte** %a) {
+entry:
+        %tmp = getelementptr [6 x sbyte]* %str, int 0, uint 0 
+        %tmp1 = load sbyte** %a
+       %tmp2 = cast sbyte* %tmp1 to uint               ; <uint> [#uses=1]
+       %tmp3 = cast uint %tmp2 to long         ; <long> [#uses=1]
+        %tmp = call int (sbyte*, ...)* %printf( sbyte* %tmp, long %tmp3 )
+        ret int 0
+}