1; RUN: opt -S -passes=hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s 2 3; Source: 4; 5; extern void sideeffect(int); 6; extern void __attribute__((cold)) sink(); 7; void foo(int cond) { 8; if (cond) { //< Start outlining here. 9; if (cond > 10) 10; sideeffect(0); 11; else 12; sideeffect(1); 13; sink(); 14; } 15; sideeffect(2); 16; } 17 18target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 19target triple = "x86_64-apple-macosx10.14.0" 20 21; CHECK-LABEL: define {{.*}}@foo( 22; CHECK: br i1 {{.*}}, label %codeRepl, label %if.end2 23; CHECK-LABEL: codeRepl: 24; CHECK-NEXT: call void @foo.cold.1 25; CHECK-LABEL: if.end2: 26; CHECK: call void @sideeffect(i32 2) 27define void @foo(i32 %cond) { 28entry: 29 %cond.addr = alloca i32 30 store i32 %cond, ptr %cond.addr 31 %0 = load i32, ptr %cond.addr 32 %tobool = icmp ne i32 %0, 0 33 br i1 %tobool, label %if.then, label %if.end2 34 35if.then: ; preds = %entry 36 %1 = load i32, ptr %cond.addr 37 %cmp = icmp sgt i32 %1, 10 38 br i1 %cmp, label %if.then1, label %if.else 39 40if.then1: ; preds = %if.then 41 call void @sideeffect(i32 0) 42 br label %if.end 43 44if.else: ; preds = %if.then 45 call void @sideeffect(i32 1) 46 br label %if.end 47 48if.end: ; preds = %if.else, %if.then1 49 call void (...) @sink() 50 ret void 51 52if.end2: ; preds = %entry 53 call void @sideeffect(i32 2) 54 ret void 55} 56 57; CHECK-LABEL: define {{.*}}@foo.cold.1 58; CHECK: call {{.*}}@sideeffect 59; CHECK: call {{.*}}@sideeffect 60; CHECK: call {{.*}}@sink 61 62declare void @sideeffect(i32) 63 64declare void @sink(...) cold 65