blob: 2458a9d085b007f13844ad8cc405871f0bfcc9a3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
; RUN: llc -mtriple=aarch64-unknown-linux-gnu -aarch64-tbz-offset-bits=4 -aarch64-cbz-offset-bits=4 < %s | FileCheck %s
;; Check that branch relaxation accounts for the size of xray EXIT sleds
;; Note that TAIL_CALL sleds don't exist on AArch64 and don't need a test.
define void @exit(i1 zeroext %0) nounwind "function-instrument"="xray-always" {
; CHECK-LABEL: exit:
; CHECK-NEXT: .Lfunc_begin0:
; CHECK-NEXT: // %bb.0:
; CHECK-NEXT: .p2align 2
; CHECK-NEXT: .Lxray_sled_0:
; CHECK-NEXT: b #32
; CHECK-COUNT-7: nop
; CHECK-NOT: nop
; CHECK: tbnz
; CHECK-SAME: [[FALLTHROUGH:.LBB[0-9_]+]]
; CHECK-NEXT: b
; CHECK-SAME: [[OUT_OF_RANGE:.LBB[0-9_]+]]
; CHECK-NEXT: [[FALLTHROUGH]]:
; CHECK-NEXT: bl bar
; CHECK: .p2align 2
; CHECK-NEXT: .Lxray_sled_1:
; CHECK-NEXT: b #32
; CHECK-COUNT-7: nop
; CHECK-NOT: nop
; CHECK-NEXT: .Ltmp1:
; CHECK-NEXT: ret
; CHECK-NEXT: [[OUT_OF_RANGE]]:
; CHECK-SAME: // %end2
; CHECK-NEXT: bl baz
br i1 %0, label %end1, label %end2
end1:
%2 = call i32 @bar()
ret void
end2:
%3 = call i32 @baz()
ret void
}
declare i32 @bar()
declare i32 @baz()
|