Skip to content

Commit 9db3705

Browse files
author
Alex Covington (Advanced Micro Devices Inc)
committed
Cleanup, jit formatting
1 parent c2751de commit 9db3705

File tree

1 file changed

+33
-83
lines changed

1 file changed

+33
-83
lines changed

src/coreclr/jit/gentree.cpp

Lines changed: 33 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -21299,7 +21299,8 @@ GenTree* Compiler::gtNewSimdBinOpNode(
2129921299
{
2130021300
assert(!varTypeIsLong(simdBaseType));
2130121301
if (((varTypeIsShort(simdBaseType) || varTypeIsByte(simdBaseType)) && simdSize > 16) ||
21302-
(!compOpportunisticallyDependsOn(InstructionSet_AVX512) && simdSize > 32) ||
21302+
(!compOpportunisticallyDependsOn(InstructionSet_AVX512) &&
21303+
(simdSize > 32 || (varTypeIsInt(simdBaseType) && simdSize == 32))) ||
2130321304
(!compOpportunisticallyDependsOn(InstructionSet_AVX) && simdSize > 16) || simdSize == 64)
2130421305
{
2130521306
var_types divType = simdSize == 64 ? TYP_SIMD32 : TYP_SIMD16;
@@ -21317,74 +21318,40 @@ GenTree* Compiler::gtNewSimdBinOpNode(
2131721318
return divResult;
2131821319
}
2131921320

21320-
if (varTypeIsShort(simdBaseType) && compOpportunisticallyDependsOn(InstructionSet_AVX2))
21321-
{
21322-
assert(simdSize == 16);
21323-
CorInfoType cvtType =
21324-
varTypeIsUnsigned(simdBaseType) && compOpportunisticallyDependsOn(InstructionSet_AVX512)
21325-
? CORINFO_TYPE_UINT
21326-
: CORINFO_TYPE_INT;
21327-
NamedIntrinsic cvtIntrinsic = NI_AVX2_ConvertToVector256Int32;
21328-
op1 = gtNewSimdHWIntrinsicNode(TYP_SIMD32, op1, cvtIntrinsic, simdBaseJitType, simdSize);
21329-
op2 = gtNewSimdHWIntrinsicNode(TYP_SIMD32, op2, cvtIntrinsic, simdBaseJitType, simdSize);
21330-
GenTree* divResult = gtNewSimdBinOpNode(GT_DIV, TYP_SIMD32, op1, op2, cvtType, simdSize * 2);
21331-
if (compOpportunisticallyDependsOn(InstructionSet_AVX512))
21332-
{
21333-
return gtNewSimdHWIntrinsicNode(type, divResult,
21334-
varTypeIsSigned(simdBaseType)
21335-
? NI_AVX512_ConvertToVector128Int16
21336-
: NI_AVX512_ConvertToVector128UInt16,
21337-
cvtType, simdSize * 2);
21338-
}
21339-
GenTree* divResultDup = fgMakeMultiUse(&divResult);
21340-
GenTree* divResultLower = gtNewSimdGetLowerNode(type, divResult, cvtType, simdSize * 2);
21341-
GenTree* divResultUpper = gtNewSimdGetUpperNode(type, divResultDup, cvtType, simdSize * 2);
21342-
return gtNewSimdNarrowNode(type, divResultLower, divResultUpper, simdBaseJitType, simdSize);
21343-
}
21344-
21345-
if (varTypeIsByte(simdBaseType) && compOpportunisticallyDependsOn(InstructionSet_AVX512))
21346-
{
21347-
assert(simdSize == 16);
21348-
NamedIntrinsic cvtIntrinsic = varTypeIsSigned(simdBaseType) ? NI_AVX512_ConvertToVector512Int32
21349-
: NI_AVX512_ConvertToVector512UInt32;
21350-
CorInfoType cvtType = varTypeIsSigned(simdBaseType) ? CORINFO_TYPE_INT : CORINFO_TYPE_UINT;
21351-
op1 = gtNewSimdHWIntrinsicNode(TYP_SIMD64, op1, cvtIntrinsic, simdBaseJitType, simdSize * 4);
21352-
op2 = gtNewSimdHWIntrinsicNode(TYP_SIMD64, op2, cvtIntrinsic, simdBaseJitType, simdSize * 4);
21353-
21354-
GenTree* op1Dup = fgMakeMultiUse(&op1);
21355-
GenTree* op2Dup = fgMakeMultiUse(&op2);
21356-
GenTree* op1Lower = gtNewSimdGetLowerNode(TYP_SIMD32, op1, cvtType, simdSize * 4);
21357-
GenTree* op2Lower = gtNewSimdGetLowerNode(TYP_SIMD32, op2, cvtType, simdSize * 4);
21358-
GenTree* divLower =
21359-
gtNewSimdBinOpNode(GT_DIV, TYP_SIMD32, op1Lower, op2Lower, cvtType, simdSize * 2);
21360-
GenTree* op1Upper = gtNewSimdGetUpperNode(TYP_SIMD32, op1Dup, cvtType, simdSize * 4);
21361-
GenTree* op2Upper = gtNewSimdGetUpperNode(TYP_SIMD32, op2Dup, cvtType, simdSize * 4);
21362-
GenTree* divUpper =
21363-
gtNewSimdBinOpNode(GT_DIV, TYP_SIMD32, op1Upper, op2Upper, cvtType, simdSize * 2);
21364-
21365-
GenTree* divResult = gtNewSimdWithUpperNode(TYP_SIMD64, divLower, divUpper, cvtType, simdSize * 4);
21366-
return gtNewSimdHWIntrinsicNode(TYP_SIMD16, divResult,
21367-
varTypeIsSigned(simdBaseType) ? NI_AVX512_ConvertToVector128SByte
21368-
: NI_AVX512_ConvertToVector128Byte,
21369-
cvtType, simdSize * 4);
21370-
}
21371-
2137221321
if (varTypeIsShort(simdBaseType) || varTypeIsByte(simdBaseType))
2137321322
{
2137421323
assert(simdSize == 16);
21375-
CorInfoType cvtType = varTypeIsShort(simdBaseType) ? CORINFO_TYPE_INT : CORINFO_TYPE_SHORT;
2137621324
if (compOpportunisticallyDependsOn(InstructionSet_AVX512))
2137721325
{
21378-
CorInfoType signedType = varTypeIsShort(simdBaseType) ? CORINFO_TYPE_INT : CORINFO_TYPE_SHORT;
21379-
CorInfoType unsignedType =
21380-
varTypeIsShort(simdBaseType) ? CORINFO_TYPE_UINT : CORINFO_TYPE_USHORT;
21381-
cvtType = varTypeIsSigned(simdBaseType) ? signedType : unsignedType;
21382-
}
21383-
GenTree* op1Dup = fgMakeMultiUse(&op1);
21384-
GenTree* op2Dup = fgMakeMultiUse(&op2);
21385-
GenTree* op1LowerWiden = gtNewSimdWidenLowerNode(type, op1, simdBaseJitType, simdSize);
21386-
GenTree* op2LowerWiden = gtNewSimdWidenLowerNode(type, op2, simdBaseJitType, simdSize);
21387-
GenTree* divLower =
21326+
CorInfoType cvtBaseType =
21327+
varTypeIsUnsigned(simdBaseType) ? CORINFO_TYPE_UINT : CORINFO_TYPE_INT;
21328+
NamedIntrinsic widenCvtIntrinsic =
21329+
varTypeIsByte(simdBaseType)
21330+
? (varTypeIsSigned(simdBaseType) ? NI_AVX512_ConvertToVector512Int32
21331+
: NI_AVX512_ConvertToVector512UInt32)
21332+
: NI_AVX2_ConvertToVector256Int32;
21333+
NamedIntrinsic narrowCvtIntrinsic =
21334+
varTypeIsByte(simdBaseType)
21335+
? (varTypeIsSigned(simdBaseType) ? NI_AVX512_ConvertToVector128SByte
21336+
: NI_AVX512_ConvertToVector128Byte)
21337+
: (varTypeIsSigned(simdBaseType) ? NI_AVX512_ConvertToVector128Int16
21338+
: NI_AVX512_ConvertToVector128UInt16);
21339+
var_types cvtType = varTypeIsByte(simdBaseType) ? TYP_SIMD64 : TYP_SIMD32;
21340+
int cvtSize = simdSize * (varTypeIsByte(simdBaseType) ? 4 : 2);
21341+
21342+
op1 = gtNewSimdHWIntrinsicNode(cvtType, op1, widenCvtIntrinsic, simdBaseJitType, cvtSize);
21343+
op2 = gtNewSimdHWIntrinsicNode(cvtType, op2, widenCvtIntrinsic, simdBaseJitType, cvtSize);
21344+
GenTree* div = gtNewSimdBinOpNode(GT_DIV, cvtType, op1, op2, cvtBaseType, cvtSize);
21345+
return gtNewSimdHWIntrinsicNode(type, div, narrowCvtIntrinsic, cvtBaseType, cvtSize);
21346+
}
21347+
CorInfoType signedType = varTypeIsShort(simdBaseType) ? CORINFO_TYPE_INT : CORINFO_TYPE_SHORT;
21348+
CorInfoType unsignedType = varTypeIsShort(simdBaseType) ? CORINFO_TYPE_UINT : CORINFO_TYPE_USHORT;
21349+
CorInfoType cvtType = varTypeIsSigned(simdBaseType) ? signedType : unsignedType;
21350+
GenTree* op1Dup = fgMakeMultiUse(&op1);
21351+
GenTree* op2Dup = fgMakeMultiUse(&op2);
21352+
GenTree* op1LowerWiden = gtNewSimdWidenLowerNode(type, op1, simdBaseJitType, simdSize);
21353+
GenTree* op2LowerWiden = gtNewSimdWidenLowerNode(type, op2, simdBaseJitType, simdSize);
21354+
GenTree* divLower =
2138821355
gtNewSimdBinOpNode(GT_DIV, type, op1LowerWiden, op2LowerWiden, cvtType, simdSize);
2138921356
GenTree* op1UpperWiden = gtNewSimdWidenUpperNode(type, op1Dup, simdBaseJitType, simdSize);
2139021357
GenTree* op2UpperWiden = gtNewSimdWidenUpperNode(type, op2Dup, simdBaseJitType, simdSize);
@@ -21401,32 +21368,15 @@ GenTree* Compiler::gtNewSimdBinOpNode(
2140121368
simdSize);
2140221369
}
2140321370

21371+
assert(simdSize == 16);
21372+
2140421373
if (compOpportunisticallyDependsOn(InstructionSet_AVX))
2140521374
{
21406-
if (simdSize == 32)
21407-
{
21408-
GenTree* op1Dup = fgMakeMultiUse(&op1);
21409-
GenTree* op2Dup = fgMakeMultiUse(&op2);
21410-
GenTree* op1Lower = gtNewSimdGetLowerNode(TYP_SIMD16, op1, simdBaseJitType, simdSize);
21411-
GenTree* op2Lower = gtNewSimdGetLowerNode(TYP_SIMD16, op2, simdBaseJitType, simdSize);
21412-
GenTree* op1Upper = gtNewSimdGetUpperNode(TYP_SIMD16, op1Dup, simdBaseJitType, simdSize);
21413-
GenTree* op2Upper = gtNewSimdGetUpperNode(TYP_SIMD16, op2Dup, simdBaseJitType, simdSize);
21414-
GenTree* divLower =
21415-
gtNewSimdHWIntrinsicNode(TYP_SIMD16, op1Lower, op2Lower, NI_Vector128_op_Division,
21416-
simdBaseJitType, simdSize / 2);
21417-
GenTree* divUpper =
21418-
gtNewSimdHWIntrinsicNode(TYP_SIMD16, op1Upper, op2Upper, NI_Vector128_op_Division,
21419-
simdBaseJitType, simdSize / 2);
21420-
return gtNewSimdWithUpperNode(type, divLower, divUpper, simdBaseJitType, simdSize);
21421-
}
21422-
21423-
assert(simdSize == 16);
2142421375
return gtNewSimdHWIntrinsicNode(type, op1, op2, NI_Vector128_op_Division, simdBaseJitType,
2142521376
simdSize);
2142621377
}
2142721378

2142821379
assert(compIsaSupportedDebugOnly(InstructionSet_SSE42));
21429-
assert(simdSize == 16);
2143021380
GenTree* op1Dup = fgMakeMultiUse(&op1);
2143121381
GenTree* op2Dup = fgMakeMultiUse(&op2);
2143221382
GenTree* op1Dup2 = fgMakeMultiUse(&op1Dup);

0 commit comments

Comments
 (0)