aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-17 19:36:00 +0000
committerChris Lattner <sabre@nondot.org>2009-03-17 19:36:00 +0000
commit0b18e59336dcb18e036540dd667fed8d17c3cc09 (patch)
tree5e6e5d3e783ba75a8e4fae7565ea30cc7655c2d1 /test
parent46d232d4bc198ce4a347e74f331a99142a02276d (diff)
downloadexternal_llvm-0b18e59336dcb18e036540dd667fed8d17c3cc09.zip
external_llvm-0b18e59336dcb18e036540dd667fed8d17c3cc09.tar.gz
external_llvm-0b18e59336dcb18e036540dd667fed8d17c3cc09.tar.bz2
Fix codegen to compute the size of an allocation by multiplying the
size by the array amount as an i32 value instead of promoting from i32 to i64 then doing the multiply. Not doing this broke wrap-around assumptions that the optimizers (validly) made. The ultimate real fix for this is to introduce i64 version of alloca and remove mallocinst. This fixes PR3829 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67093 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/x86-64-malloc.ll10
1 files changed, 10 insertions, 0 deletions
diff --git a/test/CodeGen/X86/x86-64-malloc.ll b/test/CodeGen/X86/x86-64-malloc.ll
new file mode 100644
index 0000000..4beb5c2
--- /dev/null
+++ b/test/CodeGen/X86/x86-64-malloc.ll
@@ -0,0 +1,10 @@
+; RUN: llvm-as < %s | llc -march=x86-64 | grep {shll.*3, %edi}
+; PR3829
+; The generated code should multiply by 3 (sizeof i8*) as an i32,
+; not as an i64!
+
+define i8** @test(i32 %sz) {
+ %sub = add i32 %sz, 536870911 ; <i32> [#uses=1]
+ %call = malloc i8*, i32 %sub ; <i8**> [#uses=1]
+ ret i8** %call
+}