1
2# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass machine-cp  -verify-machineinstrs  -o - %s | FileCheck %s
3
4--- |
5  define i32 @copyprop1(i32 %a, i32 %b) { ret i32 %a }
6  define i32 @copyprop2(i32 %a, i32 %b) { ret i32 %a }
7  define i32 @copyprop3(i32 %a, i32 %b) { ret i32 %a }
8  define i32 @copyprop4(i32 %a, i32 %b) { ret i32 %a }
9  declare i32 @foo(i32)
10...
11---
12# The first copy is dead copy which is not used.
13# CHECK-LABEL: name: copyprop1
14# CHECK: bb.0:
15# CHECK-NOT: %w20 = COPY
16name: copyprop1
17body: |
18  bb.0:
19    liveins: %w0,  %w1
20    %w20 = COPY %w1
21    BL @foo, csr_aarch64_aapcs, implicit %w0, implicit-def %w0
22    RET_ReallyLR implicit %w0
23...
24---
25# The first copy is not a dead copy which is used in the second copy after the
26# call.
27# CHECK-LABEL: name: copyprop2
28# CHECK: bb.0:
29# CHECK: %w20 = COPY
30name: copyprop2
31body: |
32  bb.0:
33    liveins: %w0,  %w1
34    %w20 = COPY %w1
35    BL @foo, csr_aarch64_aapcs, implicit %w0, implicit-def %w0
36    %w0 = COPY %w20
37    RET_ReallyLR implicit %w0
38...
39---
40# Both the first and second copy are dead copies which are not used.
41# CHECK-LABEL: name: copyprop3
42# CHECK: bb.0:
43# CHECK-NOT: COPY
44name: copyprop3
45body: |
46  bb.0:
47    liveins: %w0,  %w1
48    %w20 = COPY %w1
49    BL @foo, csr_aarch64_aapcs, implicit %w0, implicit-def %w0
50    %w20 = COPY %w0
51    RET_ReallyLR implicit %w0
52...
53# The second copy is removed as a NOP copy, after then the first copy become
54# dead which should be removed as well.
55# CHECK-LABEL: name: copyprop4
56# CHECK: bb.0:
57# CHECK-NOT: COPY
58name: copyprop4
59body: |
60  bb.0:
61    liveins: %w0,  %w1
62    %w20 = COPY %w0
63    %w0 = COPY %w20
64    BL @foo, csr_aarch64_aapcs, implicit %w0, implicit-def %w0
65    RET_ReallyLR implicit %w0
66...
67
68