blob: 3197331fe8a26f772a429f7c1d8235ba2c8fdd9f [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -passes=hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
define void @two_phis_consume_cold_value(ptr %ctx, i1 %cond) {
; CHECK-LABEL: define void @two_phis_consume_cold_value(
; CHECK-SAME: ptr [[CTX:%.*]], i1 [[COND:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: br i1 [[COND]], label %[[CODEREPL:.*]], label %[[EXIT:.*]]
; CHECK: [[CODEREPL]]:
; CHECK-NEXT: [[TMP0:%.*]] = call ptr @two_phis_consume_cold_value.cold.1() #[[ATTR2:[0-9]+]]
; CHECK-NEXT: br label %[[EXIT]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: [[A:%.*]] = phi ptr [ [[TMP0]], %[[CODEREPL]] ], [ poison, %[[ENTRY]] ]
; CHECK-NEXT: [[B:%.*]] = phi ptr [ [[TMP0]], %[[CODEREPL]] ], [ null, %[[ENTRY]] ]
; CHECK-NEXT: [[FP:%.*]] = load ptr, ptr [[CTX]], align 8
; CHECK-NEXT: [[R:%.*]] = tail call i32 [[FP]](ptr [[B]], ptr null)
; CHECK-NEXT: store volatile i32 0, ptr [[A]], align 4
; CHECK-NEXT: ret void
;
entry:
br i1 %cond, label %cold, label %exit
cold:
call void @sink()
%v = load volatile ptr, ptr null, align 8
br label %exit
exit:
%a = phi ptr [ %v, %cold ], [ poison, %entry ]
%b = phi ptr [ %v, %cold ], [ null, %entry ]
%fp = load ptr, ptr %ctx, align 8
%r = tail call i32 %fp(ptr %b, ptr null)
store volatile i32 0, ptr %a, align 4
ret void
}
declare void @sink() cold