mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-30 17:21:10 +00:00
Make globals used for array initialization codegen constant
As pointed out in D133835 these globals will never be written to (they're only used for trivially copyable types), so they can always be constant. Differential revision: https://reviews.llvm.org/D146211
This commit is contained in:
parent
c21790d023
commit
4a2757d80f
@ -532,9 +532,8 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
|||||||
Emitter.tryEmitForInitializer(ExprToVisit, AS, ArrayQTy)) {
|
Emitter.tryEmitForInitializer(ExprToVisit, AS, ArrayQTy)) {
|
||||||
auto GV = new llvm::GlobalVariable(
|
auto GV = new llvm::GlobalVariable(
|
||||||
CGM.getModule(), C->getType(),
|
CGM.getModule(), C->getType(),
|
||||||
CGM.isTypeConstant(ArrayQTy, /* ExcludeCtor= */ true,
|
/* isConstant= */ true, llvm::GlobalValue::PrivateLinkage, C,
|
||||||
/* ExcludeDtor= */ false),
|
"constinit",
|
||||||
llvm::GlobalValue::PrivateLinkage, C, "constinit",
|
|
||||||
/* InsertBefore= */ nullptr, llvm::GlobalVariable::NotThreadLocal,
|
/* InsertBefore= */ nullptr, llvm::GlobalVariable::NotThreadLocal,
|
||||||
CGM.getContext().getTargetAddressSpace(AS));
|
CGM.getContext().getTargetAddressSpace(AS));
|
||||||
Emitter.finalize(GV);
|
Emitter.finalize(GV);
|
||||||
|
@ -10,7 +10,7 @@ unsigned v2[2][3] = {[0 ... 1][0 ... 1] = 2222, 3333};
|
|||||||
|
|
||||||
// CHECK-DAG: [1 x %struct.M] [%struct.M { [2 x %struct.I] [%struct.I { [3 x i32] [i32 4, i32 4, i32 0] }, %struct.I { [3 x i32] [i32 4, i32 4, i32 5] }] }],
|
// CHECK-DAG: [1 x %struct.M] [%struct.M { [2 x %struct.I] [%struct.I { [3 x i32] [i32 4, i32 4, i32 0] }, %struct.I { [3 x i32] [i32 4, i32 4, i32 5] }] }],
|
||||||
// CHECK-DAG: [2 x [3 x i32]] {{[[][[]}}3 x i32] [i32 2222, i32 2222, i32 0], [3 x i32] [i32 2222, i32 2222, i32 3333]],
|
// CHECK-DAG: [2 x [3 x i32]] {{[[][[]}}3 x i32] [i32 2222, i32 2222, i32 0], [3 x i32] [i32 2222, i32 2222, i32 3333]],
|
||||||
// CHECK-DAG: [[INIT14:.*]] = private global [16 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 0, i32 0, i32 0, i32 0], align 4
|
// CHECK-DAG: [[INIT14:.*]] = private constant [16 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 0, i32 0, i32 0, i32 0], align 4
|
||||||
|
|
||||||
void f1(void) {
|
void f1(void) {
|
||||||
// Scalars in braces.
|
// Scalars in braces.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm %s -o - | FileCheck %s
|
// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm %s -o - | FileCheck %s
|
||||||
|
|
||||||
// CHECK: @constinit = private global [3 x ptr] [ptr blockaddress(@main, %L), ptr null, ptr null]
|
// CHECK: @constinit = private constant [3 x ptr] [ptr blockaddress(@main, %L), ptr null, ptr null]
|
||||||
|
|
||||||
void receivePtrs(void **);
|
void receivePtrs(void **);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user