@@ -153,9 +153,11 @@ static RecordDecl *buildRecordForGlobalizedVars(
153
153
Field->addAttr (*I);
154
154
}
155
155
} else {
156
- llvm::APInt ArraySize (32 , BufSize);
157
- Type = C.getConstantArrayType (Type, ArraySize, nullptr ,
158
- ArraySizeModifier::Normal, 0 );
156
+ if (BufSize > 1 ) {
157
+ llvm::APInt ArraySize (32 , BufSize);
158
+ Type = C.getConstantArrayType (Type, ArraySize, nullptr ,
159
+ ArraySizeModifier::Normal, 0 );
160
+ }
159
161
Field = FieldDecl::Create (
160
162
C, GlobalizedRD, Loc, Loc, VD->getIdentifier (), Type,
161
163
C.getTrivialTypeSourceInfo (Type, SourceLocation ()),
@@ -2205,8 +2207,7 @@ static llvm::Value *emitListToGlobalCopyFunction(
2205
2207
llvm::Value *BufferArrPtr = Bld.CreatePointerBitCastOrAddrSpaceCast (
2206
2208
CGF.EmitLoadOfScalar (AddrBufferArg, /* Volatile=*/ false , C.VoidPtrTy , Loc),
2207
2209
LLVMReductionsBufferTy->getPointerTo ());
2208
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2209
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2210
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2210
2211
/* Volatile=*/ false , C.IntTy ,
2211
2212
Loc)};
2212
2213
unsigned Idx = 0 ;
@@ -2224,12 +2225,12 @@ static llvm::Value *emitListToGlobalCopyFunction(
2224
2225
const ValueDecl *VD = cast<DeclRefExpr>(Private)->getDecl ();
2225
2226
// Global = Buffer.VD[Idx];
2226
2227
const FieldDecl *FD = VarFieldMap.lookup (VD);
2228
+ llvm::Value *BufferPtr =
2229
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2227
2230
LValue GlobLVal = CGF.EmitLValueForField (
2228
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2231
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2229
2232
Address GlobAddr = GlobLVal.getAddress (CGF);
2230
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (GlobAddr.getElementType (),
2231
- GlobAddr.getPointer (), Idxs);
2232
- GlobLVal.setAddress (Address (BufferPtr,
2233
+ GlobLVal.setAddress (Address (GlobAddr.getPointer (),
2233
2234
CGF.ConvertTypeForMem (Private->getType ()),
2234
2235
GlobAddr.getAlignment ()));
2235
2236
switch (CGF.getEvaluationKind (Private->getType ())) {
@@ -2316,8 +2317,7 @@ static llvm::Value *emitListToGlobalReduceFunction(
2316
2317
Address ReductionList =
2317
2318
CGF.CreateMemTemp (ReductionArrayTy, " .omp.reduction.red_list" );
2318
2319
auto IPriv = Privates.begin ();
2319
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2320
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2320
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2321
2321
/* Volatile=*/ false , C.IntTy ,
2322
2322
Loc)};
2323
2323
unsigned Idx = 0 ;
@@ -2326,12 +2326,13 @@ static llvm::Value *emitListToGlobalReduceFunction(
2326
2326
// Global = Buffer.VD[Idx];
2327
2327
const ValueDecl *VD = cast<DeclRefExpr>(*IPriv)->getDecl ();
2328
2328
const FieldDecl *FD = VarFieldMap.lookup (VD);
2329
+ llvm::Value *BufferPtr =
2330
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2329
2331
LValue GlobLVal = CGF.EmitLValueForField (
2330
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2332
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2331
2333
Address GlobAddr = GlobLVal.getAddress (CGF);
2332
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (
2333
- GlobAddr.getElementType (), GlobAddr.getPointer (), Idxs);
2334
- CGF.EmitStoreOfScalar (BufferPtr, Elem, /* Volatile=*/ false , C.VoidPtrTy );
2334
+ CGF.EmitStoreOfScalar (GlobAddr.getPointer (), Elem, /* Volatile=*/ false ,
2335
+ C.VoidPtrTy );
2335
2336
if ((*IPriv)->getType ()->isVariablyModifiedType ()) {
2336
2337
// Store array size.
2337
2338
++Idx;
@@ -2413,8 +2414,7 @@ static llvm::Value *emitGlobalToListCopyFunction(
2413
2414
CGF.EmitLoadOfScalar (AddrBufferArg, /* Volatile=*/ false , C.VoidPtrTy , Loc),
2414
2415
LLVMReductionsBufferTy->getPointerTo ());
2415
2416
2416
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2417
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2417
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2418
2418
/* Volatile=*/ false , C.IntTy ,
2419
2419
Loc)};
2420
2420
unsigned Idx = 0 ;
@@ -2432,12 +2432,12 @@ static llvm::Value *emitGlobalToListCopyFunction(
2432
2432
const ValueDecl *VD = cast<DeclRefExpr>(Private)->getDecl ();
2433
2433
// Global = Buffer.VD[Idx];
2434
2434
const FieldDecl *FD = VarFieldMap.lookup (VD);
2435
+ llvm::Value *BufferPtr =
2436
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2435
2437
LValue GlobLVal = CGF.EmitLValueForField (
2436
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2438
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2437
2439
Address GlobAddr = GlobLVal.getAddress (CGF);
2438
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (GlobAddr.getElementType (),
2439
- GlobAddr.getPointer (), Idxs);
2440
- GlobLVal.setAddress (Address (BufferPtr,
2440
+ GlobLVal.setAddress (Address (GlobAddr.getPointer (),
2441
2441
CGF.ConvertTypeForMem (Private->getType ()),
2442
2442
GlobAddr.getAlignment ()));
2443
2443
switch (CGF.getEvaluationKind (Private->getType ())) {
@@ -2524,8 +2524,7 @@ static llvm::Value *emitGlobalToListReduceFunction(
2524
2524
Address ReductionList =
2525
2525
CGF.CreateMemTemp (ReductionArrayTy, " .omp.reduction.red_list" );
2526
2526
auto IPriv = Privates.begin ();
2527
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2528
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2527
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2529
2528
/* Volatile=*/ false , C.IntTy ,
2530
2529
Loc)};
2531
2530
unsigned Idx = 0 ;
@@ -2534,12 +2533,13 @@ static llvm::Value *emitGlobalToListReduceFunction(
2534
2533
// Global = Buffer.VD[Idx];
2535
2534
const ValueDecl *VD = cast<DeclRefExpr>(*IPriv)->getDecl ();
2536
2535
const FieldDecl *FD = VarFieldMap.lookup (VD);
2536
+ llvm::Value *BufferPtr =
2537
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2537
2538
LValue GlobLVal = CGF.EmitLValueForField (
2538
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2539
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2539
2540
Address GlobAddr = GlobLVal.getAddress (CGF);
2540
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (
2541
- GlobAddr.getElementType (), GlobAddr.getPointer (), Idxs);
2542
- CGF.EmitStoreOfScalar (BufferPtr, Elem, /* Volatile=*/ false , C.VoidPtrTy );
2541
+ CGF.EmitStoreOfScalar (GlobAddr.getPointer (), Elem, /* Volatile=*/ false ,
2542
+ C.VoidPtrTy );
2543
2543
if ((*IPriv)->getType ()->isVariablyModifiedType ()) {
2544
2544
// Store array size.
2545
2545
++Idx;
0 commit comments