| ; 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() |