mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
2b032e463e
This patch adjusts the placement of the bundle unpacking to just before code emission. In particular, this means bundle unpacking happens AFTER the machine outliner. With the previous position, the machine outliner may outline parts of a bundle, which breaks them up. This is an issue for BLR_RVMARKER handling, as illustrated by the rvmarker-pseudo-expansion-and-outlining.mir test case. The machine outliner should not break up the bundles created during pseudo expansion. This should fix PR49082. Reviewed By: SjoerdMeijer Differential Revision: https://reviews.llvm.org/D96294
80 lines
1.8 KiB
YAML
80 lines
1.8 KiB
YAML
# RUN: llc -enable-machine-outliner -start-before=aarch64-expand-pseudo -mtriple=arm64-apple-ios -o - %s | FileCheck %s
|
|
#
|
|
# The calls to _cb1 & _cb2 should be followed by the marker instruction
|
|
# 'mov x29, x29'. The marker should not get outlined.
|
|
#
|
|
# CHECK-LABEL: _fn1:
|
|
# CHECK: bb.0:
|
|
# CHECK: bl _cb1
|
|
# CHECK-NEXT: mov x29, x29
|
|
# CHECK-NEXT: bl _OUTLINED_FUNCTION_0
|
|
#
|
|
# CHECK-LABEL: _fn2:
|
|
# CHECK: bb.0:
|
|
# CHECK: bl _cb2
|
|
# CHECK-NEXT: mov x29, x29
|
|
# CHECK-NEXT: bl _OUTLINED_FUNCTION_0
|
|
#
|
|
# CHECK-LABEL: _OUTLINED_FUNCTION_0:
|
|
# CHECK: bb.0:
|
|
# CHECK-NEXT: orr w12, wzr, #0x3
|
|
# CHECK-NEXT: orr w12, wzr, #0x3
|
|
# CHECK-NEXT: orr w12, wzr, #0x3
|
|
# CHECK-NEXT: orr w12, wzr, #0x3
|
|
# CHECK-NEXT: ret
|
|
|
|
--- |
|
|
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
|
|
target triple = "arm64-apple-ios"
|
|
|
|
define void @fn1() {
|
|
ret void
|
|
}
|
|
|
|
define void @fn2() {
|
|
ret void
|
|
}
|
|
|
|
declare void @cb1()
|
|
|
|
declare void @cb2()
|
|
...
|
|
---
|
|
name: fn1
|
|
tracksRegLiveness: true
|
|
machineFunctionInfo:
|
|
hasRedZone: false
|
|
body: |
|
|
bb.0:
|
|
liveins: $lr
|
|
|
|
BLR_RVMARKER @cb1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $x0
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$lr = ORRXri $xzr, 1
|
|
|
|
RET undef $lr
|
|
...
|
|
---
|
|
name: fn2
|
|
tracksRegLiveness: true
|
|
machineFunctionInfo:
|
|
hasRedZone: false
|
|
body: |
|
|
bb.0:
|
|
liveins: $lr, $x19, $x20, $lr
|
|
|
|
BLR_RVMARKER @cb2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $x0
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$w12 = ORRWri $wzr, 1
|
|
$lr = ORRXri $xzr, 1
|
|
|
|
RET undef $lr
|
|
...
|