[clang] 7b1a058 - [clang][Interp][NFC] Use direct Get{Local,Global} when possible
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 10 02:30:50 PST 2023
Author: Timm Bäder
Date: 2023-11-10T11:30:38+01:00
New Revision: 7b1a0580216796045b880251e031a1e5e0ecad74
URL: https://github.com/llvm/llvm-project/commit/7b1a0580216796045b880251e031a1e5e0ecad74
DIFF: https://github.com/llvm/llvm-project/commit/7b1a0580216796045b880251e031a1e5e0ecad74.diff
LOG: [clang][Interp][NFC] Use direct Get{Local,Global} when possible
When returning variable declaration values, try to get the value
directly instead of always going through a Pointer.
Added:
Modified:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index a2cf682b2532bde..15a717089660337 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -2119,27 +2119,33 @@ bool ByteCodeExprGen<Emitter>::visitDecl(const VarDecl *VD) {
if (!this->visitVarDecl(VD))
return false;
+ std::optional<PrimType> VarT = classify(VD->getType());
// Get a pointer to the variable
if (Context::shouldBeGloballyIndexed(VD)) {
auto GlobalIndex = P.getGlobal(VD);
assert(GlobalIndex); // visitVarDecl() didn't return false.
- if (!this->emitGetPtrGlobal(*GlobalIndex, VD))
- return false;
+ if (VarT) {
+ if (!this->emitGetGlobal(*VarT, *GlobalIndex, VD))
+ return false;
+ } else {
+ if (!this->emitGetPtrGlobal(*GlobalIndex, VD))
+ return false;
+ }
} else {
auto Local = Locals.find(VD);
assert(Local != Locals.end()); // Same here.
- if (!this->emitGetPtrLocal(Local->second.Offset, VD))
- return false;
+ if (VarT) {
+ if (!this->emitGetLocal(*VarT, Local->second.Offset, VD))
+ return false;
+ } else {
+ if (!this->emitGetPtrLocal(Local->second.Offset, VD))
+ return false;
+ }
}
// Return the value
- if (std::optional<PrimType> VarT = classify(VD->getType())) {
- if (!this->emitLoadPop(*VarT, VD))
- return false;
-
+ if (VarT)
return this->emitRet(*VarT, VD);
- }
-
return this->emitRetValue(VD);
}
More information about the cfe-commits
mailing list