100 lines · plain
1 2# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass machine-cp -verify-machineinstrs -o - %s | FileCheck %s3 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: copyprop116# CHECK: bb.0:17# CHECK-NOT: $w20 = COPY18name: copyprop119body: |20 bb.0:21 liveins: $w0, $w122 $w20 = COPY $w123 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w024 RET_ReallyLR implicit $w025...26---27# The first copy is not a dead copy which is used in the second copy after the28# call.29# CHECK-LABEL: name: copyprop230# CHECK: bb.0:31# CHECK: $w20 = COPY32name: copyprop233body: |34 bb.0:35 liveins: $w0, $w136 $w20 = COPY $w137 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w038 $w0 = COPY $w2039 RET_ReallyLR implicit $w040...41---42# Both the first and second copy are dead copies which are not used.43# CHECK-LABEL: name: copyprop344# CHECK: bb.0:45# CHECK-NOT: COPY46name: copyprop347body: |48 bb.0:49 liveins: $w0, $w150 $w20 = COPY $w151 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w052 $w20 = COPY $w053 RET_ReallyLR implicit $w054...55# The second copy is removed as a NOP copy, after then the first copy become56# dead which should be removed as well.57# CHECK-LABEL: name: copyprop458# CHECK: bb.0:59# CHECK-NOT: COPY60name: copyprop461body: |62 bb.0:63 liveins: $w0, $w164 $w20 = COPY $w065 $w0 = COPY $w2066 BL @foo, csr_aarch64_aapcs, implicit $w0, implicit-def $w067 RET_ReallyLR implicit $w068...69 70# Don't try to erase any COPY which overlaps itself.71# CHECK-LABEL: name: copyprop572# CHECK: bb.0:73# CHECK: COPY killed $q26_q27_q28_q2974# CHECK: COPY killed $q28_q29_q30_q3175name: copyprop576body: |77 bb.0:78 liveins: $q26_q27_q28_q2979 $q28_q29_q30_q31 = COPY killed $q26_q27_q28_q2980 $q26_q27_q28_q29 = COPY killed $q28_q29_q30_q3181 BL @foo, csr_aarch64_aapcs, implicit killed $q26_q27_q28_q2982 RET_ReallyLR83...84 85# Don't try to analyze any COPY which overlaps itself.86# CHECK-LABEL: name: copyprop687# CHECK: bb.0:88# CHECK: COPY killed $q26_q27_q28_q2989# CHECK: $q30 = COPY $q2890name: copyprop691body: |92 bb.0:93 liveins: $q26_q27_q28_q2994 $q28_q29_q30_q31 = COPY killed $q26_q27_q28_q2995 $q30 = COPY $q2896 BL @foo, csr_aarch64_aapcs, implicit killed $q28_q29_q30_q3197 RET_ReallyLR98...99 100