| ; If there are not enough callsites for a particular specialization to |
| ; justify its existence, the specialization shouldn't be created. |
| ; |
| ; RUN: opt -S -partialspecialization -disable-inlining %s | FileCheck %s |
| declare void @callback1() |
| declare void @callback2() |
| |
| declare void @othercall() |
| |
| define internal void @UseCallback(void()* %pCallback) { |
| call void %pCallback() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| call void @othercall() |
| ret void |
| } |
| |
| define void @foo(void()* %pNonConstCallback) |
| { |
| Entry: |
| ; CHECK: Entry |
| ; CHECK-NOT: call void @UseCallback(void ()* @callback1) |
| ; CHECK: call void @UseCallback(void ()* @callback2) |
| ; CHECK-NEXT: call void @UseCallback(void ()* @callback2) |
| ; CHECK-NEXT: ret void |
| call void @UseCallback(void()* @callback1) |
| call void @UseCallback(void()* @callback1) |
| call void @UseCallback(void()* @callback1) |
| call void @UseCallback(void()* @callback1) |
| call void @UseCallback(void()* @callback2) |
| call void @UseCallback(void()* @callback2) |
| |
| ret void |
| } |