mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
16e0971625
Extend -fxray-instrumentation-bundle to split function-entry and function-exit into two separate options, so that it is possible to instrument only function entry or only function exit. For use cases that only care about one or the other this will save significant overhead and code size. Differential Revision: https://reviews.llvm.org/D72890
51 lines
1.7 KiB
LLVM
51 lines
1.7 KiB
LLVM
; RUN: llc -verify-machineinstrs -filetype=asm -o - -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
|
|
; RUN: llc -verify-machineinstrs -filetype=asm -o - \
|
|
; RUN: -mtriple=x86_64-unknown-linux-gnu -relocation-model=pic < %s | FileCheck %s
|
|
; RUN: llc -verify-machineinstrs -filetype=asm -o - -mtriple=x86_64-darwin-unknown < %s | FileCheck %s
|
|
|
|
define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" "xray-skip-entry" {
|
|
; CHECK-NOT: Lxray_sled_0:
|
|
ret i32 0
|
|
; CHECK: .p2align 1, 0x90
|
|
; CHECK-LABEL: Lxray_sled_0:
|
|
; CHECK: retq
|
|
; CHECK-NEXT: nopw %cs:512(%rax,%rax)
|
|
}
|
|
; CHECK-LABEL: xray_instr_map
|
|
; CHECK-LABEL: Lxray_sleds_start0:
|
|
; CHECK: .quad {{.*}}xray_sled_0
|
|
; CHECK-LABEL: Lxray_sleds_end0:
|
|
; CHECK-LABEL: xray_fn_idx
|
|
; CHECK: .quad {{.*}}xray_sleds_start0
|
|
; CHECK-NEXT: .quad {{.*}}xray_sleds_end0
|
|
|
|
|
|
; We test multiple returns in a single function to make sure we're getting all
|
|
; of them with XRay instrumentation.
|
|
define i32 @bar(i32 %i) nounwind noinline uwtable "function-instrument"="xray-always" "xray-skip-entry" {
|
|
; CHECK-NOT: Lxray_sled_1:
|
|
Test:
|
|
%cond = icmp eq i32 %i, 0
|
|
br i1 %cond, label %IsEqual, label %NotEqual
|
|
IsEqual:
|
|
ret i32 0
|
|
; CHECK: .p2align 1, 0x90
|
|
; CHECK-LABEL: Lxray_sled_1:
|
|
; CHECK: retq
|
|
; CHECK-NEXT: nopw %cs:512(%rax,%rax)
|
|
NotEqual:
|
|
ret i32 1
|
|
; CHECK: .p2align 1, 0x90
|
|
; CHECK-LABEL: Lxray_sled_2:
|
|
; CHECK: retq
|
|
; CHECK-NEXT: nopw %cs:512(%rax,%rax)
|
|
}
|
|
; CHECK-LABEL: xray_instr_map
|
|
; CHECK-LABEL: Lxray_sleds_start1:
|
|
; CHECK: .quad {{.*}}xray_sled_1
|
|
; CHECK: .quad {{.*}}xray_sled_2
|
|
; CHECK-LABEL: Lxray_sleds_end1:
|
|
; CHECK-LABEL: xray_fn_idx
|
|
; CHECK: .quad {{.*}}xray_sleds_start1
|
|
; CHECK-NEXT: .quad {{.*}}xray_sleds_end1
|