120 lines · plain
1; RUN: llc -mtriple=aarch64-unknown-linux-gnu -aarch64-tbz-offset-bits=4 -aarch64-cbz-offset-bits=3 < %s | FileCheck %s2 3;; Check that branch relaxation accounts for the size of xray EXIT sleds4;; Note that TAIL_CALL sleds don't exist on AArch64 and don't need a test.5define void @exit(i1 zeroext %0) nounwind "function-instrument"="xray-always" {6; CHECK-LABEL: exit:7; CHECK-NEXT: .Lfunc_begin0:8; CHECK-NEXT: // %bb.0:9; CHECK-NEXT: .p2align 210; CHECK-NEXT: .Lxray_sled_0:11; CHECK-NEXT: b #3212; CHECK-COUNT-7: nop13; CHECK-NOT: nop14; CHECK: tbnz15; CHECK-SAME: [[FALLTHROUGH:.LBB[0-9_]+]]16; CHECK-NEXT: b17; CHECK-SAME: [[OUT_OF_RANGE:.LBB[0-9_]+]]18; CHECK-NEXT: [[FALLTHROUGH]]:19; CHECK-NEXT: bl bar20; CHECK: .p2align 221; CHECK-NEXT: .Lxray_sled_1:22; CHECK-NEXT: b #3223; CHECK-COUNT-7: nop24; CHECK-NOT: nop25; CHECK-NEXT: .Ltmp1:26; CHECK-NEXT: ret27; CHECK-NEXT: [[OUT_OF_RANGE]]:28; CHECK-SAME: // %end229; CHECK-NEXT: bl baz30 br i1 %0, label %end1, label %end231 32end1:33 %2 = call i32 @bar()34 ret void35 36end2:37 %3 = call i32 @baz()38 ret void39}40 41;; Check that branch relaxation accounts for the size of xray EVENT sleds42define void @customevent(i1 zeroext %0, ptr nocapture noundef readonly %e1, i64 noundef %s1, ptr nocapture noundef readonly %e2, i64 noundef %s2) "function-instrument"="xray-always" {43; CHECK-LABEL: customevent:44; CHECK-NEXT: .Lfunc_begin1:45; CHECK-NEXT: .cfi_startproc46; CHECK-NEXT: // %bb.0:47; CHECK-NEXT: .p2align 248; CHECK-NEXT: .Lxray_sled_{{[0-9]+}}:49; CHECK: cbnz50; CHECK-SAME: [[FALLTHROUGH_2:.LBB[0-9_]+]]51; CHECK-NEXT: b52; CHECK-SAME: [[OUT_OF_RANGE_2:.LBB[0-9_]+]]53; CHECK-NEXT: [[FALLTHROUGH_2]]:54; CHECK-SAME: // %end155; CHECK-NEXT: .Lxray_sled_{{[0-9]+}}:56; CHECK-NEXT: Begin XRay custom event57; CHECK: bl __xray_CustomEvent58; CHECK: End XRay custom event59; CHECK-NEXT: [[OUT_OF_RANGE_2]]:60; CHECK-SAME: // %end261; CHECK-NEXT: .Lxray_sled_{{[0-9]+}}:62; CHECK-NEXT: Begin XRay custom event63; CHECK: bl __xray_CustomEvent64; CHECK: End XRay custom event65; CHECK: .Ltmp66; CHECK-NEXT: ret67entry:68 br i1 %0, label %end1, label %end269 70end1:71 call void @llvm.xray.customevent(ptr %e1, i64 %s1)72 br label %end273 74end2:75 tail call void @llvm.xray.customevent(ptr %e2, i64 %s2)76 ret void77}78 79;; Check that branch relaxation accounts for the size of xray TYPED_EVENT sleds80define void @typedevent(i1 zeroext %0, i64 noundef %type, ptr nocapture noundef readonly %event, i64 noundef %size) "function-instrument"="xray-always" {81; CHECK-LABEL: typedevent:82; CHECK-NEXT: .Lfunc_begin2:83; CHECK-NEXT: .cfi_startproc84; CHECK-NEXT: // %bb.0:85; CHECK-NEXT: .p2align 286; CHECK-NEXT: .Lxray_sled_{{[0-9]+}}:87; CHECK: cbnz88; CHECK-SAME: [[FALLTHROUGH_3:.LBB[0-9_]+]]89; CHECK-NEXT: b90; CHECK-SAME: [[OUT_OF_RANGE_3:.LBB[0-9_]+]]91; CHECK-NEXT: [[FALLTHROUGH_3]]:92; CHECK-SAME: // %end193; CHECK-NEXT: .Lxray_sled_{{[0-9]+}}:94; CHECK-NEXT: Begin XRay typed event95; CHECK: bl __xray_TypedEvent96; CHECK: End XRay typed event97; CHECK-NEXT: [[OUT_OF_RANGE_3]]:98; CHECK-SAME: // %end299; CHECK-NEXT: .Lxray_sled_{{[0-9]+}}:100; CHECK-NEXT: Begin XRay typed event101; CHECK: bl __xray_TypedEvent102; CHECK: End XRay typed event103; CHECK: .Ltmp104; CHECK-NEXT: ret105entry:106 br i1 %0, label %end1, label %end2107 108end1:109 call void @llvm.xray.typedevent(i64 %type, ptr %event, i64 %size)110 br label %end2111 112end2:113 tail call void @llvm.xray.typedevent(i64 %size, ptr %event, i64 %type)114 ret void115}116 117declare void @llvm.xray.customevent(ptr, i64)118declare void @llvm.xray.typedevent(i64, ptr, i64)119declare i32 @bar()120declare i32 @baz()