| ; Test proper insertion of mcount instrumentation |
| ; |
| ; RUN: llc < %s -mtriple=s390x-linux-gnu -verify-machineinstrs -o - | FileCheck %s |
| ; |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: stg %r14, 8(%r15) |
| ; CHECK-NEXT: brasl %r14, mcount@PLT |
| ; CHECK-NEXT: lg %r14, 8(%r15) |
| define dso_local signext i32 @fib(i32 noundef signext %n) #0 { |
| entry: |
| %n.addr = alloca i32, align 4 |
| store i32 %n, ptr %n.addr, align 4 |
| %0 = load i32, ptr %n.addr, align 4 |
| %cmp = icmp sle i32 %0, 1 |
| br i1 %cmp, label %cond.true, label %cond.false |
| |
| cond.true: ; preds = %entry |
| br label %cond.end |
| |
| cond.false: ; preds = %entry |
| %1 = load i32, ptr %n.addr, align 4 |
| %sub = sub nsw i32 %1, 1 |
| %call = call signext i32 @fib(i32 noundef signext %sub) |
| %2 = load i32, ptr %n.addr, align 4 |
| %sub1 = sub nsw i32 %2, 2 |
| %call2 = call signext i32 @fib(i32 noundef signext %sub1) |
| %add = add nsw i32 %call, %call2 |
| br label %cond.end |
| |
| cond.end: ; preds = %cond.false, %cond.true |
| %cond = phi i32 [ 1, %cond.true ], [ %add, %cond.false ] |
| ret i32 %cond |
| } |
| |
| attributes #0 = { "instrument-function-entry-inlined"="mcount" } |