mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
54850bedf2
This reverts commit r206556, effectively reapplying commit r206548 and its fixups in r206549 and r206550. In an intervening commit I've added target triples to the tests that were failing remotely [1] (but passing locally). I'm hoping the mystery is solved? I'll revert this again if the tests are still failing remotely. [1]: http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6/builds/1816 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206622 91177308-0d34-0410-b5e6-96231b3b80d8
60 lines
1.6 KiB
LLVM
60 lines
1.6 KiB
LLVM
; RUN: opt < %s -analyze -block-freq | FileCheck %s
|
|
|
|
; CHECK-LABEL: Printing analysis {{.*}} for function 'nested_loop_with_branches'
|
|
; CHECK-NEXT: block-frequency-info: nested_loop_with_branches
|
|
define void @nested_loop_with_branches(i32 %a) {
|
|
; CHECK-NEXT: entry: float = 1.0, int = [[ENTRY:[0-9]+]]
|
|
entry:
|
|
%v0 = call i1 @foo0(i32 %a)
|
|
br i1 %v0, label %exit, label %outer, !prof !0
|
|
|
|
; CHECK-NEXT: outer: float = 12.0,
|
|
outer:
|
|
%i = phi i32 [ 0, %entry ], [ %i.next, %inner.end ], [ %i.next, %no_inner ]
|
|
%i.next = add i32 %i, 1
|
|
%do_inner = call i1 @foo1(i32 %i)
|
|
br i1 %do_inner, label %no_inner, label %inner, !prof !0
|
|
|
|
; CHECK-NEXT: inner: float = 36.0,
|
|
inner:
|
|
%j = phi i32 [ 0, %outer ], [ %j.next, %inner.end ]
|
|
%side = call i1 @foo3(i32 %j)
|
|
br i1 %side, label %left, label %right, !prof !0
|
|
|
|
; CHECK-NEXT: left: float = 9.0,
|
|
left:
|
|
%v4 = call i1 @foo4(i32 %j)
|
|
br label %inner.end
|
|
|
|
; CHECK-NEXT: right: float = 27.0,
|
|
right:
|
|
%v5 = call i1 @foo5(i32 %j)
|
|
br label %inner.end
|
|
|
|
; CHECK-NEXT: inner.end: float = 36.0,
|
|
inner.end:
|
|
%stay_inner = phi i1 [ %v4, %left ], [ %v5, %right ]
|
|
%j.next = add i32 %j, 1
|
|
br i1 %stay_inner, label %inner, label %outer, !prof !1
|
|
|
|
; CHECK-NEXT: no_inner: float = 3.0,
|
|
no_inner:
|
|
%continue = call i1 @foo6(i32 %i)
|
|
br i1 %continue, label %outer, label %exit, !prof !1
|
|
|
|
; CHECK-NEXT: exit: float = 1.0, int = [[ENTRY]]
|
|
exit:
|
|
ret void
|
|
}
|
|
|
|
declare i1 @foo0(i32)
|
|
declare i1 @foo1(i32)
|
|
declare i1 @foo2(i32)
|
|
declare i1 @foo3(i32)
|
|
declare i1 @foo4(i32)
|
|
declare i1 @foo5(i32)
|
|
declare i1 @foo6(i32)
|
|
|
|
!0 = metadata !{metadata !"branch_weights", i32 1, i32 3}
|
|
!1 = metadata !{metadata !"branch_weights", i32 3, i32 1}
|