67 lines · plain
1; RUN: opt -S --passes=ipsccp,deadargelim -funcspec-for-literal-constant --force-specialization < %s | FileCheck %s2 3; Test that all of `f0`, `f1`, and `f2` are specialised, even though `f0` has its address taken4; and `f1` is with external linkage (`f2` was specialised anyway).5 6@p = global ptr @f07 8; `f0` is kept even though all apparent calls are specialized9; CHECK-LABEL: define internal i32 @f0(10define internal i32 @f0(i32 %i) {11 %v = add i32 %i, 112 ret i32 %v13}14 15; Likewise, `f1` is kept, because of the external linkage16; CHECK-LABEL: define i32 @f1(17define i32 @f1(i32 %i) {18 %v = add i32 %i, 119 ret i32 %v20}21 22; `f2` is fully specialised.23; CHECK-NOT: defined internal i32 @f2()24define internal i32 @f2(i32 %i) {25 %v = add i32 %i, 126 ret i32 %v27}28 29;; All calls are to specilisation instances.30 31; CHECK-LABEL: define i32 @g032; CHECK: call void @f0.specialized.[[#A:]]()33; CHECK-NEXT: call void @f1.specialized.[[#B:]]()34; CHECK-NEXT: call void @f2.specialized.[[#C:]]()35; CHECK-NEXT: ret i32 936define i32 @g0(i32 %i) {37 %u0 = call i32 @f0(i32 1)38 %u1 = call i32 @f1(i32 2)39 %u2 = call i32 @f2(i32 3)40 %v0 = add i32 %u0, %u141 %v = add i32 %v0, %u242 ret i32 %v43}44 45; CHECK-LABEL: define i32 @g146; CHECK: call void @f0.specialized.[[#D:]]()47; CHECK-NEXT: call void @f1.specialized.[[#E:]]()48; CHECK-NEXT: call void @f2.specialized.[[#F:]]()49; CHECK-NEXT: ret i32 1250define i32 @g1(i32 %i) {51 %u0 = call i32 @f0(i32 2)52 %u1 = call i32 @f1(i32 3)53 %u2 = call i32 @f2(i32 4)54 %v0 = add i32 %u0, %u155 %v = add i32 %v0, %u256 ret i32 %v57}58 59; All of the function are specialized and all clones are with internal linkage.60 61; CHECK-DAG: define internal void @f0.specialized.[[#A]]() {62; CHECK-DAG: define internal void @f1.specialized.[[#B]]() {63; CHECK-DAG: define internal void @f2.specialized.[[#C]]() {64; CHECK-DAG: define internal void @f0.specialized.[[#D]]() {65; CHECK-DAG: define internal void @f1.specialized.[[#E]]() {66; CHECK-DAG: define internal void @f2.specialized.[[#F]]() {67