Skip to content

Commit df6242e

Browse files
author
whyuuwang
committed
adjust unit test #146940
1 parent ed4a09f commit df6242e

File tree

5 files changed

+128
-268
lines changed

5 files changed

+128
-268
lines changed

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 82 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -2739,9 +2739,9 @@ static bool interp__builtin_ia32_pmul(InterpState &S, CodePtr OpPC,
27392739
}
27402740

27412741
static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
2742-
const InterpFrame *Frame,
2743-
const CallExpr *Call,
2744-
uint32_t BuiltinID) {
2742+
const InterpFrame *Frame,
2743+
const CallExpr *Call,
2744+
uint32_t BuiltinID) {
27452745
assert(Call->getArg(0)->getType()->isVectorType() &&
27462746
Call->getArg(1)->getType()->isVectorType());
27472747
const Pointer &RHS = S.Stk.pop<Pointer>();
@@ -2752,7 +2752,8 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
27522752
PrimType ElemT = *S.getContext().classify(VT->getElementType());
27532753
unsigned SourceLen = VT->getNumElements();
27542754
assert(SourceLen % 2 == 0 &&
2755-
Call->getArg(1)->getType()->castAs<VectorType>()->getNumElements() == SourceLen);
2755+
Call->getArg(1)->getType()->castAs<VectorType>()->getNumElements() ==
2756+
SourceLen);
27562757
PrimType DstElemT = *S.getContext().classify(
27572758
Call->getType()->castAs<VectorType>()->getElementType());
27582759
unsigned DstElem = 0;
@@ -2774,16 +2775,17 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
27742775
APSInt Elem2;
27752776
INT_TYPE_SWITCH_NO_BOOL(ElemT, {
27762777
Elem1 = LHS.elem<T>(I).toAPSInt();
2777-
Elem2 = LHS.elem<T>(I+1).toAPSInt();
2778+
Elem2 = LHS.elem<T>(I + 1).toAPSInt();
27782779
});
27792780
APSInt Result;
27802781
if (IsAdd) {
2781-
if (IsSaturating) {
2782-
Result = APSInt(Elem1.sadd_sat(Elem2), /*IsUnsigned=*/Elem1.isUnsigned());
2783-
}else{
2784-
Result = APSInt(Elem1 + Elem2, /*IsUnsigned=*/Elem1.isUnsigned());
2785-
}
2786-
}else{
2782+
if (IsSaturating) {
2783+
Result =
2784+
APSInt(Elem1.sadd_sat(Elem2), /*IsUnsigned=*/Elem1.isUnsigned());
2785+
} else {
2786+
Result = APSInt(Elem1 + Elem2, /*IsUnsigned=*/Elem1.isUnsigned());
2787+
}
2788+
} else {
27872789
if (IsSaturating) {
27882790
Result =
27892791
APSInt(Elem1.ssub_sat(Elem2), /*IsUnsigned=*/Elem1.isUnsigned());
@@ -2812,7 +2814,8 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
28122814
}
28132815
} else {
28142816
if (IsSaturating) {
2815-
Result = APSInt(Elem1.ssub_sat(Elem2), /*IsUnsigned=*/Elem1.isUnsigned());
2817+
Result =
2818+
APSInt(Elem1.ssub_sat(Elem2), /*IsUnsigned=*/Elem1.isUnsigned());
28162819
} else {
28172820
Result = APSInt(Elem1 - Elem2, /*IsUnsigned=*/Elem1.isUnsigned());
28182821
}
@@ -2826,15 +2829,15 @@ static bool interp_builtin_ia32ph_add_sub(InterpState &S, CodePtr OpPC,
28262829
}
28272830

28282831
static bool interp_builtin_floatph_add_sub(InterpState &S, CodePtr OpPC,
2829-
const InterpFrame *Frame,
2830-
const CallExpr *Call,
2831-
uint32_t BuiltinID) {
2832+
const InterpFrame *Frame,
2833+
const CallExpr *Call,
2834+
uint32_t BuiltinID) {
28322835
assert(Call->getArg(0)->getType()->isVectorType() &&
28332836
Call->getArg(1)->getType()->isVectorType());
28342837
const Pointer &RHS = S.Stk.pop<Pointer>();
28352838
const Pointer &LHS = S.Stk.pop<Pointer>();
28362839
const Pointer &Dst = S.Stk.peek<Pointer>();
2837-
2840+
28382841
FPOptions FPO = Call->getFPFeaturesInEffect(S.Ctx.getLangOpts());
28392842
llvm::RoundingMode RM = getRoundingMode(FPO);
28402843
const auto *VT = Call->getArg(0)->getType()->castAs<VectorType>();
@@ -2851,7 +2854,6 @@ static bool interp_builtin_floatph_add_sub(InterpState &S, CodePtr OpPC,
28512854
for (unsigned I = 0; I != SourceLen; I += 2) {
28522855
APFloat Elem1 = LHS.elem<T>(I).getAPFloat();
28532856
APFloat Elem2 = LHS.elem<T>(I + 1).getAPFloat();
2854-
28552857
if (IsAdd) {
28562858
Elem1.add(Elem2, RM);
28572859
} else {
@@ -3495,71 +3497,71 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
34953497

34963498
case clang::X86::BI__builtin_ia32_phaddw128:
34973499
case clang::X86::BI__builtin_ia32_phaddw256:
3498-
case clang::X86::BI__builtin_ia32_phaddd128:
3499-
case clang::X86::BI__builtin_ia32_phaddd256:
3500-
case clang::X86::BI__builtin_ia32_phaddsw128:
3501-
case clang::X86::BI__builtin_ia32_phaddsw256:
3502-
case clang::X86::BI__builtin_ia32_phsubw128:
3503-
case clang::X86::BI__builtin_ia32_phsubw256:
3504-
case clang::X86::BI__builtin_ia32_phsubd128:
3505-
case clang::X86::BI__builtin_ia32_phsubd256:
3506-
case clang::X86::BI__builtin_ia32_phsubsw128:
3507-
case clang::X86::BI__builtin_ia32_phsubsw256:
3508-
3509-
return interp_builtin_ia32ph_add_sub(S, OpPC, Frame, Call, BuiltinID);
3510-
case clang::X86::BI__builtin_ia32_haddpd:
3511-
case clang::X86::BI__builtin_ia32_haddpd256:
3512-
case clang::X86::BI__builtin_ia32_haddps:
3513-
case clang::X86::BI__builtin_ia32_haddps256:
3514-
case clang::X86::BI__builtin_ia32_hsubpd:
3515-
case clang::X86::BI__builtin_ia32_hsubpd256:
3516-
case clang::X86::BI__builtin_ia32_hsubps:
3517-
case clang::X86::BI__builtin_ia32_hsubps256:
3518-
return interp_builtin_floatph_add_sub(S, OpPC, Frame, Call, BuiltinID);
3519-
3520-
case clang::X86::BI__builtin_ia32_pmuldq128:
3521-
case clang::X86::BI__builtin_ia32_pmuldq256:
3522-
case clang::X86::BI__builtin_ia32_pmuldq512:
3523-
case clang::X86::BI__builtin_ia32_pmuludq128:
3524-
case clang::X86::BI__builtin_ia32_pmuludq256:
3525-
case clang::X86::BI__builtin_ia32_pmuludq512:
3526-
return interp__builtin_ia32_pmul(S, OpPC, Call, BuiltinID);
3527-
3528-
case Builtin::BI__builtin_elementwise_fma:
3529-
return interp__builtin_elementwise_fma(S, OpPC, Call);
3530-
3531-
case X86::BI__builtin_ia32_selectb_128:
3532-
case X86::BI__builtin_ia32_selectb_256:
3533-
case X86::BI__builtin_ia32_selectb_512:
3534-
case X86::BI__builtin_ia32_selectw_128:
3535-
case X86::BI__builtin_ia32_selectw_256:
3536-
case X86::BI__builtin_ia32_selectw_512:
3537-
case X86::BI__builtin_ia32_selectd_128:
3538-
case X86::BI__builtin_ia32_selectd_256:
3539-
case X86::BI__builtin_ia32_selectd_512:
3540-
case X86::BI__builtin_ia32_selectq_128:
3541-
case X86::BI__builtin_ia32_selectq_256:
3542-
case X86::BI__builtin_ia32_selectq_512:
3543-
case X86::BI__builtin_ia32_selectph_128:
3544-
case X86::BI__builtin_ia32_selectph_256:
3545-
case X86::BI__builtin_ia32_selectph_512:
3546-
case X86::BI__builtin_ia32_selectpbf_128:
3547-
case X86::BI__builtin_ia32_selectpbf_256:
3548-
case X86::BI__builtin_ia32_selectpbf_512:
3549-
case X86::BI__builtin_ia32_selectps_128:
3550-
case X86::BI__builtin_ia32_selectps_256:
3551-
case X86::BI__builtin_ia32_selectps_512:
3552-
case X86::BI__builtin_ia32_selectpd_128:
3553-
case X86::BI__builtin_ia32_selectpd_256:
3554-
case X86::BI__builtin_ia32_selectpd_512:
3555-
return interp__builtin_select(S, OpPC, Call);
3500+
case clang::X86::BI__builtin_ia32_phaddd128:
3501+
case clang::X86::BI__builtin_ia32_phaddd256:
3502+
case clang::X86::BI__builtin_ia32_phaddsw128:
3503+
case clang::X86::BI__builtin_ia32_phaddsw256:
3504+
case clang::X86::BI__builtin_ia32_phsubw128:
3505+
case clang::X86::BI__builtin_ia32_phsubw256:
3506+
case clang::X86::BI__builtin_ia32_phsubd128:
3507+
case clang::X86::BI__builtin_ia32_phsubd256:
3508+
case clang::X86::BI__builtin_ia32_phsubsw128:
3509+
case clang::X86::BI__builtin_ia32_phsubsw256:
3510+
return interp_builtin_ia32ph_add_sub(S, OpPC, Frame, Call, BuiltinID);
3511+
3512+
case clang::X86::BI__builtin_ia32_haddpd:
3513+
case clang::X86::BI__builtin_ia32_haddpd256:
3514+
case clang::X86::BI__builtin_ia32_haddps:
3515+
case clang::X86::BI__builtin_ia32_haddps256:
3516+
case clang::X86::BI__builtin_ia32_hsubpd:
3517+
case clang::X86::BI__builtin_ia32_hsubpd256:
3518+
case clang::X86::BI__builtin_ia32_hsubps:
3519+
case clang::X86::BI__builtin_ia32_hsubps256:
3520+
return interp_builtin_floatph_add_sub(S, OpPC, Frame, Call, BuiltinID);
3521+
3522+
case clang::X86::BI__builtin_ia32_pmuldq128:
3523+
case clang::X86::BI__builtin_ia32_pmuldq256:
3524+
case clang::X86::BI__builtin_ia32_pmuldq512:
3525+
case clang::X86::BI__builtin_ia32_pmuludq128:
3526+
case clang::X86::BI__builtin_ia32_pmuludq256:
3527+
case clang::X86::BI__builtin_ia32_pmuludq512:
3528+
return interp__builtin_ia32_pmul(S, OpPC, Call, BuiltinID);
3529+
3530+
case Builtin::BI__builtin_elementwise_fma:
3531+
return interp__builtin_elementwise_fma(S, OpPC, Call);
3532+
3533+
case X86::BI__builtin_ia32_selectb_128:
3534+
case X86::BI__builtin_ia32_selectb_256:
3535+
case X86::BI__builtin_ia32_selectb_512:
3536+
case X86::BI__builtin_ia32_selectw_128:
3537+
case X86::BI__builtin_ia32_selectw_256:
3538+
case X86::BI__builtin_ia32_selectw_512:
3539+
case X86::BI__builtin_ia32_selectd_128:
3540+
case X86::BI__builtin_ia32_selectd_256:
3541+
case X86::BI__builtin_ia32_selectd_512:
3542+
case X86::BI__builtin_ia32_selectq_128:
3543+
case X86::BI__builtin_ia32_selectq_256:
3544+
case X86::BI__builtin_ia32_selectq_512:
3545+
case X86::BI__builtin_ia32_selectph_128:
3546+
case X86::BI__builtin_ia32_selectph_256:
3547+
case X86::BI__builtin_ia32_selectph_512:
3548+
case X86::BI__builtin_ia32_selectpbf_128:
3549+
case X86::BI__builtin_ia32_selectpbf_256:
3550+
case X86::BI__builtin_ia32_selectpbf_512:
3551+
case X86::BI__builtin_ia32_selectps_128:
3552+
case X86::BI__builtin_ia32_selectps_256:
3553+
case X86::BI__builtin_ia32_selectps_512:
3554+
case X86::BI__builtin_ia32_selectpd_128:
3555+
case X86::BI__builtin_ia32_selectpd_256:
3556+
case X86::BI__builtin_ia32_selectpd_512:
3557+
return interp__builtin_select(S, OpPC, Call);
35563558

3557-
default:
3558-
S.FFDiag(S.Current->getLocation(OpPC),
3559-
diag::note_invalid_subexpr_in_const_expr)
3560-
<< S.Current->getRange(OpPC);
3559+
default:
3560+
S.FFDiag(S.Current->getLocation(OpPC),
3561+
diag::note_invalid_subexpr_in_const_expr)
3562+
<< S.Current->getRange(OpPC);
35613563

3562-
return false;
3564+
return false;
35633565
}
35643566

35653567
llvm_unreachable("Unhandled builtin ID");

clang/test/CodeGen/X86/avx-builtins.c

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,53 +1083,34 @@ __m256d test_mm256_hadd_pd(__m256d A, __m256d B) {
10831083
// CHECK: call {{.*}}<4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
10841084
return _mm256_hadd_pd(A, B);
10851085
}
1086-
constexpr bool test_mm256_hadd_epi32_constexpr() {
1087-
constexpr __m256d a = _mm256_set_pd(1.0, 2.0, 3.0, 4.0);
1088-
constexpr __m256d b = _mm256_set_pd(5.0, 6.0, 7.0, 8.0);
1089-
constexpr __m256d result = _mm256_hadd_pd(a, b);
1090-
return match_m256d(result,1.0+2.0,3.0+4.0,5.0+6.0,7.0+8.0);
1091-
}
1092-
TEST_CONSTEXPR(test_mm256_hadd_epi32_constexpr())
1086+
TEST_CONSTEXPR(match_m256d(_mm256_hadd_pd((__m256d){1.0, 2.0, 3.0, 4.0}, (__m256d){5.0, 6.0, 7.0, 8.0}), 3.0, 7.0, 11.0, 15.0));
10931087

10941088
__m256 test_mm256_hadd_ps(__m256 A, __m256 B) {
10951089
// CHECK-LABEL: test_mm256_hadd_ps
10961090
// CHECK: call {{.*}}<8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
10971091
return _mm256_hadd_ps(A, B);
10981092
}
1099-
constexpr bool test_mm256_hadd_ps_constexpr() {
1100-
constexpr __m256 a = _mm256_set_ps(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
1101-
constexpr __m256 b = _mm256_set_ps(9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f);
1102-
constexpr __m256 result = _mm256_hadd_ps(a, b);
1103-
return match_m256(result,1.0f+2.0f,3.0f+4.0f,5.0f+6.0f,7.0f+8.0f,
1104-
9.0f+10.0f,11.0f+12.0f,13.0f+14.0f,15.0f+16.0f);
1105-
}
1106-
TEST_CONSTEXPR(test_mm256_hadd_ps_constexpr())
1093+
TEST_CONSTEXPR(_mm256_hadd_ps(
1094+
(__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f},
1095+
(__m256){9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f},
1096+
3.0f, 7.0f, 11.0f, 15.0f, 19.0f, 23.0f, 27.0f, 31.0f))
11071097

11081098
__m256d test_mm256_hsub_pd(__m256d A, __m256d B) {
11091099
// CHECK-LABEL: test_mm256_hsub_pd
11101100
// CHECK: call {{.*}}<4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
11111101
return _mm256_hsub_pd(A, B);
11121102
}
1113-
constexpr bool test_mm256_hsub_pd_constexpr() {
1114-
constexpr __m256d a = _mm256_set_pd(1.0, 2.0, 3.0, 4.0);
1115-
constexpr __m256d b = _mm256_set_pd(5.0, 6.0, 7.0, 8.0);
1116-
constexpr __m256d result = _mm256_hsub_pd(a, b);
1117-
return match_m256d(result,1.0-2.0,3.0-4.0,5.0-6.0,7.0-8.0);
1118-
}
1119-
TEST_CONSTEXPR(test_mm256_hsub_pd_constexpr())
1103+
TEST_CONSTEXPR(match_m256d(_mm256_hsub_pd((__m256d){1.0, 2.0, 3.0, 4.0}, (__m256d){5.0, 6.0, 7.0, 8.0}), -1.0,-1.0,-1.0,-1.0));
11201104

11211105
__m256 test_mm256_hsub_ps(__m256 A, __m256 B) {
11221106
// CHECK-LABEL: test_mm256_hsub_ps
11231107
// CHECK: call {{.*}}<8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
11241108
return _mm256_hsub_ps(A, B);
11251109
}
1126-
constexpr bool test_mm256_hsub_ps_constexpr() {
1127-
constexpr __m256 a = _mm256_set_ps(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
1128-
constexpr __m256 b = _mm256_set_ps(9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f);
1129-
constexpr __m256 result = _mm256_hsub_ps(a, b);
1130-
return match_m256(result,1.0f-2.0f,3.0f-4.0f,5.0f-6.0f,7.0f-8.0f,
1131-
9.0f-10.0f,11.0f-12.0f,13.0f-14.0f,15.0f-16.0f);
1132-
}
1110+
TEST_CONSTEXPR(_mm256_hsub_ps(
1111+
(__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f},
1112+
(__m256){9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f},
1113+
-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f))
11331114

11341115
__m256i test_mm256_insert_epi8(__m256i x, char b) {
11351116
// CHECK-LABEL: test_mm256_insert_epi8

0 commit comments

Comments
 (0)