[llvm] r287516 - [XRay][AArch64] Implemented a test for the compile-time sleds emitted, and fixed a bug in the jump instruction

Dean Michael Berris via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 20 19:01:44 PST 2016


Author: dberris
Date: Sun Nov 20 21:01:43 2016
New Revision: 287516

URL: http://llvm.org/viewvc/llvm-project?rev=287516&view=rev
Log:
[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

Added:
    llvm/trunk/test/CodeGen/AArch64/xray-attribute-instrumentation.ll
Modified:
    llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp

Modified: llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp?rev=287516&r1=287515&r2=287516&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64AsmPrinter.cpp Sun Nov 20 21:01:43 2016
@@ -223,7 +223,9 @@ void AArch64AsmPrinter::EmitSled(const M
   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));

Added: llvm/trunk/test/CodeGen/AArch64/xray-attribute-instrumentation.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/xray-attribute-instrumentation.ll?rev=287516&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/xray-attribute-instrumentation.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/xray-attribute-instrumentation.ll Sun Nov 20 21:01:43 2016
@@ -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




More information about the llvm-commits mailing list