# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -O3 -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown \ # RUN: -mcpu=pwr9 -simplify-mir -run-pass=machine-cp %s -o - | FileCheck %s # Normal case --- name: test0 alignment: 4 tracksRegLiveness: true body: | bb.0.entry: ; CHECK-LABEL: name: test0 ; CHECK: $x3 = LI8 1024 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x4 = LI8 1024 $x3 = COPY renamable killed $x4 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... # Not in terminal BBs --- name: test1 alignment: 4 tracksRegLiveness: true body: | ; CHECK-LABEL: name: test1 ; CHECK: bb.0.entry: ; CHECK: renamable $x4 = LI8 42 ; CHECK: B %bb.1 ; CHECK: bb.1: ; CHECK: liveins: $x4 ; CHECK: $x3 = COPY killed renamable $x4 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 bb.0.entry: successors: %bb.1 renamable $x5 = LI8 42 renamable $x4 = COPY renamable killed $x5 B %bb.1 bb.1: liveins: $x4 $x3 = COPY renamable killed $x4 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... # Use reserved register --- name: test2 alignment: 4 tracksRegLiveness: true body: | bb.0.entry: ; CHECK-LABEL: name: test2 ; CHECK: renamable $x4 = LI8 1024 ; CHECK: $x13 = COPY killed renamable $x4 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit undef $x3 renamable $x4 = LI8 1024 $x13 = COPY renamable killed $x4 BLR8 implicit $lr8, implicit undef $rm, implicit undef $x3 ... # Intermediate read of copy's src --- name: test3 alignment: 4 tracksRegLiveness: true body: | bb.0.entry: ; CHECK-LABEL: name: test3 ; CHECK: renamable $x4 = LI8 0 ; CHECK: renamable $x5 = ADDI8 $x4, 1 ; CHECK: $x3 = COPY killed renamable $x4 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x4 = LI8 0 renamable $x5 = ADDI8 $x4, 1 $x3 = COPY renamable killed $x4 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... # Intermediate read of copy's def --- name: test4 alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 ; CHECK-LABEL: name: test4 ; CHECK: liveins: $x3 ; CHECK: renamable $x4 = LI8 0 ; CHECK: renamable $x5 = ADDI8 $x3, 1 ; CHECK: $x3 = COPY killed renamable $x4 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x4 = LI8 0 renamable $x5 = ADDI8 $x3, 1 $x3 = COPY renamable killed $x4 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... # Intermiediate clobber of copy's def --- name: test5 alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x3, $x5 ; CHECK-LABEL: name: test5 ; CHECK: liveins: $x3, $x5 ; CHECK: renamable $x4 = LI8 0 ; CHECK: renamable $x3 = ADDI8 $x5, 1 ; CHECK: $x3 = COPY killed renamable $x4 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x4 = LI8 0 renamable $x3 = ADDI8 $x5, 1 $x3 = COPY renamable killed $x4 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: iterative_deletion alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x5 ; CHECK-LABEL: name: iterative_deletion ; CHECK: liveins: $x5 ; CHECK: renamable $x4 = ADDI8 killed renamable $x5, 1 ; CHECK: $x3 = COPY $x4 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x6 = ADDI8 renamable killed $x5, 1 renamable $x4 = COPY renamable killed $x6 renamable $x7 = COPY renamable killed $x4 $x3 = COPY renamable killed $x7 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: Enter alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x4, $x7 ; CHECK-LABEL: name: Enter ; CHECK: liveins: $x4, $x7 ; CHECK: renamable $x5 = COPY killed renamable $x7 ; CHECK: renamable $x7 = ADDI8 killed renamable $x4, 1 ; CHECK: $x3 = ADD8 killed renamable $x5, killed renamable $x7 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x5 = COPY killed renamable $x7 renamable $x6 = ADDI8 killed renamable $x4, 1 renamable $x7 = COPY killed renamable $x6 $x3 = ADD8 renamable killed $x5, renamable killed $x7 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: foo alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x4, $x7 ; CHECK-LABEL: name: foo ; CHECK: liveins: $x4, $x7 ; CHECK: renamable $x5 = COPY killed renamable $x7 ; CHECK: renamable $x7 = ADDI8 renamable $x4, 1 ; CHECK: renamable $x6 = ADDI8 killed $x4, 2 ; CHECK: $x3 = ADD8 killed renamable $x5, killed renamable $x6 ; CHECK: $x3 = ADD8 $x3, killed renamable $x7 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x5 = COPY killed renamable $x7 renamable $x6 = ADDI8 renamable $x4, 1 renamable $x7 = COPY killed renamable $x6 renamable $x8 = ADDI8 killed $x4, 2 renamable $x6 = COPY killed renamable $x8 $x3 = ADD8 renamable killed $x5, renamable killed $x6 $x3 = ADD8 $x3, renamable killed $x7 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: bar alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x4, $x7 ; CHECK-LABEL: name: bar ; CHECK: liveins: $x4, $x7 ; CHECK: renamable $x5 = COPY killed renamable $x7 ; CHECK: renamable $x7 = ADDI8 renamable $x4, 1 ; CHECK: renamable $x8 = COPY killed renamable $x7 ; CHECK: renamable $x7 = ADDI8 renamable $x5, 2 ; CHECK: $x3 = ADD8 killed renamable $x5, killed renamable $x7 ; CHECK: $x3 = ADD8 $x3, killed renamable $x8 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x5 = COPY killed renamable $x7 renamable $x6 = ADDI8 renamable $x4, 1 renamable $x7 = COPY killed renamable $x6 renamable $x8 = COPY killed renamable $x7 renamable $x6 = ADDI8 renamable $x5, 2 renamable $x7 = COPY killed renamable $x6 $x3 = ADD8 renamable killed $x5, renamable killed $x7 $x3 = ADD8 $x3, renamable killed $x8 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: bogus alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x7 ; CHECK-LABEL: name: bogus ; CHECK: liveins: $x7 ; CHECK: renamable $x5 = COPY renamable $x7 ; CHECK: renamable $x4 = ADDI8 $x7, 1 ; CHECK: renamable $x6 = ADDI8 renamable $x5, 2 ; CHECK: $x3 = ADD8 killed renamable $x4, killed renamable $x5 ; CHECK: $x3 = ADD8 $x3, killed renamable $x6 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x5 = COPY killed renamable $x7 renamable $x6 = ADDI8 renamable $x5, 1 renamable $x4 = COPY killed renamable $x6 renamable $x7 = COPY killed renamable $x4 renamable $x6 = ADDI8 renamable $x5, 2 renamable $x4 = COPY killed renamable $x7 $x3 = ADD8 renamable killed $x4, renamable killed $x5 $x3 = ADD8 $x3, renamable killed $x6 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: foobar alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x7 ; CHECK-LABEL: name: foobar ; CHECK: liveins: $x7 ; CHECK: renamable $x4 = ADDI8 $x7, 1 ; CHECK: renamable $x8 = COPY killed renamable $x4 ; CHECK: renamable $x4 = ADDI8 $x7, 2 ; CHECK: $x3 = ADD8 killed renamable $x4, $x7 ; CHECK: $x3 = ADD8 $x3, killed renamable $x8 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x5 = COPY killed renamable $x7 renamable $x6 = ADDI8 renamable $x5, 1 renamable $x4 = COPY killed renamable $x6 renamable $x8 = COPY killed renamable $x4 renamable $x6 = ADDI8 renamable $x5, 2 renamable $x4 = COPY killed renamable $x6 $x3 = ADD8 renamable killed $x4, renamable killed $x5 $x3 = ADD8 $x3, renamable killed $x8 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ... --- name: cross_call alignment: 4 tracksRegLiveness: true body: | bb.0.entry: liveins: $x2, $x3, $x20 ; CHECK-LABEL: name: cross_call ; CHECK: liveins: $x2, $x3, $x20 ; CHECK: renamable $x20 = LI8 1024 ; CHECK: BL8_NOP @foo, csr_ppc64_altivec, implicit-def $lr8, implicit $rm, implicit $x3, implicit-def $x3, implicit $x2 ; CHECK: $x3 = COPY killed renamable $x20 ; CHECK: BLR8 implicit $lr8, implicit undef $rm, implicit $x3 renamable $x20 = LI8 1024 BL8_NOP @foo, csr_ppc64_altivec, implicit-def $lr8, implicit $rm, implicit $x3, implicit-def $x3, implicit $x2 $x3 = COPY renamable killed $x20 BLR8 implicit $lr8, implicit undef $rm, implicit $x3 ...