Aiden Grossman 0d95dda1ee
[LoopInfo] Preserve profile information in makeLoopInvariant (#174171)
When hoisting loop invariant instructions, we can preserve profile
metadata because it depends solely on the condition (which is loop
invariant) rather than where we are in the control flow graph.
2026-02-27 10:19:03 -08:00

40 lines
1.2 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes="loop-simplify" -S %s | FileCheck %s
define void @test_drop(i8 %a) !prof !0 {
; CHECK-LABEL: define void @test_drop(
; CHECK-SAME: i8 [[A:%.*]]) !prof [[PROF0:![0-9]+]] {
; CHECK-NEXT: [[HEADER_BACKEDGE2:.*:]]
; CHECK-NEXT: [[S:%.*]] = select i1 true, i1 true, i1 false, !prof [[PROF1:![0-9]+]]
; CHECK-NEXT: br label %[[HEADER:.*]]
; CHECK: [[HEADER]]:
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[A]], 0
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 true, i1 [[CMP]], i1 false
; CHECK-NEXT: br i1 [[OR_COND]], label %[[EXIT:.*]], label %[[HEADER_BACKEDGE:.*]]
; CHECK: [[HEADER_BACKEDGE]]:
; CHECK-NEXT: br label %[[HEADER]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: ret void
;
entry:
br label %header
header:
br i1 false, label %header, label %body
body:
%s = select i1 true, i1 true, i1 false, !prof !1
%cmp = icmp eq i8 %a, 0
br i1 %cmp, label %exit, label %header
exit:
ret void
}
!0 = !{!"function_entry_count", i64 1000}
!1 = !{!"branch_weights", i32 4, i32 1}
;.
; CHECK: [[PROF0]] = !{!"function_entry_count", i64 1000}
; CHECK: [[PROF1]] = !{!"unknown", !"LoopInfo"}
;.