summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/xray-tail-call-sled.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/xray-tail-call-sled.ll')
-rw-r--r--llvm/test/CodeGen/X86/xray-tail-call-sled.ll41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/xray-tail-call-sled.ll b/llvm/test/CodeGen/X86/xray-tail-call-sled.ll
new file mode 100644
index 00000000000..451993c8815
--- /dev/null
+++ b/llvm/test/CodeGen/X86/xray-tail-call-sled.ll
@@ -0,0 +1,41 @@
+; RUN: llc -filetype=asm -o - -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
+
+define i32 @callee() nounwind noinline uwtable "function-instrument"="xray-always" {
+; CHECK: .p2align 1, 0x90
+; CHECK-LABEL: Lxray_sled_0:
+; CHECK-NEXT: .ascii "\353\t"
+; CHECK-NEXT: nopw 512(%rax,%rax)
+; CHECK-LABEL: Ltmp0:
+ ret i32 0
+; CHECK: .p2align 1, 0x90
+; CHECK-LABEL: Lxray_sled_1:
+; CHECK-NEXT: retq
+; CHECK-NEXT: nopw %cs:512(%rax,%rax)
+}
+; CHECK: .p2align 4, 0x90
+; CHECK-NEXT: .quad .Lxray_synthetic_0
+; CHECK-NEXT: .section xray_instr_map,{{.*}}
+; CHECK-LABEL: Lxray_synthetic_0:
+; CHECK: .quad .Lxray_sled_0
+; CHECK: .quad .Lxray_sled_1
+
+define i32 @caller() nounwind noinline uwtable "function-instrument"="xray-always" {
+; CHECK: .p2align 1, 0x90
+; CHECK-LABEL: Lxray_sled_2:
+; CHECK-NEXT: .ascii "\353\t"
+; CHECK-NEXT: nopw 512(%rax,%rax)
+; CHECK-LABEL: Ltmp1:
+; CHECK: .p2align 1, 0x90
+; CHECK-LABEL: Lxray_sled_3:
+; CHECK-NEXT: .ascii "\353\t"
+; CHECK-NEXT: nopw 512(%rax,%rax)
+; CHECK-LABEL: Ltmp2:
+ %retval = tail call i32 @callee()
+; CHECK: jmp callee # TAILCALL
+ ret i32 %retval
+}
+; CHECK: .p2align 4, 0x90
+; CHECK-NEXT: .quad .Lxray_synthetic_1
+; CHECK-LABEL: Lxray_synthetic_1:
+; CHECK: .quad .Lxray_sled_2
+; CHECK: .quad .Lxray_sled_3
OpenPOWER on IntegriCloud