Partial specialization test should not depend on the order of specialization operatio...
[oota-llvm.git] / test / Transforms / PartialSpecialize / two-specializations.ll
1 ; If there are two specializations of a function, make sure each callsite
2 ; calls the right one.
3 ;
4 ; RUN: opt -S -partialspecialization %s | opt -S -inline %s | FileCheck %s
5 declare void @callback1()
6 declare void @callback2()
7
8 define internal void @UseCallback(void()* %pCallback) {
9   call void %pCallback()
10   ret void
11 }
12
13 define void @foo(void()* %pNonConstCallback)
14 {
15 Entry:
16 ; CHECK: Entry
17 ; CHECK-NEXT: call void @callback1()
18 ; CHECK-NEXT: call void @callback1()
19 ; CHECK-NEXT: call void @callback2()
20 ; CHECK-NEXT: call void %pNonConstCallback()
21 ; CHECK-NEXT: call void @callback1()
22 ; CHECK-NEXT: call void @callback2()
23 ; CHECK-NEXT: call void @callback2()
24   call void @UseCallback(void()* @callback1)
25   call void @UseCallback(void()* @callback1)
26   call void @UseCallback(void()* @callback2)
27   call void @UseCallback(void()* %pNonConstCallback)
28   call void @UseCallback(void()* @callback1)
29   call void @UseCallback(void()* @callback2)
30   call void @UseCallback(void()* @callback2)
31   ret void
32 }