What do you mean by polymorphic functions? Do you mean function overloads by parameter type? It works, though not for export functions (because export functions are "C" functions and has no mangling).
> cat ov.ispc
void foo(int i, int j);
void foo(float f, float g);
void bar() {
int i,j;
float f,g;
foo(i,j);
foo(f,g);
}
> ispc ov.ispc --emit-llvm -o -|llvm-dis
Warning: No --target specified on command-line. Using default
system target "avx2-i32x8".
; ModuleID = '<stdin>'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin14.5.0"
; Function Attrs: nounwind
declare void @foo___vyivyi(<8 x i32>, <8 x i32>, <8 x i32>) #0
; Function Attrs: nounwind
declare void @foo___vyfvyf(<8 x float>, <8 x float>, <8 x i32>) #0
; Function Attrs: nounwind
define void @0(<8 x i32> %__mask) #0 {
allocas:
tail call void @foo___vyivyi(<8 x i32> undef, <8 x i32> undef, <8 x i32> %__mask)
tail call void @foo___vyfvyf(<8 x float> undef, <8 x float> undef, <8 x i32> %__mask)
ret void
}
attributes #0 = { nounwind }
!llvm.ident = !{!0}
!llvm.module.flags = !{!1}
!0 = !{!"clang version 3.8.0 (trunk 252601)"}
!1 = !{i32 1, !"PIC Level", i32 2}