aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2007-09-28 12:53:01 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2007-09-28 12:53:01 +0000
commit068317bfa37ec52ae25f3b2fa3194bea3e7c6027 (patch)
treeabef4520cbf512c1700dd55b6fa0632e57cce83c /test
parentfa00feb7f8f8be8fd9c17a9ea54a1ab24f34229a (diff)
downloadexternal_llvm-068317bfa37ec52ae25f3b2fa3194bea3e7c6027.zip
external_llvm-068317bfa37ec52ae25f3b2fa3194bea3e7c6027.tar.gz
external_llvm-068317bfa37ec52ae25f3b2fa3194bea3e7c6027.tar.bz2
Refactor the memcpy lowering for the x86 target.
The only generated code difference is that now we call memcpy when the size of the array is unknown. This matches GCC behavior and is better since the run time value can be arbitrarily large. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42433 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/memcpy.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/CodeGen/X86/memcpy.ll b/test/CodeGen/X86/memcpy.ll
new file mode 100644
index 0000000..97a2dd5
--- /dev/null
+++ b/test/CodeGen/X86/memcpy.ll
@@ -0,0 +1,17 @@
+; RUN: llvm-as < %s | llc -march=x86-64 | grep call.*memcpy | count 2
+
+declare void @llvm.memcpy.i64(i8*, i8*, i64, i32)
+
+define i8* @my_memcpy(i8* %a, i8* %b, i64 %n) {
+entry:
+ tail call void @llvm.memcpy.i64( i8* %a, i8* %b, i64 %n, i32 1 )
+ ret i8* %a
+}
+
+define i8* @my_memcpy2(i64* %a, i64* %b, i64 %n) {
+entry:
+ %tmp14 = bitcast i64* %a to i8*
+ %tmp25 = bitcast i64* %b to i8*
+ tail call void @llvm.memcpy.i64(i8* %tmp14, i8* %tmp25, i64 %n, i32 8 )
+ ret i8* %tmp14
+}