From bc9a28dd544e37074693333ea96c508a3d3bc3b4 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 6 Dec 2009 05:29:56 +0000 Subject: constant fold loads from memcpy's from global constants. This is important because clang lowers nontrivial automatic struct/array inits to memcpy from a global array. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90698 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/GVN/rle.ll | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'test/Transforms') diff --git a/test/Transforms/GVN/rle.ll b/test/Transforms/GVN/rle.ll index af02557..e667eec 100644 --- a/test/Transforms/GVN/rle.ll +++ b/test/Transforms/GVN/rle.ll @@ -187,8 +187,24 @@ Cont: ; CHECK: ret i16 %A } +@GCst = constant {i32, float, i32 } { i32 42, float 14., i32 97 } + +; memset -> float forwarding. +define float @memcpy_to_float_local(float* %A) nounwind ssp { +entry: + %conv = bitcast float* %A to i8* ; [#uses=1] + tail call void @llvm.memcpy.i64(i8* %conv, i8* bitcast ({i32, float, i32 }* @GCst to i8*), i64 12, i32 1) + %arrayidx = getelementptr inbounds float* %A, i64 1 ; [#uses=1] + %tmp2 = load float* %arrayidx ; [#uses=1] + ret float %tmp2 +; CHECK: @memcpy_to_float_local +; CHECK-NOT: load +; CHECK: ret float 1.400000e+01 +} + declare void @llvm.memset.i64(i8* nocapture, i8, i64, i32) nounwind +declare void @llvm.memcpy.i64(i8* nocapture, i8* nocapture, i64, i32) nounwind -- cgit v1.1