Skip to content

Commit eef7dd6

Browse files
Nemanja Ivanovicnemanjai
Nemanja Ivanovic
authored andcommitted
Add the Auxiliary target checks back in for Sema.
1 parent dd421e7 commit eef7dd6

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

clang/lib/Sema/SemaChecking.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,16 +2147,24 @@ static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc,
21472147
/// This checks that the target supports the builtin and that the string
21482148
/// argument is constant and valid.
21492149
static bool SemaBuiltinCpu(Sema &S, const TargetInfo &TI, CallExpr *TheCall,
2150-
unsigned BuiltinID) {
2150+
const TargetInfo *AuxTI, unsigned BuiltinID) {
21512151
assert((BuiltinID == Builtin::BI__builtin_cpu_supports ||
21522152
BuiltinID == Builtin::BI__builtin_cpu_is) &&
21532153
"Expecting __builtin_cpu_...");
21542154

21552155
bool IsCPUSupports = BuiltinID == Builtin::BI__builtin_cpu_supports;
2156-
if (IsCPUSupports && !TI.supportsCpuSupports())
2156+
const TargetInfo *TheTI = &TI;
2157+
auto SupportsBI = [=](const TargetInfo *TInfo) {
2158+
return TInfo && ((IsCPUSupports && TInfo->supportsCpuSupports()) ||
2159+
(!IsCPUSupports && TInfo->supportsCpuIs()));
2160+
};
2161+
if (!SupportsBI(&TI) && SupportsBI(AuxTI))
2162+
TheTI = AuxTI;
2163+
2164+
if (IsCPUSupports && !TheTI->supportsCpuSupports())
21572165
return S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported)
21582166
<< SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());
2159-
if (!IsCPUSupports && !TI.supportsCpuIs())
2167+
if (!IsCPUSupports && !TheTI->supportsCpuIs())
21602168
return S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported)
21612169
<< SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());
21622170

@@ -2168,10 +2176,10 @@ static bool SemaBuiltinCpu(Sema &S, const TargetInfo &TI, CallExpr *TheCall,
21682176

21692177
// Check the contents of the string.
21702178
StringRef Feature = cast<StringLiteral>(Arg)->getString();
2171-
if (IsCPUSupports && !TI.validateCpuSupports(Feature))
2179+
if (IsCPUSupports && !TheTI->validateCpuSupports(Feature))
21722180
return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports)
21732181
<< Arg->getSourceRange();
2174-
if (!IsCPUSupports && !TI.validateCpuIs(Feature))
2182+
if (!IsCPUSupports && !TheTI->validateCpuIs(Feature))
21752183
return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is)
21762184
<< Arg->getSourceRange();
21772185
return false;
@@ -2207,7 +2215,8 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
22072215
switch (BuiltinID) {
22082216
case Builtin::BI__builtin_cpu_supports:
22092217
case Builtin::BI__builtin_cpu_is:
2210-
if (SemaBuiltinCpu(*this, Context.getTargetInfo(), TheCall, BuiltinID))
2218+
if (SemaBuiltinCpu(*this, Context.getTargetInfo(), TheCall,
2219+
Context.getAuxTargetInfo(), BuiltinID))
22112220
return ExprError();
22122221
break;
22132222
case Builtin::BI__builtin_cpu_init:

0 commit comments

Comments
 (0)