1; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s -check-prefixes=CHECK,CHECK-LINUX 2; RUN: llc -mtriple=aarch64-apple-darwin < %s | FileCheck %s -check-prefixes=CHECK,CHECK-MACOS 3 4define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" { 5; CHECK-LABEL: foo: 6; CHECK-LABEL: Lxray_sled_0: 7; CHECK-NEXT: b #32 8; CHECK-COUNT-7: nop 9; CHECK-NEXT: Ltmp[[#]]: 10 ret i32 0 11; CHECK-LABEL: Lxray_sled_1: 12; CHECK-NEXT: b #32 13; CHECK-COUNT-7: nop 14; CHECK-NEXT: Ltmp[[#]]: 15; CHECK-NEXT: ret 16} 17 18; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,foo{{$}} 19; CHECK-LINUX-LABEL: Lxray_sleds_start0: 20; CHECK-LINUX: .xword .Lxray_sled_0 21; CHECK-LINUX: .xword .Lxray_sled_1 22; CHECK-LINUX-LABEL: Lxray_sleds_end0: 23 24; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}} 25; CHECK-MACOS-LABEL: lxray_sleds_start0: 26; CHECK-MACOS: .quad Lxray_sled_0 27; CHECK-MACOS: .quad Lxray_sled_1 28; CHECK-MACOS-LABEL: Lxray_sleds_end0: 29 30define i32 @bar() nounwind noinline uwtable "function-instrument"="xray-never" "function-instrument"="xray-always" { 31; CHECK-LABEL: bar: 32; CHECK-LABEL: Lxray_sled_2: 33; CHECK-NEXT: b #32 34; CHECK-COUNT-7: nop 35; CHECK-NEXT: Ltmp[[#]]: 36 ret i32 0 37; CHECK-LABEL: Lxray_sled_3: 38; CHECK-NEXT: b #32 39; CHECK-COUNT-7: nop 40; CHECK-NEXT: Ltmp[[#]]: 41; CHECK-NEXT: ret 42} 43 44; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,bar{{$}} 45; CHECK-LINUX-LABEL: Lxray_sleds_start1: 46; CHECK-LINUX: .xword .Lxray_sled_2 47; CHECK-LINUX: .xword .Lxray_sled_3 48; CHECK-LINUX-LABEL: Lxray_sleds_end1: 49 50; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}} 51; CHECK-MACOS-LABEL: lxray_sleds_start1: 52; CHECK-MACOS: .quad Lxray_sled_2 53; CHECK-MACOS: .quad Lxray_sled_3 54; CHECK-MACOS-LABEL: Lxray_sleds_end1: 55 56define i32 @instrumented() nounwind noinline uwtable "xray-instruction-threshold"="1" { 57; CHECK-LABEL: instrumented: 58; CHECK-LABEL: Lxray_sled_4: 59; CHECK-NEXT: b #32 60; CHECK-COUNT-7: nop 61; CHECK-NEXT: Ltmp[[#]]: 62 ret i32 0 63; CHECK-LABEL: Lxray_sled_5: 64; CHECK-NEXT: b #32 65; CHECK-COUNT-7: nop 66; CHECK-NEXT: Ltmp[[#]]: 67; CHECK-NEXT: ret 68} 69 70; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,instrumented{{$}} 71; CHECK-LINUX-LABEL: Lxray_sleds_start2: 72; CHECK-LINUX: .xword .Lxray_sled_4 73; CHECK-LINUX: .xword .Lxray_sled_5 74; CHECK-LINUX-LABEL: Lxray_sleds_end2: 75 76; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}} 77; CHECK-MACOS-LABEL: lxray_sleds_start2: 78; CHECK-MACOS: .quad Lxray_sled_4 79; CHECK-MACOS: .quad Lxray_sled_5 80; CHECK-MACOS-LABEL: Lxray_sleds_end2: 81 82define i32 @not_instrumented() nounwind noinline uwtable "xray-instruction-threshold"="1" "function-instrument"="xray-never" { 83; CHECK-LABEL: not_instrumented 84; CHECK-NOT: Lxray_sled_6 85 ret i32 0 86; CHECK: ret 87} 88