Skip to content

Commit 95b6d97

Browse files
committed
[llvm] Improve TLI for Darwin libsystem_m functions
... to ensure we can vectorize these under -veclib=Darwin_libsystem_m
1 parent ff58236 commit 95b6d97

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

llvm/include/llvm/Analysis/TargetLibraryInfo.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,12 +409,18 @@ class TargetLibraryInfo {
409409
default: break;
410410
// clang-format off
411411
case LibFunc_acos: case LibFunc_acosf: case LibFunc_acosl:
412+
case LibFunc_acosh: case LibFunc_acoshf: case LibFunc_acoshl:
412413
case LibFunc_asin: case LibFunc_asinf: case LibFunc_asinl:
414+
case LibFunc_asinh: case LibFunc_asinhf: case LibFunc_asinhl:
415+
case LibFunc_atan2: case LibFunc_atan2f: case LibFunc_atan2l:
413416
case LibFunc_atan: case LibFunc_atanf: case LibFunc_atanl:
417+
case LibFunc_atanh: case LibFunc_atanhf: case LibFunc_atanhl:
418+
case LibFunc_cbrt: case LibFunc_cbrtf: case LibFunc_cbrtl:
414419
case LibFunc_ceil: case LibFunc_ceilf: case LibFunc_ceill:
415420
case LibFunc_copysign: case LibFunc_copysignf: case LibFunc_copysignl:
416421
case LibFunc_cos: case LibFunc_cosf: case LibFunc_cosl:
417422
case LibFunc_cosh: case LibFunc_coshf: case LibFunc_coshl:
423+
case LibFunc_erf: case LibFunc_erff: case LibFunc_erfl:
418424
case LibFunc_exp2: case LibFunc_exp2f: case LibFunc_exp2l:
419425
case LibFunc_fabs: case LibFunc_fabsf: case LibFunc_fabsl:
420426
case LibFunc_floor: case LibFunc_floorf: case LibFunc_floorl:
@@ -425,6 +431,7 @@ class TargetLibraryInfo {
425431
case LibFunc_memcmp: case LibFunc_bcmp: case LibFunc_strcmp:
426432
case LibFunc_memcpy: case LibFunc_memset: case LibFunc_memmove:
427433
case LibFunc_nearbyint: case LibFunc_nearbyintf: case LibFunc_nearbyintl:
434+
case LibFunc_pow: case LibFunc_powf: case LibFunc_powl:
428435
case LibFunc_rint: case LibFunc_rintf: case LibFunc_rintl:
429436
case LibFunc_round: case LibFunc_roundf: case LibFunc_roundl:
430437
case LibFunc_sin: case LibFunc_sinf: case LibFunc_sinl:
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
; RUN: opt -vector-library=Darwin_libsystem_m -passes=inject-tli-mappings,loop-vectorize -S < %s | FileCheck %s
2+
3+
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
4+
target triple = "arm64-apple-ios"
5+
6+
declare float @atan2f(float, float)
7+
8+
define void @foo(ptr noalias nocapture %ptrA,
9+
ptr noalias nocapture readonly %ptrB,
10+
ptr noalias nocapture readonly %ptrC,
11+
i64 %size) {
12+
; CHECK-LABEL: @foo(
13+
; CHECK: call <4 x float> @_simd_atan2_f4(<4 x float>
14+
;
15+
entry:
16+
br label %for.cond
17+
18+
for.cond: ; preds = %for.body, %entry
19+
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
20+
%exitcond = icmp eq i64 %indvars.iv, %size
21+
br i1 %exitcond, label %for.cond.cleanup, label %for.body
22+
23+
for.body: ; preds = %for.cond
24+
%arrayidx = getelementptr inbounds float, ptr %ptrB, i64 %indvars.iv
25+
%src1 = load float, ptr %arrayidx, align 4
26+
27+
%arrayidx2 = getelementptr inbounds float, ptr %ptrC, i64 %indvars.iv
28+
%src2 = load float, ptr %arrayidx, align 4
29+
30+
%arrayidx3 = getelementptr inbounds float, ptr %ptrA, i64 %indvars.iv
31+
32+
%phase = call float @atan2f(float %src1, float %src2)
33+
34+
store float %phase, ptr %arrayidx3, align 4
35+
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
36+
br label %for.cond, !llvm.loop !0
37+
38+
for.cond.cleanup: ; preds = %for.cond
39+
ret void
40+
}
41+
42+
!0 = distinct !{!0, !1}
43+
!1 = !{!"llvm.loop.vectorize.enable", i1 true}

0 commit comments

Comments
 (0)