forked from OSchip/llvm-project
207 lines
5.0 KiB
YAML
207 lines
5.0 KiB
YAML
# 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
|
|
...
|