Skip to content

Commit b2bd024

Browse files
committed
[CGExprAgg] Don't create zero index GEP
With opaque pointers, we no longer need a zero-index GEP to get the first element.
1 parent 3fee8b3 commit b2bd024

File tree

3 files changed

+2
-7
lines changed

3 files changed

+2
-7
lines changed

clang/lib/CodeGen/CGExprAgg.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -448,11 +448,7 @@ AggExprEmitter::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) {
448448
AggValueSlot Dest = EnsureSlot(E->getType());
449449
LValue DestLV = CGF.MakeAddrLValue(Dest.getAddress(), E->getType());
450450
LValue Start = CGF.EmitLValueForFieldInitialization(DestLV, *Field);
451-
llvm::Value *Zero = llvm::ConstantInt::get(CGF.PtrDiffTy, 0);
452-
llvm::Value *IdxStart[] = { Zero, Zero };
453-
llvm::Value *ArrayStart = Builder.CreateInBoundsGEP(
454-
ArrayPtr.getElementType(), ArrayPtr.emitRawPointer(CGF), IdxStart,
455-
"arraystart");
451+
llvm::Value *ArrayStart = ArrayPtr.emitRawPointer(CGF);
456452
CGF.EmitStoreThroughLValue(RValue::get(ArrayStart), Start);
457453
++Field;
458454

@@ -467,6 +463,7 @@ AggExprEmitter::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) {
467463
Ctx.hasSameType(Field->getType()->getPointeeType(),
468464
ArrayType->getElementType())) {
469465
// End pointer.
466+
llvm::Value *Zero = llvm::ConstantInt::get(CGF.PtrDiffTy, 0);
470467
llvm::Value *IdxEnd[] = { Zero, Size };
471468
llvm::Value *ArrayEnd = Builder.CreateInBoundsGEP(
472469
ArrayPtr.getElementType(), ArrayPtr.emitRawPointer(CGF), IdxEnd,

clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist-startend.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ void fn1(int i) {
4949
// CHECK-NEXT: store
5050
// init the list
5151
// CHECK-NEXT: getelementptr
52-
// CHECK-NEXT: getelementptr inbounds [3 x i32], ptr
5352
// CHECK-NEXT: store ptr
5453
// CHECK-NEXT: getelementptr
5554
// CHECK-NEXT: getelementptr inbounds [3 x i32], ptr [[array]], i{{32|64}} 0, i{{32|64}} 3

clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ void fn1(int i) {
131131
// CHECK-NEXT: store
132132
// init the list
133133
// CHECK-NEXT: getelementptr
134-
// CHECK-NEXT: getelementptr inbounds [3 x i32], ptr
135134
// CHECK-NEXT: store ptr
136135
// CHECK-NEXT: getelementptr
137136
// CHECK-NEXT: store i{{32|64}} 3

0 commit comments

Comments
 (0)