Skip to content

Commit e15d72a

Browse files
authored
[FuncSpec] Adjust the names of specializations and promoted stack values
Currently the naming scheme is a bit funky; the specializations are named after the original function followed by an arbitrary decimal number. This makes it hard to debug inlined specializations of recursive functions. With this patch I am adding ".specialized." in between of the original name and the suffix, which is now a single increment counter.
1 parent b05d436 commit e15d72a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+180
-178
lines changed

llvm/include/llvm/Transforms/IPO/FunctionSpecialization.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ class FunctionSpecializer {
252252
SmallPtrSet<Function *, 32> FullySpecialized;
253253
DenseMap<Function *, CodeMetrics> FunctionMetrics;
254254
DenseMap<Function *, unsigned> FunctionGrowth;
255+
unsigned NGlobals = 0;
255256

256257
public:
257258
FunctionSpecializer(

llvm/lib/Transforms/IPO/FunctionSpecialization.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ void FunctionSpecializer::promoteConstantStackValues(Function *F) {
487487

488488
Value *GV = new GlobalVariable(M, ConstVal->getType(), true,
489489
GlobalValue::InternalLinkage, ConstVal,
490-
"funcspec.arg");
490+
"specialized.arg." + Twine(++NGlobals));
491491
if (ArgOpType != ConstVal->getType())
492492
GV = ConstantExpr::getBitCast(cast<Constant>(GV), ArgOpType);
493493

@@ -719,9 +719,10 @@ void FunctionSpecializer::removeDeadFunctions() {
719719

720720
/// Clone the function \p F and remove the ssa_copy intrinsics added by
721721
/// the SCCPSolver in the cloned version.
722-
static Function *cloneCandidateFunction(Function *F) {
722+
static Function *cloneCandidateFunction(Function *F, unsigned NSpecs) {
723723
ValueToValueMapTy Mappings;
724724
Function *Clone = CloneFunction(F, Mappings);
725+
Clone->setName(F->getName() + ".specialized." + Twine(NSpecs));
725726
removeSSACopy(*Clone);
726727
return Clone;
727728
}
@@ -879,7 +880,7 @@ bool FunctionSpecializer::isCandidateFunction(Function *F) {
879880

880881
Function *FunctionSpecializer::createSpecialization(Function *F,
881882
const SpecSig &S) {
882-
Function *Clone = cloneCandidateFunction(F);
883+
Function *Clone = cloneCandidateFunction(F, Specializations.size() + 1);
883884

884885
// The original function does not neccessarily have internal linkage, but the
885886
// clone must.

llvm/test/Transforms/FunctionSpecialization/bug55000-read-uninitialized-value.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ declare hidden i1 @compare(ptr) align 2
44
declare hidden { i8, ptr } @getType(ptr) align 2
55

66
; CHECK-LABEL: @foo
7-
; CHECK-LABEL: @foo.1
8-
; CHECK-LABEL: @foo.2
7+
; CHECK-LABEL: @foo.specialized.1
8+
; CHECK-LABEL: @foo.specialized.2
99

1010
define internal void @foo(ptr %TLI, ptr %DL, ptr %Ty, ptr %ValueVTs, ptr %Offsets, i64 %StartingOffset) {
1111
entry:

llvm/test/Transforms/FunctionSpecialization/compiler-crash-58759.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ declare i32 @p0(i32 noundef)
2323
declare i32 @p1(i32 noundef)
2424

2525
;; Tests that `f` has been fully specialize and it didn't cause compiler crash.
26-
;; CHECK-DAG: f.1
27-
;; CHECK-DAG: f.2
26+
;; CHECK-DAG: f.specialized.1
27+
;; CHECK-DAG: f.specialized.2

llvm/test/Transforms/FunctionSpecialization/compiler-crash-60191.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ define i32 @f2(i32 %offset) {
6060
}
6161

6262
; Tests that `func` has been specialized and it didn't cause compiler crash.
63-
; CHECK-DAG: func.1
64-
; CHECK-DAG: func.2
65-
; CHECK-DAG: func.3
63+
; CHECK-DAG: func.specialized.1
64+
; CHECK-DAG: func.specialized.2
65+
; CHECK-DAG: func.specialized.3
6666

llvm/test/Transforms/FunctionSpecialization/compiler-crash-promote-alloca.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
; Tests that `bar` has been specialized and that the compiler did not crash
44
; while attempting to promote the alloca in `entry`.
5-
; CHECK: bar.1
5+
; CHECK: bar.specialized.1
66

77
@block = internal constant [8 x i8] zeroinitializer, align 1
88

llvm/test/Transforms/FunctionSpecialization/constant-struct.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ define i32 @foo(i32 %y0, i32 %y1) {
88
; CHECK-NEXT: entry:
99
; CHECK-NEXT: [[Y:%.*]] = insertvalue { i32, i32 } undef, i32 [[Y0:%.*]], 0
1010
; CHECK-NEXT: [[YY:%.*]] = insertvalue { i32, i32 } [[Y]], i32 [[Y1:%.*]], 1
11-
; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @add.1({ i32, i32 } { i32 2, i32 3 }, { i32, i32 } [[YY]])
11+
; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @add.specialized.1({ i32, i32 } { i32 2, i32 3 }, { i32, i32 } [[YY]])
1212
; CHECK-NEXT: ret i32 [[CALL]]
1313
;
1414
entry:
@@ -23,7 +23,7 @@ define i32 @bar(i32 %x0, i32 %x1) {
2323
; CHECK-NEXT: entry:
2424
; CHECK-NEXT: [[X:%.*]] = insertvalue { i32, i32 } undef, i32 [[X0:%.*]], 0
2525
; CHECK-NEXT: [[XX:%.*]] = insertvalue { i32, i32 } [[X]], i32 [[X1:%.*]], 1
26-
; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @add.2({ i32, i32 } [[XX]], { i32, i32 } { i32 3, i32 2 })
26+
; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @add.specialized.2({ i32, i32 } [[XX]], { i32, i32 } { i32 3, i32 2 })
2727
; CHECK-NEXT: ret i32 [[CALL]]
2828
;
2929
entry:

llvm/test/Transforms/FunctionSpecialization/function-specialization-always-inline.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: opt -passes="ipsccp<func-spec>" -force-specialization -S < %s | FileCheck %s
22

3-
; CHECK-NOT: foo.{{[0-9]+}}
3+
; CHECK-NOT: foo.specialized.{{[0-9]+}}
44

55
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
66

llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ define internal i64 @zoo(i1 %flag) {
3030
; CHECK-NEXT: entry:
3131
; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[PLUS:%.*]], label [[MINUS:%.*]]
3232
; CHECK: plus:
33-
; CHECK-NEXT: [[TMP0:%.*]] = call i64 @func2.2(ptr getelementptr inbounds ([[STRUCT:%.*]], ptr @Global, i64 0, i32 3))
33+
; CHECK-NEXT: [[TMP0:%.*]] = call i64 @func2.specialized.2(ptr getelementptr inbounds ([[STRUCT:%.*]], ptr @Global, i64 0, i32 3))
3434
; CHECK-NEXT: br label [[MERGE:%.*]]
3535
; CHECK: minus:
36-
; CHECK-NEXT: [[TMP1:%.*]] = call i64 @func2.1(ptr getelementptr inbounds ([[STRUCT]], ptr @Global, i64 0, i32 4))
36+
; CHECK-NEXT: [[TMP1:%.*]] = call i64 @func2.specialized.1(ptr getelementptr inbounds ([[STRUCT]], ptr @Global, i64 0, i32 4))
3737
; CHECK-NEXT: br label [[MERGE]]
3838
; CHECK: merge:
3939
; CHECK-NEXT: [[TMP2:%.*]] = phi i64 [ ptrtoint (ptr getelementptr inbounds ([[STRUCT]], ptr @Global, i64 0, i32 3) to i64), [[PLUS]] ], [ ptrtoint (ptr getelementptr inbounds ([[STRUCT]], ptr @Global, i64 0, i32 4) to i64), [[MINUS]] ]

llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression3.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
define i32 @main() {
55
; CHECK-LABEL: @main(
66
; CHECK-NEXT: bb:
7-
; CHECK-NEXT: tail call void @wombat.1(ptr undef, i64 undef, i64 undef, ptr @quux)
8-
; CHECK-NEXT: tail call void @wombat.2(ptr undef, i64 undef, i64 undef, ptr @eggs)
7+
; CHECK-NEXT: tail call void @wombat.specialized.1(ptr undef, i64 undef, i64 undef, ptr @quux)
8+
; CHECK-NEXT: tail call void @wombat.specialized.2(ptr undef, i64 undef, i64 undef, ptr @eggs)
99
; CHECK-NEXT: ret i32 undef
1010
;
1111
bb:

llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression4.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
; Check that we don't crash and specialise on a function call with byval attribute.
44

5-
; CHECK-NOT: wombat.{{[0-9]+}}
5+
; CHECK-NOT: wombat.specialized.{{[0-9]+}}
66

77
declare ptr @quux()
88
declare ptr @eggs()

llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression5.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
; Check that we don't crash and specialise on a scalar global variable with byval attribute.
55

6-
; CHECK-NOT: wombat.{{[0-9]+}}
6+
; CHECK-NOT: wombat.specialized.{{[0-9]+}}
77

88
%struct.pluto = type { %struct.spam }
99
%struct.quux = type { i16 }

llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-integers.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
; RUN: opt -passes="ipsccp<func-spec>" -funcspec-for-literal-constant=true -force-specialization -S < %s | FileCheck %s
22

33
; Check that the literal constant parameter could be specialized.
4-
; CHECK: @foo.1(
5-
; CHECK: @foo.2(
4+
; CHECK: @foo.specialized.1(
5+
; CHECK: @foo.specialized.2(
66

77
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
88

llvm/test/Transforms/FunctionSpecialization/function-specialization-minsize.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; RUN: opt -passes="ipsccp<func-spec>" -S < %s | FileCheck %s
22

3-
; CHECK-NOT: @compute.1
4-
; CHECK-NOT: @compute.2
3+
; CHECK-NOT: @compute.specialized.1
4+
; CHECK-NOT: @compute.specialized.2
55

66
define i64 @main(i64 %x, i1 %flag) {
77
entry:

llvm/test/Transforms/FunctionSpecialization/function-specialization-minsize2.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
; Checks for callsites that have been annotated with MinSize. No specialisation
44
; expected here:
55
;
6-
; CHECK-NOT: @compute.1
7-
; CHECK-NOT: @compute.2
6+
; CHECK-NOT: @compute.specialized.1
7+
; CHECK-NOT: @compute.specialized.2
88

99
define i64 @main(i64 %x, i1 %flag) {
1010
entry:

llvm/test/Transforms/FunctionSpecialization/function-specialization-minsize3.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
; specialisation for the call that does not have the attribute:
55
;
66
; CHECK: plus:
7-
; CHECK: %tmp0 = call i64 @compute.1(i64 %x, ptr @plus)
7+
; CHECK: %tmp0 = call i64 @compute.specialized.1(i64 %x, ptr @plus)
88
; CHECK: br label %merge
99
; CHECK: minus:
1010
; CHECK: %tmp1 = call i64 @compute(i64 %x, ptr @minus) #0

llvm/test/Transforms/FunctionSpecialization/function-specialization-nodup.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
; Function @foo has function attribute 'noduplicate', so check that we don't
44
; specialize it:
55

6-
; CHECK-NOT: @foo.1(
7-
; CHECK-NOT: @foo.2(
6+
; CHECK-NOT: @foo.specialized.1(
7+
; CHECK-NOT: @foo.specialized.2(
88

99
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
1010

llvm/test/Transforms/FunctionSpecialization/function-specialization-nodup2.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
; Please note that the use of the hardwareloop intrinsic is arbitrary; it's
66
; just an easy to use intrinsic that has NoDuplicate.
77

8-
; CHECK-NOT: @foo.1(
9-
; CHECK-NOT: @foo.2(
8+
; CHECK-NOT: @foo.specialized.1(
9+
; CHECK-NOT: @foo.specialized.2(
1010

1111
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
1212

llvm/test/Transforms/FunctionSpecialization/function-specialization-noexec.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
; The if.then block is not executed, so check that we don't specialise here.
44

5-
; CHECK-NOT: @foo.1(
6-
; CHECK-NOT: @foo.2(
5+
; CHECK-NOT: @foo.specialized.1(
6+
; CHECK-NOT: @foo.specialized.2(
77

88
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
99

llvm/test/Transforms/FunctionSpecialization/function-specialization-nonconst-glob.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
; Global B is not constant. We do not specialise on addresses unless we
88
; enable that:
99

10-
; ON-ADDRESS: call i32 @foo.1(i32 %x, ptr @A)
11-
; ON-ADDRESS: call i32 @foo.2(i32 %y, ptr @B)
10+
; ON-ADDRESS: call i32 @foo.specialized.1(i32 %x, ptr @A)
11+
; ON-ADDRESS: call i32 @foo.specialized.2(i32 %y, ptr @B)
1212

1313
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
1414

@@ -21,7 +21,7 @@ define dso_local i32 @bar(i32 %x, i32 %y) {
2121
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[X:%.*]], 0
2222
; CHECK-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
2323
; CHECK: if.then:
24-
; CHECK-NEXT: [[CALL:%.*]] = call i32 @foo.1(i32 [[X]], ptr @A)
24+
; CHECK-NEXT: [[CALL:%.*]] = call i32 @foo.specialized.1(i32 [[X]], ptr @A)
2525
; CHECK-NEXT: br label [[RETURN:%.*]]
2626
; CHECK: if.else:
2727
; CHECK-NEXT: [[CALL1:%.*]] = call i32 @foo(i32 [[Y:%.*]], ptr @B)
@@ -60,11 +60,11 @@ entry:
6060
ret i32 %add
6161
}
6262

63-
; CHECK-LABEL: define internal i32 @foo.1(i32 %x, ptr %b) {
63+
; CHECK-LABEL: define internal i32 @foo.specialized.1(i32 %x, ptr %b) {
6464
; CHECK-NEXT: entry:
6565
; CHECK-NEXT: %0 = load i32, ptr @A, align 4
6666
; CHECK-NEXT: %add = add nsw i32 %x, %0
6767
; CHECK-NEXT: ret i32 %add
6868
; CHECK-NEXT: }
6969

70-
; CHECK-NOT: define internal i32 @foo.2(
70+
; CHECK-NOT: define internal i32 @foo.specialized.2(

llvm/test/Transforms/FunctionSpecialization/function-specialization-recursive2.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
; Volatile store preventing recursive specialisation:
44
;
5-
; CHECK: @recursiveFunc.1
6-
; CHECK-NOT: @recursiveFunc.2
5+
; CHECK: @recursiveFunc.specialized.1
6+
; CHECK-NOT: @recursiveFunc.specialized.2
77

88
@Global = internal constant i32 1, align 4
99

llvm/test/Transforms/FunctionSpecialization/function-specialization-recursive3.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
; Duplicate store preventing recursive specialisation:
44
;
5-
; CHECK: @recursiveFunc.1
6-
; CHECK-NOT: @recursiveFunc.2
5+
; CHECK: @recursiveFunc.specialized.1
6+
; CHECK-NOT: @recursiveFunc.specialized.2
77

88
@Global = internal constant i32 1, align 4
99

llvm/test/Transforms/FunctionSpecialization/function-specialization-recursive4.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
; Alloca is not an integer type:
44
;
5-
; CHECK: @recursiveFunc.1
6-
; CHECK-NOT: @recursiveFunc.2
5+
; CHECK: @recursiveFunc.specialized.1
6+
; CHECK-NOT: @recursiveFunc.specialized.2
77

88
@Global = internal constant i32 1, align 4
99

llvm/test/Transforms/FunctionSpecialization/function-specialization.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@ define i64 @main(i64 %x, i1 %flag) {
77
; CHECK: entry:
88
; CHECK-NEXT: br i1 %flag, label %plus, label %minus
99
; CHECK: plus:
10-
; CHECK-NEXT: [[TMP0:%.+]] = call i64 @compute.1(i64 %x, ptr @plus)
10+
; CHECK-NEXT: [[TMP0:%.+]] = call i64 @compute.specialized.1(i64 %x, ptr @plus)
1111
; CHECK-NEXT: br label %merge
1212
; CHECK: minus:
13-
; CHECK-NEXT: [[TMP1:%.+]] = call i64 @compute.2(i64 %x, ptr @minus)
13+
; CHECK-NEXT: [[TMP1:%.+]] = call i64 @compute.specialized.2(i64 %x, ptr @minus)
1414
; CHECK-NEXT: br label %merge
1515
; CHECK: merge:
1616
; CHECK-NEXT: [[TMP2:%.+]] = phi i64 [ [[TMP0]], %plus ], [ [[TMP1]], %minus ]
1717
; CHECK-NEXT: ret i64 [[TMP2]]
1818
; CHECK-NEXT: }
1919
;
2020
; NOFSPEC-LABEL: @main(i64 %x, i1 %flag) {
21-
; NOFSPEC-NOT: call i64 @compute.{{[0-9]+}}(
21+
; NOFSPEC-NOT: call i64 @compute.specialized.{{[0-9]+}}(
2222
; NOFSPEC: call i64 @compute(
2323
;
2424
entry:
@@ -39,20 +39,20 @@ merge:
3939

4040
; CHECK-NOT: define internal i64 @compute(
4141
;
42-
; CHECK-LABEL: define internal i64 @compute.1(i64 %x, ptr %binop) {
42+
; CHECK-LABEL: define internal i64 @compute.specialized.1(i64 %x, ptr %binop) {
4343
; CHECK-NEXT: entry:
4444
; CHECK-NEXT: [[TMP0:%.+]] = call i64 @plus(i64 %x)
4545
; CHECK-NEXT: ret i64 [[TMP0]]
4646
; CHECK-NEXT: }
4747
;
48-
; CHECK-LABEL: define internal i64 @compute.2(i64 %x, ptr %binop) {
48+
; CHECK-LABEL: define internal i64 @compute.specialized.2(i64 %x, ptr %binop) {
4949
; CHECK-NEXT: entry:
5050
; CHECK-NEXT: [[TMP0:%.+]] = call i64 @minus(i64 %x)
5151
; CHECK-NEXT: ret i64 [[TMP0]]
5252
; CHECK-NEXT: }
5353
;
5454
; NOFSPEC: define internal i64 @compute(
55-
; NOFSPEC-NOT: define internal i64 @compute.{{[0-9]+}}(
55+
; NOFSPEC-NOT: define internal i64 @compute.specialized.{{[0-9]+}}(
5656
;
5757
define internal i64 @compute(i64 %x, ptr %binop) {
5858
entry:

llvm/test/Transforms/FunctionSpecialization/function-specialization2.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
; RUN: opt -passes="ipsccp<func-spec>,deadargelim" -funcspec-max-iters=1 -force-specialization -S < %s | FileCheck %s
44
; RUN: opt -passes="ipsccp<func-spec>,deadargelim" -funcspec-max-iters=0 -force-specialization -S < %s | FileCheck %s --check-prefix=DISABLED
55

6-
; DISABLED-NOT: @func.1(
7-
; DISABLED-NOT: @func.2(
6+
; DISABLED-NOT: @func.specialized.1(
7+
; DISABLED-NOT: @func.specialized.2(
88

99
define internal i32 @func(ptr %0, i32 %1, ptr nocapture %2) {
1010
%4 = alloca i32, align 4
@@ -42,15 +42,15 @@ define internal void @decrement(ptr nocapture %0) {
4242
}
4343

4444
define i32 @main(ptr %0, i32 %1) {
45-
; CHECK: call void @func.2(ptr [[TMP0:%.*]], i32 [[TMP1:%.*]])
45+
; CHECK: call void @func.specialized.2(ptr [[TMP0:%.*]], i32 [[TMP1:%.*]])
4646
%3 = call i32 @func(ptr %0, i32 %1, ptr nonnull @increment)
47-
; CHECK: call void @func.1(ptr [[TMP0]], i32 0)
47+
; CHECK: call void @func.specialized.1(ptr [[TMP0]], i32 0)
4848
%4 = call i32 @func(ptr %0, i32 %3, ptr nonnull @decrement)
4949
; CHECK: ret i32 0
5050
ret i32 %4
5151
}
5252

53-
; CHECK: @func.1(
53+
; CHECK: @func.specialized.1(
5454
; CHECK: [[TMP3:%.*]] = alloca i32, align 4
5555
; CHECK: store i32 [[TMP1:%.*]], ptr [[TMP3]], align 4
5656
; CHECK: [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 4
@@ -63,13 +63,13 @@ define i32 @main(ptr %0, i32 %1) {
6363
; CHECK: call void @decrement(ptr [[TMP9]])
6464
; CHECK: [[TMP10:%.*]] = load i32, ptr [[TMP3]], align 4
6565
; CHECK: [[TMP11:%.*]] = add nsw i32 [[TMP10]], -1
66-
; CHECK: call void @func.1(ptr [[TMP0]], i32 [[TMP11]])
66+
; CHECK: call void @func.specialized.1(ptr [[TMP0]], i32 [[TMP11]])
6767
; CHECK: br label [[TMP12:%.*]]
6868
; CHECK: 12:
6969
; CHECK: ret void
7070
;
7171
;
72-
; CHECK: @func.2(
72+
; CHECK: @func.specialized.2(
7373
; CHECK: [[TMP3:%.*]] = alloca i32, align 4
7474
; CHECK: store i32 [[TMP1:%.*]], ptr [[TMP3]], align 4
7575
; CHECK: [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 4
@@ -82,7 +82,7 @@ define i32 @main(ptr %0, i32 %1) {
8282
; CHECK: call void @increment(ptr [[TMP9]])
8383
; CHECK: [[TMP10:%.*]] = load i32, ptr [[TMP3]], align 4
8484
; CHECK: [[TMP11:%.*]] = add nsw i32 [[TMP10]], -1
85-
; CHECK: call void @func.2(ptr [[TMP0]], i32 [[TMP11]])
85+
; CHECK: call void @func.specialized.2(ptr [[TMP0]], i32 [[TMP11]])
8686
; CHECK: br label [[TMP12:%.*]]
8787
; CHECK: 12:
8888
; CHECK: ret void

0 commit comments

Comments
 (0)