aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms/InstCombine/2007-02-07-PointerCast.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/InstCombine/2007-02-07-PointerCast.ll')
-rw-r--r--test/Transforms/InstCombine/2007-02-07-PointerCast.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/2007-02-07-PointerCast.ll b/test/Transforms/InstCombine/2007-02-07-PointerCast.ll
new file mode 100644
index 0000000..f38b4c1
--- /dev/null
+++ b/test/Transforms/InstCombine/2007-02-07-PointerCast.ll
@@ -0,0 +1,26 @@
+;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
+}