Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 0eeae70

Browse files
committed
Adding valuenum support for acosh, asinh, atanh, and cbrt
1 parent 994d45f commit 0eeae70

File tree

7 files changed

+78
-20
lines changed

7 files changed

+78
-20
lines changed

src/inc/corinfo.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,11 @@ TODO: Talk about initializing strutures before use
213213
#define SELECTANY extern __declspec(selectany)
214214
#endif
215215

216-
SELECTANY const GUID JITEEVersionIdentifier = { /* 19258069-1777-4691-87DF-DADF8F352875 */
217-
0x19258069,
218-
0x1777,
219-
0x4691,
220-
{ 0x87, 0xdf, 0xda, 0xdf, 0x8f, 0x35, 0x28, 0x75 }
216+
SELECTANY const GUID JITEEVersionIdentifier = { /* 6C4EB5E3-7225-4E85-A6D8-D8A8B96939E5 */
217+
0x6c4eb5e3,
218+
0x7225,
219+
0x4e85,
220+
{ 0xa6, 0xd8, 0xd8, 0xa8, 0xb9, 0x69, 0x39, 0xe5 }
221221
};
222222

223223

@@ -916,6 +916,7 @@ enum CorInfoIntrinsics
916916
{
917917
CORINFO_INTRINSIC_Sin,
918918
CORINFO_INTRINSIC_Cos,
919+
CORINFO_INTRINSIC_Cbrt,
919920
CORINFO_INTRINSIC_Sqrt,
920921
CORINFO_INTRINSIC_Abs,
921922
CORINFO_INTRINSIC_Round,
@@ -924,9 +925,12 @@ enum CorInfoIntrinsics
924925
CORINFO_INTRINSIC_Tan,
925926
CORINFO_INTRINSIC_Tanh,
926927
CORINFO_INTRINSIC_Asin,
928+
CORINFO_INTRINSIC_Asinh,
927929
CORINFO_INTRINSIC_Acos,
930+
CORINFO_INTRINSIC_Acosh,
928931
CORINFO_INTRINSIC_Atan,
929932
CORINFO_INTRINSIC_Atan2,
933+
CORINFO_INTRINSIC_Atanh,
930934
CORINFO_INTRINSIC_Log10,
931935
CORINFO_INTRINSIC_Pow,
932936
CORINFO_INTRINSIC_Exp,

src/jit/compiler.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11068,6 +11068,9 @@ void cNodeIR(Compiler* comp, GenTree* tree)
1106811068
case CORINFO_INTRINSIC_Cos:
1106911069
chars += printf("Cos");
1107011070
break;
11071+
case CORINFO_INTRINSIC_Cbrt:
11072+
chars += printf("Cbrt");
11073+
break;
1107111074
case CORINFO_INTRINSIC_Sqrt:
1107211075
chars += printf("Sqrt");
1107311076
break;
@@ -11086,15 +11089,24 @@ void cNodeIR(Compiler* comp, GenTree* tree)
1108611089
case CORINFO_INTRINSIC_Asin:
1108711090
chars += printf("Asin");
1108811091
break;
11092+
case CORINFO_INTRINSIC_Asinh:
11093+
chars += printf("Asinh");
11094+
break;
1108911095
case CORINFO_INTRINSIC_Acos:
1109011096
chars += printf("Acos");
1109111097
break;
11098+
case CORINFO_INTRINSIC_Acosh:
11099+
chars += printf("Acosh");
11100+
break;
1109211101
case CORINFO_INTRINSIC_Atan:
1109311102
chars += printf("Atan");
1109411103
break;
1109511104
case CORINFO_INTRINSIC_Atan2:
1109611105
chars += printf("Atan2");
1109711106
break;
11107+
case CORINFO_INTRINSIC_Atanh:
11108+
chars += printf("Atanh");
11109+
break;
1109811110
case CORINFO_INTRINSIC_Log10:
1109911111
chars += printf("Log10");
1110011112
break;

src/jit/gentree.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3511,13 +3511,17 @@ unsigned Compiler::gtSetEvalOrder(GenTree* tree)
35113511
case CORINFO_INTRINSIC_Sin:
35123512
case CORINFO_INTRINSIC_Cos:
35133513
case CORINFO_INTRINSIC_Sqrt:
3514+
case CORINFO_INTRINSIC_Cbrt:
35143515
case CORINFO_INTRINSIC_Cosh:
35153516
case CORINFO_INTRINSIC_Sinh:
35163517
case CORINFO_INTRINSIC_Tan:
35173518
case CORINFO_INTRINSIC_Tanh:
35183519
case CORINFO_INTRINSIC_Asin:
3520+
case CORINFO_INTRINSIC_Asinh:
35193521
case CORINFO_INTRINSIC_Acos:
3522+
case CORINFO_INTRINSIC_Acosh:
35203523
case CORINFO_INTRINSIC_Atan:
3524+
case CORINFO_INTRINSIC_Atanh:
35213525
case CORINFO_INTRINSIC_Atan2:
35223526
case CORINFO_INTRINSIC_Log10:
35233527
case CORINFO_INTRINSIC_Pow:
@@ -11428,6 +11432,9 @@ void Compiler::gtDispTree(GenTreePtr tree,
1142811432
case CORINFO_INTRINSIC_Cos:
1142911433
printf(" cos");
1143011434
break;
11435+
case CORINFO_INTRINSIC_Cbrt:
11436+
printf(" cbrt");
11437+
break;
1143111438
case CORINFO_INTRINSIC_Sqrt:
1143211439
printf(" sqrt");
1143311440
break;
@@ -11452,15 +11459,24 @@ void Compiler::gtDispTree(GenTreePtr tree,
1145211459
case CORINFO_INTRINSIC_Asin:
1145311460
printf(" asin");
1145411461
break;
11462+
case CORINFO_INTRINSIC_Asinh:
11463+
printf(" asinh");
11464+
break;
1145511465
case CORINFO_INTRINSIC_Acos:
1145611466
printf(" acos");
1145711467
break;
11468+
case CORINFO_INTRINSIC_Acosh:
11469+
printf(" acosh");
11470+
break;
1145811471
case CORINFO_INTRINSIC_Atan:
1145911472
printf(" atan");
1146011473
break;
1146111474
case CORINFO_INTRINSIC_Atan2:
1146211475
printf(" atan2");
1146311476
break;
11477+
case CORINFO_INTRINSIC_Atanh:
11478+
printf(" atanh");
11479+
break;
1146411480
case CORINFO_INTRINSIC_Log10:
1146511481
printf(" log10");
1146611482
break;

src/jit/importer.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3429,6 +3429,7 @@ GenTree* Compiler::impIntrinsic(GenTree* newobjThis,
34293429
GenTreePtr op1, op2;
34303430

34313431
case CORINFO_INTRINSIC_Sin:
3432+
case CORINFO_INTRINSIC_Cbrt:
34323433
case CORINFO_INTRINSIC_Sqrt:
34333434
case CORINFO_INTRINSIC_Abs:
34343435
case CORINFO_INTRINSIC_Cos:
@@ -3438,9 +3439,12 @@ GenTree* Compiler::impIntrinsic(GenTree* newobjThis,
34383439
case CORINFO_INTRINSIC_Tan:
34393440
case CORINFO_INTRINSIC_Tanh:
34403441
case CORINFO_INTRINSIC_Asin:
3442+
case CORINFO_INTRINSIC_Asinh:
34413443
case CORINFO_INTRINSIC_Acos:
3444+
case CORINFO_INTRINSIC_Acosh:
34423445
case CORINFO_INTRINSIC_Atan:
34433446
case CORINFO_INTRINSIC_Atan2:
3447+
case CORINFO_INTRINSIC_Atanh:
34443448
case CORINFO_INTRINSIC_Log10:
34453449
case CORINFO_INTRINSIC_Pow:
34463450
case CORINFO_INTRINSIC_Exp:
@@ -3969,13 +3973,15 @@ GenTree* Compiler::impMathIntrinsic(CORINFO_METHOD_HANDLE method,
39693973
GenTree* op2;
39703974

39713975
assert(callType != TYP_STRUCT);
3972-
assert((intrinsicID == CORINFO_INTRINSIC_Sin) || (intrinsicID == CORINFO_INTRINSIC_Sqrt) ||
3973-
(intrinsicID == CORINFO_INTRINSIC_Abs) || (intrinsicID == CORINFO_INTRINSIC_Cos) ||
3974-
(intrinsicID == CORINFO_INTRINSIC_Round) || (intrinsicID == CORINFO_INTRINSIC_Cosh) ||
3975-
(intrinsicID == CORINFO_INTRINSIC_Sinh) || (intrinsicID == CORINFO_INTRINSIC_Tan) ||
3976-
(intrinsicID == CORINFO_INTRINSIC_Tanh) || (intrinsicID == CORINFO_INTRINSIC_Asin) ||
3977-
(intrinsicID == CORINFO_INTRINSIC_Acos) || (intrinsicID == CORINFO_INTRINSIC_Atan) ||
3978-
(intrinsicID == CORINFO_INTRINSIC_Atan2) || (intrinsicID == CORINFO_INTRINSIC_Log10) ||
3976+
assert((intrinsicID == CORINFO_INTRINSIC_Sin) || intrinsicID == CORINFO_INTRINSIC_Cbrt ||
3977+
(intrinsicID == CORINFO_INTRINSIC_Sqrt) || (intrinsicID == CORINFO_INTRINSIC_Abs) ||
3978+
(intrinsicID == CORINFO_INTRINSIC_Cos) || (intrinsicID == CORINFO_INTRINSIC_Round) ||
3979+
(intrinsicID == CORINFO_INTRINSIC_Cosh) || (intrinsicID == CORINFO_INTRINSIC_Sinh) ||
3980+
(intrinsicID == CORINFO_INTRINSIC_Tan) || (intrinsicID == CORINFO_INTRINSIC_Tanh) ||
3981+
(intrinsicID == CORINFO_INTRINSIC_Asin) || (intrinsicID == CORINFO_INTRINSIC_Asinh) ||
3982+
(intrinsicID == CORINFO_INTRINSIC_Acos) || (intrinsicID == CORINFO_INTRINSIC_Acosh) ||
3983+
(intrinsicID == CORINFO_INTRINSIC_Atan) || (intrinsicID == CORINFO_INTRINSIC_Atan2) ||
3984+
(intrinsicID == CORINFO_INTRINSIC_Atanh) || (intrinsicID == CORINFO_INTRINSIC_Log10) ||
39793985
(intrinsicID == CORINFO_INTRINSIC_Pow) || (intrinsicID == CORINFO_INTRINSIC_Exp) ||
39803986
(intrinsicID == CORINFO_INTRINSIC_Ceiling) || (intrinsicID == CORINFO_INTRINSIC_Floor));
39813987

@@ -19161,6 +19167,7 @@ bool Compiler::IsMathIntrinsic(CorInfoIntrinsics intrinsicId)
1916119167
switch (intrinsicId)
1916219168
{
1916319169
case CORINFO_INTRINSIC_Sin:
19170+
case CORINFO_INTRINSIC_Cbrt:
1916419171
case CORINFO_INTRINSIC_Sqrt:
1916519172
case CORINFO_INTRINSIC_Abs:
1916619173
case CORINFO_INTRINSIC_Cos:
@@ -19170,9 +19177,12 @@ bool Compiler::IsMathIntrinsic(CorInfoIntrinsics intrinsicId)
1917019177
case CORINFO_INTRINSIC_Tan:
1917119178
case CORINFO_INTRINSIC_Tanh:
1917219179
case CORINFO_INTRINSIC_Asin:
19180+
case CORINFO_INTRINSIC_Asinh:
1917319181
case CORINFO_INTRINSIC_Acos:
19182+
case CORINFO_INTRINSIC_Acosh:
1917419183
case CORINFO_INTRINSIC_Atan:
1917519184
case CORINFO_INTRINSIC_Atan2:
19185+
case CORINFO_INTRINSIC_Atanh:
1917619186
case CORINFO_INTRINSIC_Log10:
1917719187
case CORINFO_INTRINSIC_Pow:
1917819188
case CORINFO_INTRINSIC_Exp:

src/jit/valuenum.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3598,6 +3598,9 @@ ValueNum ValueNumStore::EvalMathFuncUnary(var_types typ, CorInfoIntrinsics gtMat
35983598
case CORINFO_INTRINSIC_Cos:
35993599
vnf = VNF_Cos;
36003600
break;
3601+
case CORINFO_INTRINSIC_Cbrt:
3602+
vnf = VNF_Cbrt;
3603+
break;
36013604
case CORINFO_INTRINSIC_Sqrt:
36023605
vnf = VNF_Sqrt;
36033606
break;
@@ -3637,12 +3640,21 @@ ValueNum ValueNumStore::EvalMathFuncUnary(var_types typ, CorInfoIntrinsics gtMat
36373640
case CORINFO_INTRINSIC_Asin:
36383641
vnf = VNF_Asin;
36393642
break;
3643+
case CORINFO_INTRINSIC_Asinh:
3644+
vnf = VNF_Asinh;
3645+
break;
36403646
case CORINFO_INTRINSIC_Acos:
36413647
vnf = VNF_Acos;
36423648
break;
3649+
case CORINFO_INTRINSIC_Acosh:
3650+
vnf = VNF_Acosh;
3651+
break;
36433652
case CORINFO_INTRINSIC_Atan:
36443653
vnf = VNF_Atan;
36453654
break;
3655+
case CORINFO_INTRINSIC_Atanh:
3656+
vnf = VNF_Atanh;
3657+
break;
36463658
case CORINFO_INTRINSIC_Log10:
36473659
vnf = VNF_Log10;
36483660
break;

src/jit/valuenumfuncs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ ValueNumFuncDef(DblRound, 1, false, false, false)
7474

7575
ValueNumFuncDef(Sin, 1, false, false, false)
7676
ValueNumFuncDef(Cos, 1, false, false, false)
77+
ValueNumFuncDef(Cbrt, 1, false, false, false)
7778
ValueNumFuncDef(Sqrt, 1, false, false, false)
7879
ValueNumFuncDef(Abs, 1, false, false, false)
7980
ValueNumFuncDef(RoundDouble, 1, false, false, false)
@@ -84,9 +85,12 @@ ValueNumFuncDef(Sinh, 1, false, false, false)
8485
ValueNumFuncDef(Tan, 1, false, false, false)
8586
ValueNumFuncDef(Tanh, 1, false, false, false)
8687
ValueNumFuncDef(Asin, 1, false, false, false)
88+
ValueNumFuncDef(Asinh, 1, false, false, false)
8789
ValueNumFuncDef(Acos, 1, false, false, false)
90+
ValueNumFuncDef(Acosh, 1, false, false, false)
8891
ValueNumFuncDef(Atan, 1, false, false, false)
8992
ValueNumFuncDef(Atan2, 2, false, false, false)
93+
ValueNumFuncDef(Atanh, 1, false, false, false)
9094
ValueNumFuncDef(Log10, 1, false, false, false)
9195
ValueNumFuncDef(Pow, 2, false, false, false)
9296
ValueNumFuncDef(Exp, 1, false, false, false)

src/vm/ecalllist.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -624,13 +624,13 @@ FCFuncStart(gMathFuncs)
624624
FCIntrinsicSig("Abs", &gsig_SM_Dbl_RetDbl, COMDouble::Abs, CORINFO_INTRINSIC_Abs)
625625
FCIntrinsicSig("Abs", &gsig_SM_Flt_RetFlt, COMSingle::Abs, CORINFO_INTRINSIC_Abs)
626626
FCIntrinsic("Acos", COMDouble::Acos, CORINFO_INTRINSIC_Acos)
627-
FCFuncElement("Acosh", COMDouble::Acosh)
627+
FCIntrinsic("Acosh", COMDouble::Acosh, CORINFO_INTRINSIC_Acosh)
628628
FCIntrinsic("Asin", COMDouble::Asin, CORINFO_INTRINSIC_Asin)
629-
FCFuncElement("Asinh", COMDouble::Asinh)
629+
FCIntrinsic("Asinh", COMDouble::Asinh, CORINFO_INTRINSIC_Asinh)
630630
FCIntrinsic("Atan", COMDouble::Atan, CORINFO_INTRINSIC_Atan)
631-
FCFuncElement("Atanh", COMDouble::Atanh)
631+
FCIntrinsic("Atanh", COMDouble::Atanh, CORINFO_INTRINSIC_Atanh)
632632
FCIntrinsic("Atan2", COMDouble::Atan2, CORINFO_INTRINSIC_Atan2)
633-
FCFuncElement("Cbrt", COMDouble::Cbrt)
633+
FCIntrinsic("Cbrt", COMDouble::Cbrt, CORINFO_INTRINSIC_Cbrt)
634634
FCIntrinsic("Ceiling", COMDouble::Ceil, CORINFO_INTRINSIC_Ceiling)
635635
FCIntrinsic("Cos", COMDouble::Cos, CORINFO_INTRINSIC_Cos)
636636
FCIntrinsic("Cosh", COMDouble::Cosh, CORINFO_INTRINSIC_Cosh)
@@ -650,13 +650,13 @@ FCFuncEnd()
650650

651651
FCFuncStart(gMathFFuncs)
652652
FCIntrinsic("Acos", COMSingle::Acos, CORINFO_INTRINSIC_Acos)
653-
FCFuncElement("Acosh", COMSingle::Acosh)
653+
FCIntrinsic("Acosh", COMSingle::Acosh, CORINFO_INTRINSIC_Acosh)
654654
FCIntrinsic("Asin", COMSingle::Asin, CORINFO_INTRINSIC_Asin)
655-
FCFuncElement("Asinh", COMSingle::Asinh)
655+
FCIntrinsic("Asinh", COMSingle::Asinh, CORINFO_INTRINSIC_Asinh)
656656
FCIntrinsic("Atan", COMSingle::Atan, CORINFO_INTRINSIC_Atan)
657-
FCFuncElement("Atanh", COMSingle::Atanh)
657+
FCIntrinsic("Atanh", COMSingle::Atanh, CORINFO_INTRINSIC_Atanh)
658658
FCIntrinsic("Atan2", COMSingle::Atan2, CORINFO_INTRINSIC_Atan2)
659-
FCFuncElement("Cbrt", COMSingle::Cbrt)
659+
FCIntrinsic("Cbrt", COMSingle::Cbrt, CORINFO_INTRINSIC_Cbrt)
660660
FCIntrinsic("Ceiling", COMSingle::Ceil, CORINFO_INTRINSIC_Ceiling)
661661
FCIntrinsic("Cos", COMSingle::Cos, CORINFO_INTRINSIC_Cos)
662662
FCIntrinsic("Cosh", COMSingle::Cosh, CORINFO_INTRINSIC_Cosh)

0 commit comments

Comments
 (0)