mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-07 12:30:44 +00:00
[XRay][AArch64] Implemented a test for the compile-time sleds emitted, and fixed a bug in the jump instruction
This patch adds a test for the assembly code emitted with XRay instrumentation. It also fixes a bug where the operand of a jump instruction must be not the number of bytes to jump over, but rather the number of 4-byte instructions. Author: rSerge Reviewers: dberris, rengolin Differential Revision: https://reviews.llvm.org/D26805 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287516 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
02ca2cb0e6
commit
4fedda5369
@ -223,7 +223,9 @@ void AArch64AsmPrinter::EmitSled(const MachineInstr &MI, SledKind Kind)
|
||||
auto Target = OutContext.createTempSymbol();
|
||||
|
||||
// Emit "B #32" instruction, which jumps over the next 28 bytes.
|
||||
EmitToStreamer(*OutStreamer, MCInstBuilder(AArch64::B).addImm(32));
|
||||
// The operand has to be the number of 4-byte instructions to jump over,
|
||||
// including the current instruction.
|
||||
EmitToStreamer(*OutStreamer, MCInstBuilder(AArch64::B).addImm(8));
|
||||
|
||||
for (int8_t I = 0; I < NoopsInSledCount; I++)
|
||||
EmitToStreamer(*OutStreamer, MCInstBuilder(AArch64::HINT).addImm(0));
|
||||
|
32
test/CodeGen/AArch64/xray-attribute-instrumentation.ll
Normal file
32
test/CodeGen/AArch64/xray-attribute-instrumentation.ll
Normal file
@ -0,0 +1,32 @@
|
||||
; RUN: llc -filetype=asm -o - -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
|
||||
|
||||
define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" {
|
||||
; CHECK-LABEL: Lxray_sled_0:
|
||||
; CHECK-NEXT: b #32
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-LABEL: Ltmp0:
|
||||
ret i32 0
|
||||
; CHECK-LABEL: Lxray_sled_1:
|
||||
; CHECK-NEXT: b #32
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-LABEL: Ltmp1:
|
||||
; CHECK-NEXT: ret
|
||||
}
|
||||
; CHECK: .p2align 4
|
||||
; CHECK-NEXT: .xword .Lxray_synthetic_0
|
||||
; CHECK-NEXT: .section xray_instr_map,{{.*}}
|
||||
; CHECK-LABEL: Lxray_synthetic_0:
|
||||
; CHECK: .xword .Lxray_sled_0
|
||||
; CHECK: .xword .Lxray_sled_1
|
Loading…
Reference in New Issue
Block a user