brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 9446e55 Raw
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