| ; Check that the hotness attribute is included in the optimization record file |
| ; with -lto-pass-remarks-with-hotness. |
| |
| ; RUN: llvm-as < %s >%t.bc |
| ; RUN: llvm-lto -lto-pass-remarks-output=%t.yaml \ |
| ; RUN: -lto-pass-remarks-with-hotness \ |
| ; RUN: -exported-symbol _func2 \ |
| ; RUN: -exported-symbol _main -o %t.o %t.bc |
| ; RUN: cat %t.yaml | FileCheck -check-prefix=YAML %s |
| |
| ; YAML: --- !Passed |
| ; YAML-NEXT: Pass: inline |
| ; YAML-NEXT: Name: Inlined |
| ; YAML-NEXT: Function: main |
| ; YAML-NEXT: Hotness: 300 |
| ; YAML-NEXT: Args: |
| ; YAML-NEXT: - Callee: foo |
| ; YAML-NEXT: - String: ' inlined into ' |
| ; YAML-NEXT: - Caller: main |
| ; YAML-NEXT: ... |
| |
| target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-apple-darwin" |
| |
| declare i32 @bar() |
| |
| define i32 @foo() { |
| %a = call i32 @bar() |
| ret i32 %a |
| } |
| |
| define i32 @main() !prof !0 { |
| %i = call i32 @foo() |
| ret i32 %i |
| } |
| |
| define i32 @func2(i32* %out, i32* %out2, i32* %A, i32* %B, i32* %C, i32* %D, i32* %E, i32* %F) { |
| entry: |
| br label %for.body |
| |
| for.body: ; preds = %for.body, %entry |
| %i.037 = phi i64 [ 0, %entry ], [ %inc, %for.body ] |
| %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.037 |
| %0 = load i32, i32* %arrayidx, align 4 |
| %arrayidx1 = getelementptr inbounds i32, i32* %B, i64 %i.037 |
| %1 = load i32, i32* %arrayidx1, align 4 |
| %add = add nsw i32 %1, %0 |
| %arrayidx2 = getelementptr inbounds i32, i32* %C, i64 %i.037 |
| %2 = load i32, i32* %arrayidx2, align 4 |
| %add3 = add nsw i32 %add, %2 |
| %arrayidx4 = getelementptr inbounds i32, i32* %E, i64 %i.037 |
| %3 = load i32, i32* %arrayidx4, align 4 |
| %add5 = add nsw i32 %add3, %3 |
| %arrayidx6 = getelementptr inbounds i32, i32* %F, i64 %i.037 |
| %4 = load i32, i32* %arrayidx6, align 4 |
| %add7 = add nsw i32 %add5, %4 |
| %arrayidx8 = getelementptr inbounds i32, i32* %out, i64 %i.037 |
| store i32 %add7, i32* %arrayidx8, align 4 |
| %5 = load i32, i32* %arrayidx, align 4 |
| %6 = load i32, i32* %arrayidx1, align 4 |
| %add11 = add nsw i32 %6, %5 |
| %7 = load i32, i32* %arrayidx2, align 4 |
| %add13 = add nsw i32 %add11, %7 |
| %8 = load i32, i32* %arrayidx4, align 4 |
| %add15 = add nsw i32 %add13, %8 |
| %9 = load i32, i32* %arrayidx6, align 4 |
| %add17 = add nsw i32 %add15, %9 |
| %arrayidx18 = getelementptr inbounds i32, i32* %out2, i64 %i.037 |
| store i32 %add17, i32* %arrayidx18, align 4 |
| %inc = add i64 %i.037, 1 |
| %exitcond = icmp eq i64 %inc, 256 |
| br i1 %exitcond, label %for.end, label %for.body |
| |
| for.end: ; preds = %for.body |
| ret i32 undef |
| } |
| |
| !0 = !{!"function_entry_count", i64 300} |