From: Dean Michael Berris Date: Mon, 21 Nov 2016 03:01:43 +0000 (+0000) Subject: [XRay][AArch64] Implemented a test for the compile-time sleds emitted, and fixed... X-Git-Tag: llvmorg-4.0.0-rc1~4029 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=31761f300d8237bca7320e17461a3a7df49aee69;p=platform%2Fupstream%2Fllvm.git [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 llvm-svn: 287516 --- diff --git a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp index f0564ef..2d49ccc 100644 --- a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp +++ b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp @@ -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)); diff --git a/llvm/test/CodeGen/AArch64/xray-attribute-instrumentation.ll b/llvm/test/CodeGen/AArch64/xray-attribute-instrumentation.ll new file mode 100644 index 0000000..d0f5f40 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/xray-attribute-instrumentation.ll @@ -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