; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s ; Source: ; ; extern void sideeffect(int); ; extern void __attribute__((cold)) sink(); ; void foo(int cond) { ; if (cond) { //< Start outlining here. ; if (cond > 10) ; sideeffect(0); ; else ; sideeffect(1); ; sink(); ; } ; sideeffect(2); ; } target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.14.0" ; CHECK-LABEL: define {{.*}}@foo( ; CHECK: br i1 {{.*}}, label %codeRepl, label %if.end2 ; CHECK-LABEL: codeRepl: ; CHECK-NEXT: call void @foo.cold.1 ; CHECK-LABEL: if.end2: ; CHECK: call void @sideeffect(i32 2) define void @foo(i32 %cond) { entry: %cond.addr = alloca i32 store i32 %cond, i32* %cond.addr %0 = load i32, i32* %cond.addr %tobool = icmp ne i32 %0, 0 br i1 %tobool, label %if.then, label %if.end2 if.then: ; preds = %entry %1 = load i32, i32* %cond.addr %cmp = icmp sgt i32 %1, 10 br i1 %cmp, label %if.then1, label %if.else if.then1: ; preds = %if.then call void @sideeffect(i32 0) br label %if.end if.else: ; preds = %if.then call void @sideeffect(i32 1) br label %if.end if.end: ; preds = %if.else, %if.then1 call void (...) @sink() ret void if.end2: ; preds = %entry call void @sideeffect(i32 2) ret void } ; CHECK-LABEL: define {{.*}}@foo.cold.1 ; CHECK: call {{.*}}@sideeffect ; CHECK: call {{.*}}@sideeffect ; CHECK: call {{.*}}@sink declare void @sideeffect(i32) declare void @sink(...) cold