# RUN: llc -mtriple=ppc64-- -run-pass scavenger-test -verify-machineinstrs -o - %s | FileCheck %s --- # CHECK-LABEL: name: noscav0 name: noscav0 tracksRegLiveness: true body: | bb.0: ; CHECK: [[REG0:%r[0-9]+]] = LI 42 ; CHECK-NEXT: NOP implicit killed [[REG0]] %0 : gprc = LI 42 NOP implicit %0 ; CHECK: [[REG1:%r[0-9]+]] = LI 42 ; CHECK-NEXT: NOP ; CHECK-NEXT: NOP implicit [[REG1]] ; CHECK-NEXT: NOP ; CHECK-NEXT: NOP implicit killed [[REG1]] %1 : gprc = LI 42 NOP NOP implicit %1 NOP NOP implicit %1 ; CHECK: [[REG2:%r[0-9]+]] = LI 42 ; CHECK-NEXT: NOP implicit [[REG2]] %2 : gprc = LI 42 NOP implicit %2 %x0 = IMPLICIT_DEF %x1 = IMPLICIT_DEF %x2 = IMPLICIT_DEF %x3 = IMPLICIT_DEF %x4 = IMPLICIT_DEF %x27 = IMPLICIT_DEF %x28 = IMPLICIT_DEF %x29 = IMPLICIT_DEF %x30 = IMPLICIT_DEF ; CHECK-NOT: %x0 = LI 42 ; CHECK-NOT: %x1 = LI 42 ; CHECK-NOT: %x2 = LI 42 ; CHECK-NOT: %x3 = LI 42 ; CHECK-NOT: %x4 = LI 42 ; CHECK-NOT: %x5 = LI 42 ; CHECK-NOT: %x27 = LI 42 ; CHECK-NOT: %x28 = LI 42 ; CHECK-NOT: %x29 = LI 42 ; CHECK-NOT: %x30 = LI 42 ; CHECK: [[REG3:%r[0-9]+]] = LI 42 ; CHECK-NEXT: %x5 = IMPLICIT_DEF ; CHECK-NEXT: NOP implicit killed [[REG2]] ; CHECK-NEXT: NOP implicit killed [[REG3]] %3 : gprc = LI 42 %x5 = IMPLICIT_DEF NOP implicit %2 NOP implicit %3 NOP implicit %x0 NOP implicit %x1 NOP implicit %x2 NOP implicit %x3 NOP implicit %x4 NOP implicit %x5 NOP implicit %x27 NOP implicit %x28 NOP implicit %x29 NOP implicit %x30 ... --- # CHECK-LABEL: name: scav0 name: scav0 tracksRegLiveness: true stack: # variable-sized object should be a reason to reserve an emergency spillslot # in the RegScavenger - { id: 0, type: variable-sized, offset: -32, alignment: 1 } body: | bb.0: %x0 = IMPLICIT_DEF %x1 = IMPLICIT_DEF %x2 = IMPLICIT_DEF %x3 = IMPLICIT_DEF %x4 = IMPLICIT_DEF %x5 = IMPLICIT_DEF %x6 = IMPLICIT_DEF %x7 = IMPLICIT_DEF %x8 = IMPLICIT_DEF %x9 = IMPLICIT_DEF %x10 = IMPLICIT_DEF %x11 = IMPLICIT_DEF %x12 = IMPLICIT_DEF %x13 = IMPLICIT_DEF %x14 = IMPLICIT_DEF %x15 = IMPLICIT_DEF %x16 = IMPLICIT_DEF %x17 = IMPLICIT_DEF %x18 = IMPLICIT_DEF %x19 = IMPLICIT_DEF %x20 = IMPLICIT_DEF %x21 = IMPLICIT_DEF %x22 = IMPLICIT_DEF %x23 = IMPLICIT_DEF %x24 = IMPLICIT_DEF %x25 = IMPLICIT_DEF %x26 = IMPLICIT_DEF %x27 = IMPLICIT_DEF %x28 = IMPLICIT_DEF %x29 = IMPLICIT_DEF %x30 = IMPLICIT_DEF ; CHECK: STD killed [[SPILLEDREG:%x[0-9]+]] ; CHECK: [[SPILLEDREG]] = LI8 42 ; CHECK: NOP implicit killed [[SPILLEDREG]] ; CHECK: [[SPILLEDREG]] = LD %0 : g8rc = LI8 42 NOP implicit %0 NOP implicit %x0 NOP implicit %x1 NOP implicit %x2 NOP implicit %x3 NOP implicit %x4 NOP implicit %x5 NOP implicit %x6 NOP implicit %x7 NOP implicit %x8 NOP implicit %x9 NOP implicit %x10 NOP implicit %x11 NOP implicit %x12 NOP implicit %x13 NOP implicit %x14 NOP implicit %x15 NOP implicit %x16 NOP implicit %x17 NOP implicit %x18 NOP implicit %x19 NOP implicit %x20 NOP implicit %x21 NOP implicit %x22 NOP implicit %x23 NOP implicit %x24 NOP implicit %x25 NOP implicit %x26 NOP implicit %x27 NOP implicit %x28 NOP implicit %x29 NOP implicit %x30 ... --- # Check for bug where we would refuse to spill before the first instruction in a # block. # CHECK-LABEL: name: spill_at_begin # CHECK: bb.0: # CHECK: liveins: # CHECK: STD killed [[REG:%x[0-9]+]]{{.*}}(store 8 into %stack.{{[0-9]+}}) # CHECK: [[REG]] = LIS8 0 # CHECK: [[REG]] = ORI8 killed [[REG]], 48 # CHECK: NOP implicit killed [[REG]] # CHEKC: [[REG]] = LD{{.*}}(load 8 from %stack.{{[0-9]+}}) name: spill_at_begin tracksRegLiveness: true stack: # variable-sized object should be a reason to reserve an emergency spillslot # in the RegScavenger - { id: 0, type: variable-sized, offset: -32, alignment: 1 } body: | bb.0: liveins: %x0, %x1, %x2, %x3, %x4, %x5, %x6, %x7, %x8, %x9, %x10, %x11, %x12, %x13, %x14, %x15, %x16, %x17, %x18, %x19, %x20, %x21, %x22, %x23, %x24, %x25, %x26, %x27, %x28, %x29, %x30, %x31 %0 : g8rc = LIS8 0 %1 : g8rc = ORI8 %0, 48 NOP implicit %1 NOP implicit %x0 NOP implicit %x1 NOP implicit %x2 NOP implicit %x3 NOP implicit %x4 NOP implicit %x5 NOP implicit %x6 NOP implicit %x7 NOP implicit %x8 NOP implicit %x9 NOP implicit %x10 NOP implicit %x11 NOP implicit %x12 NOP implicit %x13 NOP implicit %x14 NOP implicit %x15 NOP implicit %x16 NOP implicit %x17 NOP implicit %x18 NOP implicit %x19 NOP implicit %x20 NOP implicit %x21 NOP implicit %x22 NOP implicit %x23 NOP implicit %x24 NOP implicit %x25 NOP implicit %x26 NOP implicit %x27 NOP implicit %x28 NOP implicit %x29 NOP implicit %x30 NOP implicit %x31 ...