[clang] [clang][bytecode] Refactor Program::createGlobalString (PR #125467)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 3 00:01:14 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
Remove unnecesary narrow() calls, rename a variable and initialize the array as a whole instead of each element individually.
---
Full diff: https://github.com/llvm/llvm-project/pull/125467.diff
1 Files Affected:
- (modified) clang/lib/AST/ByteCode/Program.cpp (+13-13)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Program.cpp b/clang/lib/AST/ByteCode/Program.cpp
index 1ffe7cd721f11f..e0b86d46428a26 100644
--- a/clang/lib/AST/ByteCode/Program.cpp
+++ b/clang/lib/AST/ByteCode/Program.cpp
@@ -35,6 +35,7 @@ const void *Program::getNativePointer(unsigned Idx) {
unsigned Program::createGlobalString(const StringLiteral *S, const Expr *Base) {
const size_t CharWidth = S->getCharByteWidth();
const size_t BitWidth = CharWidth * Ctx.getCharBit();
+ unsigned StringLength = S->getLength();
PrimType CharType;
switch (CharWidth) {
@@ -55,15 +56,15 @@ unsigned Program::createGlobalString(const StringLiteral *S, const Expr *Base) {
Base = S;
// Create a descriptor for the string.
- Descriptor *Desc = allocateDescriptor(Base, CharType, Descriptor::GlobalMD,
- S->getLength() + 1,
- /*isConst=*/true,
- /*isTemporary=*/false,
- /*isMutable=*/false);
+ Descriptor *Desc =
+ allocateDescriptor(Base, CharType, Descriptor::GlobalMD, StringLength + 1,
+ /*isConst=*/true,
+ /*isTemporary=*/false,
+ /*isMutable=*/false);
// Allocate storage for the string.
// The byte length does not include the null terminator.
- unsigned I = Globals.size();
+ unsigned GlobalIndex = Globals.size();
unsigned Sz = Desc->getAllocSize();
auto *G = new (Allocator, Sz) Global(Ctx.getEvalID(), Desc, /*isStatic=*/true,
/*isExtern=*/false);
@@ -74,33 +75,32 @@ unsigned Program::createGlobalString(const StringLiteral *S, const Expr *Base) {
// Construct the string in storage.
const Pointer Ptr(G->block());
- for (unsigned I = 0, N = S->getLength(); I <= N; ++I) {
- Pointer Field = Ptr.atIndex(I).narrow();
- const uint32_t CodePoint = I == N ? 0 : S->getCodeUnit(I);
+ for (unsigned I = 0; I <= StringLength; ++I) {
+ Pointer Field = Ptr.atIndex(I);
+ const uint32_t CodePoint = I == StringLength ? 0 : S->getCodeUnit(I);
switch (CharType) {
case PT_Sint8: {
using T = PrimConv<PT_Sint8>::T;
Field.deref<T>() = T::from(CodePoint, BitWidth);
- Field.initialize();
break;
}
case PT_Uint16: {
using T = PrimConv<PT_Uint16>::T;
Field.deref<T>() = T::from(CodePoint, BitWidth);
- Field.initialize();
break;
}
case PT_Uint32: {
using T = PrimConv<PT_Uint32>::T;
Field.deref<T>() = T::from(CodePoint, BitWidth);
- Field.initialize();
break;
}
default:
llvm_unreachable("unsupported character type");
}
}
- return I;
+ Ptr.initialize();
+
+ return GlobalIndex;
}
Pointer Program::getPtrGlobal(unsigned Idx) const {
``````````
</details>
https://github.com/llvm/llvm-project/pull/125467
More information about the cfe-commits
mailing list