llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Timm Baeder (tbaederr)

<details>
<summary>Changes</summary>

If we already have a global variable created for the apvalue lvalue base 
expression, just get the pointer to the existing global instead of evaluating 
the expression again.

---
Full diff: https://github.com/llvm/llvm-project/pull/237133.diff


1 Files Affected:

- (modified) clang/lib/AST/ByteCode/Compiler.cpp (+9-2) 


``````````diff
diff --git a/clang/lib/AST/ByteCode/Compiler.cpp 
b/clang/lib/AST/ByteCode/Compiler.cpp
index 164dd155debd4..079c24344f21a 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -5994,8 +5994,15 @@ bool Compiler<Emitter>::visitAPValue(const APValue &Val, 
PrimType ValType,
     APValue::LValueBase Base = Val.getLValueBase();
     QualType EntryType;
     if (const Expr *BaseExpr = Base.dyn_cast<const Expr *>()) {
-      if (!this->visit(BaseExpr))
-        return false;
+      // Try to avoid evaluating the BaseExpr multiple times.
+      if (UnsignedOrNone GlobalIndex = P.getGlobal(BaseExpr);
+          GlobalIndex && P.isGlobalInitialized(*GlobalIndex)) {
+        if (!this->emitGetPtrGlobal(*GlobalIndex, Info))
+          return false;
+      } else {
+        if (!this->visit(BaseExpr))
+          return false;
+      }
       EntryType = BaseExpr->getType();
     } else if (const auto *VD = Base.dyn_cast<const ValueDecl *>()) {
       if (!this->visitDeclRef(VD, Info.asExpr()))

``````````

</details>


https://github.com/llvm/llvm-project/pull/237133
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to