1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00
llvm-mirror/test/CodeGen/AArch64/rvmarker-pseudo-expansion-and-outlining.mir
Florian Hahn 2b032e463e [AArch64] Move machine bundle unpacking to PreEmit2 phase.
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
2021-02-15 16:10:43 +00:00

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
...