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

Serge Rogatch via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 17 10:11:17 PST 2016


rSerge created this revision.
rSerge added reviewers: dberris, rengolin.
rSerge added subscribers: iid_iunknown, llvm-commits.
Herald added a subscriber: aemerson.

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.


https://reviews.llvm.org/D26805

Files:
  lib/Target/AArch64/AArch64AsmPrinter.cpp
  test/CodeGen/AArch64/xray-attribute-instrumentation.ll


Index: test/CodeGen/AArch64/xray-attribute-instrumentation.ll
===================================================================
--- test/CodeGen/AArch64/xray-attribute-instrumentation.ll
+++ test/CodeGen/AArch64/xray-attribute-instrumentation.ll
@@ -0,0 +1,26 @@
+; 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
+}
Index: lib/Target/AArch64/AArch64AsmPrinter.cpp
===================================================================
--- lib/Target/AArch64/AArch64AsmPrinter.cpp
+++ lib/Target/AArch64/AArch64AsmPrinter.cpp
@@ -223,7 +223,9 @@
   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(32 >> 2));
 
   for (int8_t I = 0; I < NoopsInSledCount; I++)
     EmitToStreamer(*OutStreamer, MCInstBuilder(AArch64::HINT).addImm(0));


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26805.78381.patch
Type: text/x-patch
Size: 1674 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161117/fde61261/attachment.bin>


More information about the llvm-commits mailing list