[Clang][ByteCode][NFC] Misc minor performance fixes (#145988)
Static analysis flagged multiple places we could move instead of copy. In one case I realized we could avoid computing the same thing multiple times and did that fix instead.
This commit is contained in:
@@ -555,8 +555,8 @@ static bool interp__builtin_isfpclass(InterpState &S, CodePtr OpPC,
|
||||
APSInt FPClassArg = popToAPSInt(S.Stk, FPClassArgT);
|
||||
const Floating &F = S.Stk.pop<Floating>();
|
||||
|
||||
int32_t Result =
|
||||
static_cast<int32_t>((F.classify() & FPClassArg).getZExtValue());
|
||||
int32_t Result = static_cast<int32_t>(
|
||||
(F.classify() & std::move(FPClassArg)).getZExtValue());
|
||||
pushInteger(S, Result, Call->getType());
|
||||
|
||||
return true;
|
||||
@@ -856,7 +856,7 @@ static bool interp__builtin_overflowop(InterpState &S, CodePtr OpPC,
|
||||
|
||||
if (!APSInt::isSameValue(Temp, Result))
|
||||
Overflow = true;
|
||||
Result = Temp;
|
||||
Result = std::move(Temp);
|
||||
}
|
||||
|
||||
// Write Result to ResultPtr and put Overflow on the stack.
|
||||
@@ -1135,17 +1135,17 @@ static bool interp__builtin_is_aligned_up_down(InterpState &S, CodePtr OpPC,
|
||||
|
||||
if (isIntegralType(FirstArgT)) {
|
||||
const APSInt &Src = popToAPSInt(S.Stk, FirstArgT);
|
||||
APSInt Align = Alignment.extOrTrunc(Src.getBitWidth());
|
||||
APInt AlignMinusOne = Alignment.extOrTrunc(Src.getBitWidth()) - 1;
|
||||
if (BuiltinOp == Builtin::BI__builtin_align_up) {
|
||||
APSInt AlignedVal =
|
||||
APSInt((Src + (Align - 1)) & ~(Align - 1), Src.isUnsigned());
|
||||
APSInt((Src + AlignMinusOne) & ~AlignMinusOne, Src.isUnsigned());
|
||||
pushInteger(S, AlignedVal, Call->getType());
|
||||
} else if (BuiltinOp == Builtin::BI__builtin_align_down) {
|
||||
APSInt AlignedVal = APSInt(Src & ~(Align - 1), Src.isUnsigned());
|
||||
APSInt AlignedVal = APSInt(Src & ~AlignMinusOne, Src.isUnsigned());
|
||||
pushInteger(S, AlignedVal, Call->getType());
|
||||
} else {
|
||||
assert(*S.Ctx.classify(Call->getType()) == PT_Bool);
|
||||
S.Stk.push<Boolean>((Src & (Align - 1)) == 0);
|
||||
S.Stk.push<Boolean>((Src & AlignMinusOne) == 0);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1425,7 +1425,7 @@ static bool interp__builtin_ia32_addcarry_subborrow(InterpState &S,
|
||||
|
||||
QualType CarryOutType = Call->getArg(3)->getType()->getPointeeType();
|
||||
PrimType CarryOutT = *S.getContext().classify(CarryOutType);
|
||||
assignInteger(S, CarryOutPtr, CarryOutT, APSInt(Result, true));
|
||||
assignInteger(S, CarryOutPtr, CarryOutT, APSInt(std::move(Result), true));
|
||||
|
||||
pushInteger(S, CarryOut, Call->getType());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user