Skip to content

Commit

Permalink
[AArch64][ARM][X86] Split XRay tests for Linux/macOS
Browse files Browse the repository at this point in the history
XRay instrumentation works for macOS running on Apple Silicon, but
codegen is untested there. I'm going to make changes affecting this
target, get the XRay tests running on AArch64.

Data sections are going to become slightly different on x86_64 soon.
I do want the tests to be specific about symbol names, so instead of
having test check the common step, bifurcate tests a bit and check
the full symbol names.

As for ARM, XRay is not really supported on iOS at the moment, though
ARM is also really used there with modern phones. Nevertheless, codegen
tests exist and the output is going to change a little, make it easier
to write the special case for iOS.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D145291
  • Loading branch information
ilammy authored and MaskRay committed Jun 11, 2023
1 parent c6e065e commit c72dea8
Show file tree
Hide file tree
Showing 12 changed files with 430 additions and 233 deletions.
53 changes: 36 additions & 17 deletions llvm/test/CodeGen/AArch64/xray-attribute-instrumentation.ll
@@ -1,4 +1,5 @@
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s -check-prefixes=CHECK,CHECK-LINUX
; RUN: llc -mtriple=aarch64-apple-darwin < %s | FileCheck %s -check-prefixes=CHECK,CHECK-MACOS

define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK-LABEL: foo:
Expand Down Expand Up @@ -26,11 +27,17 @@ define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always"
; CHECK-NEXT: ret
}

; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start0
; CHECK: .xword .Lxray_sled_0
; CHECK: .xword .Lxray_sled_1
; CHECK-LABEL: Lxray_sleds_end0
; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,foo{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start0:
; CHECK-LINUX: .xword .Lxray_sled_0
; CHECK-LINUX: .xword .Lxray_sled_1
; CHECK-LINUX-LABEL: Lxray_sleds_end0:

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start0:
; CHECK-MACOS: .quad Lxray_sled_0
; CHECK-MACOS: .quad Lxray_sled_1
; CHECK-MACOS-LABEL: Lxray_sleds_end0:

define i32 @bar() nounwind noinline uwtable "function-instrument"="xray-never" "function-instrument"="xray-always" {
; CHECK-LABEL: bar:
Expand Down Expand Up @@ -58,11 +65,17 @@ define i32 @bar() nounwind noinline uwtable "function-instrument"="xray-never" "
; CHECK-NEXT: ret
}

; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start1
; CHECK: .xword .Lxray_sled_2
; CHECK: .xword .Lxray_sled_3
; CHECK-LABEL: Lxray_sleds_end1
; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,bar{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start1:
; CHECK-LINUX: .xword .Lxray_sled_2
; CHECK-LINUX: .xword .Lxray_sled_3
; CHECK-LINUX-LABEL: Lxray_sleds_end1:

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start1:
; CHECK-MACOS: .quad Lxray_sled_2
; CHECK-MACOS: .quad Lxray_sled_3
; CHECK-MACOS-LABEL: Lxray_sleds_end1:

define i32 @instrumented() nounwind noinline uwtable "xray-instruction-threshold"="1" {
; CHECK-LABEL: instrumented:
Expand Down Expand Up @@ -90,15 +103,21 @@ define i32 @instrumented() nounwind noinline uwtable "xray-instruction-threshold
; CHECK-NEXT: ret
}

; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start2
; CHECK: .xword .Lxray_sled_4
; CHECK: .xword .Lxray_sled_5
; CHECK-LABEL: Lxray_sleds_end2
; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,instrumented{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start2:
; CHECK-LINUX: .xword .Lxray_sled_4
; CHECK-LINUX: .xword .Lxray_sled_5
; CHECK-LINUX-LABEL: Lxray_sleds_end2:

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start2:
; CHECK-MACOS: .quad Lxray_sled_4
; CHECK-MACOS: .quad Lxray_sled_5
; CHECK-MACOS-LABEL: Lxray_sleds_end2:

define i32 @not_instrumented() nounwind noinline uwtable "xray-instruction-threshold"="1" "function-instrument"="xray-never" {
; CHECK-LABEL: not_instrumented
; CHECK-NOT: .Lxray_sled_6
; CHECK-NOT: Lxray_sled_6
ret i32 0
; CHECK: ret
}
19 changes: 13 additions & 6 deletions llvm/test/CodeGen/AArch64/xray-omit-function-index.ll
@@ -1,4 +1,5 @@
; RUN: llc -no-xray-index -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
; RUN: llc -no-xray-index -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-LINUX
; RUN: llc -no-xray-index -mtriple=aarch64-apple-darwin < %s | FileCheck %s --check-prefixes=CHECK,CHECK-MACOS

define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK-LABEL: Lxray_sled_0:
Expand All @@ -24,10 +25,16 @@ define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always"
; CHECK-LABEL: Ltmp1:
; CHECK-NEXT: ret
}
; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start0
; CHECK: .xword .Lxray_sled_0
; CHECK: .xword .Lxray_sled_1
; CHECK-LABEL: Lxray_sleds_end0
; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,foo{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start0:
; CHECK-LINUX: .xword .Lxray_sled_0
; CHECK-LINUX: .xword .Lxray_sled_1
; CHECK-LINUX-LABEL: Lxray_sleds_end0:

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start0:
; CHECK-MACOS: .quad Lxray_sled_0
; CHECK-MACOS: .quad Lxray_sled_1
; CHECK-MACOS-LABEL: Lxray_sleds_end0:

; CHECK-NOT: xray_fn_idx
@@ -1,4 +1,5 @@
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-LINUX
; RUN: llc -mtriple=aarch64-apple-darwin < %s | FileCheck %s --check-prefixes=CHECK,CHECK-MACOS

define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" "xray-skip-entry" {
; CHECK-NOT: Lxray_sled_0:
Expand All @@ -15,7 +16,13 @@ define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always"
; CHECK-LABEL: Ltmp0:
; CHECK-NEXT: ret
}
; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start0
; CHECK: .xword .Lxray_sled_0
; CHECK-LABEL: Lxray_sleds_end0

; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,foo{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start0:
; CHECK-LINUX: .xword .Lxray_sled_0
; CHECK-LINUX-LABEL: Lxray_sleds_end0:

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start0:
; CHECK-MACOS: .quad Lxray_sled_0
; CHECK-MACOS-LABEL: Lxray_sleds_end0:
@@ -1,4 +1,5 @@
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-LINUX
; RUN: llc -mtriple=aarch64-apple-darwin < %s | FileCheck %s --check-prefixes=CHECK,CHECK-MACOS

define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" "xray-skip-exit" {
; CHECK-LABEL: Lxray_sled_0:
Expand All @@ -15,7 +16,13 @@ define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always"
; CHECK-NOT: Lxray_sled_1:
; CHECK: ret
}
; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start0
; CHECK: .xword .Lxray_sled_0
; CHECK-LABEL: Lxray_sleds_end0

; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,foo{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start0:
; CHECK-LINUX: .xword .Lxray_sled_0
; CHECK-LINUX-LABEL: Lxray_sleds_end0:

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start0:
; CHECK-MACOS: .quad Lxray_sled_0
; CHECK-MACOS-LABEL: Lxray_sleds_end0:
174 changes: 99 additions & 75 deletions llvm/test/CodeGen/AArch64/xray-tail-call-sled.ll
@@ -1,75 +1,99 @@
; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s

define i32 @callee() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK: .p2align 2
; 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-NEXT: mov w0, wzr
; CHECK-NEXT: .p2align 2
; 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-LABEL: xray_instr_map
; CHECK-LABEL: .Lxray_sleds_start0:
; CHECK-NEXT: .Ltmp2:
; CHECK: .xword .Lxray_sled_0-.Ltmp2
; CHECK: .Ltmp3:
; CHECK-NEXT: .xword .Lxray_sled_1-.Ltmp3
; CHECK-LABEL: Lxray_sleds_end0:
; CHECK-LABEL: xray_fn_idx
; CHECK: .xword .Lxray_sleds_start0
; CHECK-NEXT: .xword .Lxray_sleds_end0

define i32 @caller() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK: .p2align 2
; CHECK-LABEL: Lxray_sled_2:
; 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: .Ltmp4:
; CHECK: .p2align 2
; CHECK-LABEL: Lxray_sled_3:
; 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: .Ltmp5:
%retval = tail call i32 @callee()
; CHECK: b callee
ret i32 %retval
}
; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start1:
; CHECK: .xword .Lxray_sled_2
; CHECK: .xword .Lxray_sled_3
; CHECK-LABEL: Lxray_sleds_end1:
; CHECK: .section xray_fn_idx,{{.*}}
; CHECK: .xword .Lxray_sleds_start1
; CHECK-NEXT: .xword .Lxray_sleds_end1
; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-LINUX
; RUN: llc -mtriple=aarch64-apple-darwin < %s | FileCheck %s --check-prefixes=CHECK,CHECK-MACOS

define i32 @callee() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK: .p2align 2
; 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-NEXT: mov w0, wzr
; CHECK-NEXT: .p2align 2
; 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-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,callee{{$}}
; CHECK-LINUX-LABEL: .Lxray_sleds_start0:
; CHECK-LINUX-NEXT: .Ltmp2:
; CHECK-LINUX: .xword .Lxray_sled_0-.Ltmp2
; CHECK-LINUX: .Ltmp3:
; CHECK-LINUX-NEXT: .xword .Lxray_sled_1-.Ltmp3
; CHECK-LINUX-LABEL: Lxray_sleds_end0:
; CHECK-LINUX-LABEL: .section xray_fn_idx,"awo",@progbits,callee{{$}}
; CHECK-LINUX: .xword .Lxray_sleds_start0
; CHECK-LINUX-NEXT: .xword .Lxray_sleds_end0

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start0:
; CHECK-MACOS-NEXT: Ltmp2:
; CHECK-MACOS: .quad Lxray_sled_0-Ltmp2
; CHECK-MACOS: Ltmp3:
; CHECK-MACOS-NEXT: .quad Lxray_sled_1-Ltmp3
; CHECK-MACOS-LABEL: Lxray_sleds_end0:
; CHECK-MACOS-LABEL: .section __DATA,xray_fn_idx{{$}}
; CHECK-MACOS: .quad Lxray_sleds_start0
; CHECK-MACOS-NEXT: .quad Lxray_sleds_end0

define i32 @caller() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK: .p2align 2
; CHECK-LABEL: Lxray_sled_2:
; 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: Ltmp4:
; CHECK: .p2align 2
; CHECK-LABEL: Lxray_sled_3:
; 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: Ltmp5:
%retval = tail call i32 @callee()
; CHECK-LINUX: b callee
; CHECK-MACOS: b _callee
ret i32 %retval
}

; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,caller{{$}}
; CHECK-LINUX-LABEL: Lxray_sleds_start1:
; CHECK-LINUX: .xword .Lxray_sled_2
; CHECK-LINUX: .xword .Lxray_sled_3
; CHECK-LINUX-LABEL: Lxray_sleds_end1:
; CHECK-LINUX-LABEL: .section xray_fn_idx,"awo",@progbits,caller{{$}}
; CHECK-LINUX: .xword .Lxray_sleds_start1
; CHECK-LINUX-NEXT: .xword .Lxray_sleds_end1

; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-MACOS-LABEL: Lxray_sleds_start1:
; CHECK-MACOS: .quad Lxray_sled_2
; CHECK-MACOS: .quad Lxray_sled_3
; CHECK-MACOS-LABEL: Lxray_sleds_end1:
; CHECK-MACOS-LABEL: .section __DATA,xray_fn_idx{{$}}
; CHECK-MACOS: .quad Lxray_sleds_start1
; CHECK-MACOS-NEXT: .quad Lxray_sleds_end1
30 changes: 20 additions & 10 deletions llvm/test/CodeGen/ARM/xray-armv6-attribute-instrumentation.ll
@@ -1,5 +1,5 @@
; RUN: llc -mtriple=armv6-unknown-linux-gnu < %s | FileCheck %s
; RUN: llc -mtriple=armv6-apple-ios6.0.0 < %s | FileCheck %s
; RUN: llc -mtriple=armv6-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-LINUX
; RUN: llc -mtriple=armv6-apple-ios6.0.0 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-IOS

define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" {
; CHECK-LABEL: Lxray_sled_0:
Expand All @@ -23,11 +23,21 @@ define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always"
; CHECK-LABEL: Ltmp1:
; CHECK-NEXT: bx lr
}
; CHECK-LABEL: xray_instr_map
; CHECK-LABEL: Lxray_sleds_start0:
; CHECK: .long {{.*}}Lxray_sled_0
; CHECK: .long {{.*}}Lxray_sled_1
; CHECK-LABEL: Lxray_sleds_end0:
; CHECK-LABEL: xray_fn_idx
; CHECK: .long {{.*}}Lxray_sleds_start0
; CHECK-NEXT: .long {{.*}}Lxray_sleds_end0

; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",%progbits,foo{{$}}
; CHECK-LINUX-LABEL: .Lxray_sleds_start0:
; CHECK-LINUX: .long .Lxray_sled_0
; CHECK-LINUX: .long .Lxray_sled_1
; CHECK-LINUX-LABEL: .Lxray_sleds_end0:
; CHECK-LINUX-LABEL: .section xray_fn_idx,"awo",%progbits,foo{{$}}
; CHECK-LINUX: .long .Lxray_sleds_start0
; CHECK-LINUX-NEXT: .long .Lxray_sleds_end0

; CHECK-IOS-LABEL: .section __DATA,xray_instr_map{{$}}
; CHECK-IOS-LABEL: Lxray_sleds_start0:
; CHECK-IOS: .long Lxray_sled_0
; CHECK-IOS: .long Lxray_sled_1
; CHECK-IOS-LABEL: Lxray_sleds_end0:
; CHECK-IOS-LABEL: .section __DATA,xray_fn_idx{{$}}
; CHECK-IOS: .long Lxray_sleds_start0
; CHECK-IOS-NEXT: .long Lxray_sleds_end0

0 comments on commit c72dea8

Please sign in to comment.