Skip to content

Commit 98e7f6e

Browse files
author
Pratheek Gowda BS
committed
errors were fixed
1 parent 4875553 commit 98e7f6e

File tree

11 files changed

+327
-0
lines changed

11 files changed

+327
-0
lines changed

llvm/include/llvm/Analysis/TargetLibraryInfo.def

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1731,6 +1731,22 @@ TLI_DEFINE_ENUM_INTERNAL(llabs)
17311731
TLI_DEFINE_STRING_INTERNAL("llabs")
17321732
TLI_DEFINE_SIG_INTERNAL(LLong, LLong)
17331733

1734+
//long long llrint ( double num );
1735+
TLI_DEFINE_ENUM_INTERNAL(llrint)
1736+
TLI_DEFINE_STRING_INTERNAL("llrint")
1737+
TLI_DEFINE_SIG_INTERNAL(LLong,Dbl)
1738+
1739+
1740+
//long long llrintf( float arg );
1741+
TLI_DEFINE_ENUM_INTERNAL(llrintf)
1742+
TLI_DEFINE_STRING_INTERNAL("llrintf")
1743+
TLI_DEFINE_SIG_INTERNAL(LLong,Flt)
1744+
1745+
//long long llrintl( long double arg );
1746+
TLI_DEFINE_ENUM_INTERNAL(llrintl)
1747+
TLI_DEFINE_STRING_INTERNAL("llrintl")
1748+
TLI_DEFINE_SIG_INTERNAL(LLong,LDbl)
1749+
17341750
/// double log(double x);
17351751
TLI_DEFINE_ENUM_INTERNAL(log)
17361752
TLI_DEFINE_STRING_INTERNAL("log")

llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ class LibCallSimplifier {
207207
Value *optimizeLog(CallInst *CI, IRBuilderBase &B);
208208
Value *optimizeSqrt(CallInst *CI, IRBuilderBase &B);
209209
Value *optimizeFMod(CallInst *CI, IRBuilderBase &B);
210+
Value *optimizellrint(CallInst *CI,IRBuilderBase &B);
210211
Value *mergeSqrtToExp(CallInst *CI, IRBuilderBase &B);
211212
Value *optimizeSinCosPi(CallInst *CI, bool IsSin, IRBuilderBase &B);
212213
Value *optimizeTrigInversionPairs(CallInst *CI, IRBuilderBase &B);

llvm/lib/Analysis/TargetLibraryInfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
309309
TLI.setUnavailable(LibFunc_floorf);
310310
TLI.setUnavailable(LibFunc_fmodf);
311311
TLI.setUnavailable(LibFunc_hypotf);
312+
TLI.setAvailable(LibFunc_llrintf);
312313
TLI.setUnavailable(LibFunc_log10f);
313314
TLI.setUnavailable(LibFunc_logf);
314315
TLI.setUnavailable(LibFunc_modff);
@@ -342,6 +343,7 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T,
342343
TLI.setUnavailable(LibFunc_frexpl);
343344
TLI.setUnavailable(LibFunc_hypotl);
344345
TLI.setUnavailable(LibFunc_ldexpl);
346+
TLI.setUnavailable(LibFunc_llrintl);
345347
TLI.setUnavailable(LibFunc_log10l);
346348
TLI.setUnavailable(LibFunc_logl);
347349
TLI.setUnavailable(LibFunc_modfl);

llvm/lib/Transforms/Utils/BuildLibCalls.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,13 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F,
13681368
Changed |= setDoesNotFreeMemory(F);
13691369
Changed |= setWillReturn(F);
13701370
break;
1371+
case LibFunc_llrintf:
1372+
case LibFunc_llrintl:
1373+
case LibFunc_llrint:
1374+
Changed|=setDoesNotThrow(F);
1375+
Changed|=setDoesNotAccessMemory(F);
1376+
Changed|=setWillReturn(F);
1377+
break;
13711378
case LibFunc_sincos:
13721379
case LibFunc_sincosf:
13731380
case LibFunc_sincosl:

llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3111,6 +3111,28 @@ Value *LibCallSimplifier::optimizeRemquo(CallInst *CI, IRBuilderBase &B) {
31113111
return ConstantFP::get(CI->getType(), Rem);
31123112
}
31133113

3114+
Value *LibCallSimplifier::optimizellrint(CallInst *CI,IRBuilderBase &B){
3115+
const APFloat *X;
3116+
if(!match(CI->getOperand(0),m_APFloat(X))){
3117+
return nullptr;
3118+
}
3119+
Type *type=CI->getType();
3120+
3121+
unsigned width=type->getIntegerBitWidth();
3122+
3123+
APSInt Result(width,false);
3124+
bool Isexact;
3125+
3126+
APFloat::opStatus Status=X->convertToInteger(Result,APFloat::rmNearestTiesToEven,&Isexact);
3127+
3128+
if(Status==APFloat::opOK || Status==APFloat::opInexact){
3129+
return ConstantInt::get(type,Result);
3130+
}
3131+
3132+
return nullptr;
3133+
3134+
}
3135+
31143136
/// Constant folds fdim
31153137
Value *LibCallSimplifier::optimizeFdim(CallInst *CI, IRBuilderBase &B) {
31163138
// Cannot perform the fold unless the call has attribute memory(none)

llvm/test/Transforms/InferFunctionAttrs/annotate.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,15 @@ declare i32 @ilogbf(float)
661661
; CHECK: declare i32 @ilogbl(x86_fp80) [[ERRNOMEMONLY_NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
662662
declare i32 @ilogbl(x86_fp80)
663663

664+
; CHECK: declare noundef i64 @llrint(double) [[MATH_NOACCESS:#[0-9]+]]
665+
declare i64 @llrint(double)
666+
667+
; CHECK: declare noundef i64 @llrintf(float) [[MATH_NOACCESS:#[0-9]+]]
668+
declare i64 @llrintf(float)
669+
670+
; CHECK: declare noundef i64 @llrintl(x86_fp80) [[MATH_NOACCESS:#[0-9]+]]
671+
declare i64 @llrintl(x86_fp80)
672+
664673
; CHECK: declare double @logb(double) [[ERRNOMEMONLY_NOFREE_NOUNWIND_WILLRETURN:#[0-9]+]]
665674
declare double @logb(double)
666675

@@ -1196,6 +1205,7 @@ declare void @memset_pattern16(ptr, ptr, i64)
11961205
; CHECK-DAG: attributes [[NOFREE_NOUNWIND_READONLY_WILLRETURN]] = { mustprogress nocallback nofree nounwind willreturn memory(read) }
11971206
; CHECK-DAG: attributes [[ARGMEMONLY_NOFREE_NOUNWIND_WILLRETURN]] = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
11981207
; CHECK-DAG: attributes [[NOFREE_NOUNWIND_READONLY]] = { nofree nounwind memory(read) }
1208+
; CHECK-DAG: attributes [[MATH_NOACCESS]] = { mustprogress nofree nosync nounwind willreturn memory(none) }
11991209
; CHECK-DAG: attributes [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND_WILLRETURN_ALLOCKIND_FREE_FAMILY_MALLOC]] = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
12001210
; CHECK-DAG: attributes [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN_ALLOCKIND_ALLOCUNINIT_ALLOCSIZE0_FAMILY_MALLOC]] = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
12011211
; CHECK-DAG: attributes [[INACCESSIBLEMEMONLY_NOFREE_NOUNWIND_WILLRETURN_ALLOCKIND_ALLOCUNINIT_FAMILY_MALLOC]] = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
; RUN: opt -S -passes=instcombine %s -o - | FileCheck %s
2+
3+
4+
declare i64 @llrint(double)
5+
6+
; Positive number test
7+
; CHECK-LABEL: define i64 @test_llrint_pos()
8+
; CHECK-NEXT: entry:
9+
; CHECK-NEXT: ret i64 4
10+
define i64 @test_llrint_pos() {
11+
entry:
12+
%val = call i64 @llrint(double 3.5)
13+
ret i64 %val
14+
}
15+
16+
; Negative number test
17+
; CHECK-LABEL: define i64 @test_llrint_neg()
18+
; CHECK-NEXT: entry:
19+
; CHECK-NEXT: ret i64 -2
20+
define i64 @test_llrint_neg() {
21+
entry:
22+
%val = call i64 @llrint(double -2.5)
23+
ret i64 %val
24+
}
25+
26+
; Zero test
27+
; CHECK-LABEL: define i64 @test_llrint_zero()
28+
; CHECK-NEXT: entry:
29+
; CHECK-NEXT: ret i64 0
30+
define i64 @test_llrint_zero() {
31+
entry:
32+
%val = call i64 @llrint(double 0.0)
33+
ret i64 %val
34+
}
35+
36+
; Large value test
37+
; CHECK-LABEL: define i64 @test_llrint_large()
38+
; CHECK-NEXT: entry:
39+
; CHECK-NEXT: ret i64 1000000
40+
define i64 @test_llrint_large() {
41+
entry:
42+
%val = call i64 @llrint(double 1.0e6)
43+
ret i64 %val
44+
}
45+
46+
; Rounding test (check ties-to-even)
47+
; CHECK-LABEL: define i64 @test_llrint_round_even()
48+
; CHECK-NEXT: entry:
49+
; CHECK-NEXT: ret i64 2
50+
define i64 @test_llrint_round_even() {
51+
entry:
52+
%val = call i64 @llrint(double 2.5)
53+
ret i64 %val
54+
}
55+
56+
; NaN test
57+
; CHECK-LABEL: define i64 @test_llrint_nan()
58+
; CHECK-NEXT: entry:
59+
; CHECK-NEXT: %val = call i64 @llrint(double 0x7FF8000000000000)
60+
; CHECK-NEXT: ret i64 %val
61+
define i64 @test_llrint_nan() {
62+
entry:
63+
%val = call i64 @llrint(double 0x7FF8000000000000) ; NaN
64+
ret i64 %val
65+
}
66+
67+
; +Inf test
68+
; CHECK-LABEL: define i64 @test_llrint_posinf()
69+
; CHECK-NEXT: entry:
70+
; CHECK-NEXT: %val = call i64 @llrint(double 0x7FF0000000000000)
71+
; CHECK-NEXT: ret i64 %val
72+
define i64 @test_llrint_posinf() {
73+
entry:
74+
%val = call i64 @llrint(double 0x7FF0000000000000) ; +Inf
75+
ret i64 %val
76+
}
77+
78+
; -Inf test
79+
; CHECK-LABEL: define i64 @test_llrint_neginf()
80+
; CHECK-NEXT: entry:
81+
; CHECK-NEXT: %val = call i64 @llrint(double 0xFFF0000000000000)
82+
; CHECK-NEXT: ret i64 %val
83+
define i64 @test_llrint_neginf() {
84+
entry:
85+
%val = call i64 @llrint(double 0xFFF0000000000000) ; -Inf
86+
ret i64 %val
87+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
; RUN: opt -S -passes=instcombine %s -o - | FileCheck %s
2+
3+
declare i64 @llrintf(float)
4+
5+
; Positive number test
6+
; CHECK-LABEL: define i64 @test_llrintf_pos()
7+
; CHECK-NEXT: entry:
8+
; CHECK-NEXT: ret i64 4
9+
define i64 @test_llrintf_pos() {
10+
entry:
11+
%val = call i64 @llrintf(float 3.5)
12+
ret i64 %val
13+
}
14+
15+
; Negative number test
16+
; CHECK-LABEL: define i64 @test_llrintf_neg()
17+
; CHECK-NEXT: entry:
18+
; CHECK-NEXT: ret i64 -2
19+
define i64 @test_llrintf_neg() {
20+
entry:
21+
%val = call i64 @llrintf(float -2.5)
22+
ret i64 %val
23+
}
24+
25+
; Zero test
26+
; CHECK-LABEL: define i64 @test_llrintf_zero()
27+
; CHECK-NEXT: entry:
28+
; CHECK-NEXT: ret i64 0
29+
define i64 @test_llrintf_zero() {
30+
entry:
31+
%val = call i64 @llrintf(float 0.0)
32+
ret i64 %val
33+
}
34+
65 changes: 65 additions & 0 deletions65
35+
llvm/test/Transforms/InstCombine/llrintl_fp80.ll
36+
Original file line number Diff line number Diff line change
37+
@@ -0,0 +1,65 @@
38+
; RUN: opt -S -passes=instcombine %s -o - | FileCheck %s
39+
declare i64 @llrintl(x86_fp80)
40+
41+
; Positive number
42+
; CHECK-LABEL: define i64 @test_llrintl_pos()
43+
; CHECK-NEXT: entry:
44+
; CHECK-NEXT: ret i64 4
45+
define i64 @test_llrintl_pos() {
46+
entry:
47+
%val = call i64 @llrintl(x86_fp80 0xK4000E000000000000000)
48+
ret i64 %val
49+
}
50+
51+
; Negative number
52+
; CHECK-LABEL: define i64 @test_llrintl_neg()
53+
; CHECK-NEXT: entry:
54+
; CHECK-NEXT: ret i64 -2
55+
define i64 @test_llrintl_neg() {
56+
entry:
57+
%val = call i64 @llrintl(x86_fp80 0xKC000A000000000000000)
58+
ret i64 %val
59+
}
60+
61+
; Zero
62+
; CHECK-LABEL: define i64 @test_llrintl_zero()
63+
; CHECK-NEXT: entry:
64+
; CHECK-NEXT: ret i64 0
65+
define i64 @test_llrintl_zero() {
66+
entry:
67+
%val = call i64 @llrintl(x86_fp80 0xK00000000000000000000)
68+
ret i64 %val
69+
}
70+
71+
; NaN
72+
; CHECK-LABEL: define i64 @test_llrintl_nan()
73+
; CHECK-NEXT: entry:
74+
; CHECK-NEXT: %val = call i64 @llrintl(x86_fp80 0xK7FFF8000000000000000)
75+
; CHECK-NEXT: ret i64 %val
76+
define i64 @test_llrintl_nan() {
77+
entry:
78+
%val = call i64 @llrintl(x86_fp80 0xK7FFF8000000000000000)
79+
ret i64 %val
80+
}
81+
82+
; +Inf
83+
; CHECK-LABEL: define i64 @test_llrintl_posinf()
84+
; CHECK-NEXT: entry:
85+
; CHECK-NEXT: %val = call i64 @llrintl(x86_fp80 0xK7FFF0000000000000000)
86+
; CHECK-NEXT: ret i64 %val
87+
define i64 @test_llrintl_posinf() {
88+
entry:
89+
%val = call i64 @llrintl(x86_fp80 0xK7FFF0000000000000000)
90+
ret i64 %val
91+
}
92+
93+
; -Inf
94+
; CHECK-LABEL: define i64 @test_llrintl_neginf()
95+
; CHECK-NEXT: entry:
96+
; CHECK-NEXT: %val = call i64 @llrintl(x86_fp80 0xKFFFF0000000000000000)
97+
; CHECK-NEXT: ret i64 %val
98+
define i64 @test_llrintl_neginf() {
99+
entry:
100+
%val = call i64 @llrintl(x86_fp80 0xKFFFF0000000000000000)
101+
ret i64 %val
102+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; RUN: opt -S -passes=instcombine %s -o - | FileCheck %s
2+
declare i64 @llrintl(x86_fp80)
3+
4+
; Positive number
5+
; CHECK-LABEL: define i64 @test_llrintl_pos()
6+
; CHECK-NEXT: entry:
7+
; CHECK-NEXT: ret i64 4
8+
define i64 @test_llrintl_pos() {
9+
entry:
10+
%val = call i64 @llrintl(x86_fp80 0xK4000E000000000000000)
11+
ret i64 %val
12+
}
13+
14+
; Negative number
15+
; CHECK-LABEL: define i64 @test_llrintl_neg()
16+
; CHECK-NEXT: entry:
17+
; CHECK-NEXT: ret i64 -2
18+
define i64 @test_llrintl_neg() {
19+
entry:
20+
%val = call i64 @llrintl(x86_fp80 0xKC000A000000000000000)
21+
ret i64 %val
22+
}
23+
24+
; Zero
25+
; CHECK-LABEL: define i64 @test_llrintl_zero()
26+
; CHECK-NEXT: entry:
27+
; CHECK-NEXT: ret i64 0
28+
define i64 @test_llrintl_zero() {
29+
entry:
30+
%val = call i64 @llrintl(x86_fp80 0xK00000000000000000000)
31+
ret i64 %val
32+
}
33+
34+
; NaN
35+
; CHECK-LABEL: define i64 @test_llrintl_nan()
36+
; CHECK-NEXT: entry:
37+
; CHECK-NEXT: %val = call i64 @llrintl(x86_fp80 0xK7FFF8000000000000000)
38+
; CHECK-NEXT: ret i64 %val
39+
define i64 @test_llrintl_nan() {
40+
entry:
41+
%val = call i64 @llrintl(x86_fp80 0xK7FFF8000000000000000)
42+
ret i64 %val
43+
}
44+
45+
; +Inf
46+
; CHECK-LABEL: define i64 @test_llrintl_posinf()
47+
; CHECK-NEXT: entry:
48+
; CHECK-NEXT: %val = call i64 @llrintl(x86_fp80 0xK7FFF0000000000000000)
49+
; CHECK-NEXT: ret i64 %val
50+
define i64 @test_llrintl_posinf() {
51+
entry:
52+
%val = call i64 @llrintl(x86_fp80 0xK7FFF0000000000000000)
53+
ret i64 %val
54+
}
55+
56+
; -Inf
57+
; CHECK-LABEL: define i64 @test_llrintl_neginf()
58+
; CHECK-NEXT: entry:
59+
; CHECK-NEXT: %val = call i64 @llrintl(x86_fp80 0xKFFFF0000000000000000)
60+
; CHECK-NEXT: ret i64 %val
61+
define i64 @test_llrintl_neginf() {
62+
entry:
63+
%val = call i64 @llrintl(x86_fp80 0xKFFFF0000000000000000)
64+
ret i64 %val
65+
}

llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,18 @@ DynamicSymbols:
690690
Type: STT_FUNC
691691
Section: .text
692692
Binding: STB_GLOBAL
693+
- Name: llrint
694+
Type: STT_FUNC
695+
Section: .text
696+
Binding: STB_GLOBAL
697+
- Name: llrintf
698+
Type: STT_FUNC
699+
Section: .text
700+
Binding: STB_GLOBAL
701+
- Name: llrintl
702+
Type: STT_FUNC
703+
Section: .text
704+
Binding: STB_GLOBAL
693705
- Name: logb
694706
Type: STT_FUNC
695707
Section: .text

0 commit comments

Comments
 (0)