OSDN Git Service

[WebAssembly] Only emit stack pointer delcaration in BinFormatWasm assembly
[android-x86/external-llvm.git] / test / Transforms / MemCpyOpt / memcpy-invoke-memcpy.ll
1 ; RUN: opt < %s -memcpyopt -S | FileCheck %s
2 ; Test memcpy-memcpy dependencies across invoke edges.
3
4 ; Test that memcpyopt works across the non-unwind edge of an invoke.
5
6 define hidden void @test_normal(i8* noalias %dst, i8* %src) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
7 entry:
8   %temp = alloca i8, i32 64
9   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %temp, i8* nonnull %src, i64 64, i32 8, i1 false)
10 ; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %temp, i8* nonnull %src, i64 64, i32 8, i1 false)
11   invoke void @invoke_me()
12           to label %try.cont unwind label %lpad
13
14 lpad:
15   landingpad { i8*, i32 }
16           catch i8* null
17   ret void
18
19 try.cont:
20   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %temp, i64 64, i32 8, i1 false)
21 ; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 64, i32 8, i1 false)
22   ret void
23 }
24
25 ; Test that memcpyopt works across the unwind edge of an invoke.
26
27 define hidden void @test_unwind(i8* noalias %dst, i8* %src) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
28 entry:
29   %temp = alloca i8, i32 64
30   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %temp, i8* nonnull %src, i64 64, i32 8, i1 false)
31 ; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %temp, i8* nonnull %src, i64 64, i32 8, i1 false)
32   invoke void @invoke_me()
33           to label %try.cont unwind label %lpad
34
35 lpad:
36   landingpad { i8*, i32 }
37           catch i8* null
38   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %temp, i64 64, i32 8, i1 false)
39 ; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 64, i32 8, i1 false)
40   ret void
41
42 try.cont:
43   ret void
44 }
45
46 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1)
47 declare i32 @__gxx_personality_v0(...)
48 declare void @invoke_me() readnone