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 define i32 @copyprop5(i32 %a, i32 %b) { ret i32 %a } 10 define i32 @copyprop6(i32 %a, i32 %b) { ret i32 %a } 11 declare i32 @foo(i32) 12... 13--- 14# The first copy is dead copy which is not used. 15# CHECK-LABEL: name: copyprop1 16# CHECK: bb.0: 17# CHECK-NOT: $w20 = COPY 18name: copyprop1 19body: | 20 bb.0: 21 liveins: $w0, $w1 22 $w20 = COPY $w1 23 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w0 24 RET_ReallyLR implicit $w0 25... 26--- 27# The first copy is not a dead copy which is used in the second copy after the 28# call. 29# CHECK-LABEL: name: copyprop2 30# CHECK: bb.0: 31# CHECK: $w20 = COPY 32name: copyprop2 33body: | 34 bb.0: 35 liveins: $w0, $w1 36 $w20 = COPY $w1 37 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w0 38 $w0 = COPY $w20 39 RET_ReallyLR implicit $w0 40... 41--- 42# Both the first and second copy are dead copies which are not used. 43# CHECK-LABEL: name: copyprop3 44# CHECK: bb.0: 45# CHECK-NOT: COPY 46name: copyprop3 47body: | 48 bb.0: 49 liveins: $w0, $w1 50 $w20 = COPY $w1 51 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w0 52 $w20 = COPY $w0 53 RET_ReallyLR implicit $w0 54... 55# The second copy is removed as a NOP copy, after then the first copy become 56# dead which should be removed as well. 57# CHECK-LABEL: name: copyprop4 58# CHECK: bb.0: 59# CHECK-NOT: COPY 60name: copyprop4 61body: | 62 bb.0: 63 liveins: $w0, $w1 64 $w20 = COPY $w0 65 $w0 = COPY $w20 66 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w0 67 RET_ReallyLR implicit $w0 68... 69 70# Don't try to erase any COPY which overlaps itself. 71# CHECK-LABEL: name: copyprop5 72# CHECK: bb.0: 73# CHECK: COPY killed $q26_q27_q28_q29 74# CHECK: COPY killed $q28_q29_q30_q31 75name: copyprop5 76body: | 77 bb.0: 78 liveins: $q26_q27_q28_q29 79 $q28_q29_q30_q31 = COPY killed $q26_q27_q28_q29 80 $q26_q27_q28_q29 = COPY killed $q28_q29_q30_q31 81 BL @foo, csr_aarch64_aapcs, implicit killed $q26_q27_q28_q29 82 RET_ReallyLR 83... 84 85# Don't try to analyze any COPY which overlaps itself. 86# CHECK-LABEL: name: copyprop6 87# CHECK: bb.0: 88# CHECK: COPY killed $q26_q27_q28_q29 89# CHECK: $q30 = COPY $q28 90name: copyprop6 91body: | 92 bb.0: 93 liveins: $q26_q27_q28_q29 94 $q28_q29_q30_q31 = COPY killed $q26_q27_q28_q29 95 $q30 = COPY $q28 96 BL @foo, csr_aarch64_aapcs, implicit killed $q28_q29_q30_q31 97 RET_ReallyLR 98... 99 100