@@ -158,9 +158,11 @@ static RecordDecl *buildRecordForGlobalizedVars(
158
158
Field->addAttr (*I);
159
159
}
160
160
} else {
161
- llvm::APInt ArraySize (32 , BufSize);
162
- Type = C.getConstantArrayType (Type, ArraySize, nullptr ,
163
- ArraySizeModifier::Normal, 0 );
161
+ if (BufSize > 1 ) {
162
+ llvm::APInt ArraySize (32 , BufSize);
163
+ Type = C.getConstantArrayType (Type, ArraySize, nullptr ,
164
+ ArraySizeModifier::Normal, 0 );
165
+ }
164
166
Field = FieldDecl::Create (
165
167
C, GlobalizedRD, Loc, Loc, VD->getIdentifier (), Type,
166
168
C.getTrivialTypeSourceInfo (Type, SourceLocation ()),
@@ -2400,8 +2402,7 @@ static llvm::Value *emitListToGlobalCopyFunction(
2400
2402
llvm::Value *BufferArrPtr = Bld.CreatePointerBitCastOrAddrSpaceCast (
2401
2403
CGF.EmitLoadOfScalar (AddrBufferArg, /* Volatile=*/ false , C.VoidPtrTy , Loc),
2402
2404
LLVMReductionsBufferTy->getPointerTo ());
2403
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2404
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2405
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2405
2406
/* Volatile=*/ false , C.IntTy ,
2406
2407
Loc)};
2407
2408
unsigned Idx = 0 ;
@@ -2419,12 +2420,12 @@ static llvm::Value *emitListToGlobalCopyFunction(
2419
2420
const ValueDecl *VD = cast<DeclRefExpr>(Private)->getDecl ();
2420
2421
// Global = Buffer.VD[Idx];
2421
2422
const FieldDecl *FD = VarFieldMap.lookup (VD);
2423
+ llvm::Value *BufferPtr =
2424
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2422
2425
LValue GlobLVal = CGF.EmitLValueForField (
2423
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2426
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2424
2427
Address GlobAddr = GlobLVal.getAddress (CGF);
2425
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (GlobAddr.getElementType (),
2426
- GlobAddr.getPointer (), Idxs);
2427
- GlobLVal.setAddress (Address (BufferPtr,
2428
+ GlobLVal.setAddress (Address (GlobAddr.getPointer (),
2428
2429
CGF.ConvertTypeForMem (Private->getType ()),
2429
2430
GlobAddr.getAlignment ()));
2430
2431
switch (CGF.getEvaluationKind (Private->getType ())) {
@@ -2511,8 +2512,7 @@ static llvm::Value *emitListToGlobalReduceFunction(
2511
2512
Address ReductionList =
2512
2513
CGF.CreateMemTemp (ReductionArrayTy, " .omp.reduction.red_list" );
2513
2514
auto IPriv = Privates.begin ();
2514
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2515
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2515
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2516
2516
/* Volatile=*/ false , C.IntTy ,
2517
2517
Loc)};
2518
2518
unsigned Idx = 0 ;
@@ -2521,12 +2521,13 @@ static llvm::Value *emitListToGlobalReduceFunction(
2521
2521
// Global = Buffer.VD[Idx];
2522
2522
const ValueDecl *VD = cast<DeclRefExpr>(*IPriv)->getDecl ();
2523
2523
const FieldDecl *FD = VarFieldMap.lookup (VD);
2524
+ llvm::Value *BufferPtr =
2525
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2524
2526
LValue GlobLVal = CGF.EmitLValueForField (
2525
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2527
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2526
2528
Address GlobAddr = GlobLVal.getAddress (CGF);
2527
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (
2528
- GlobAddr.getElementType (), GlobAddr.getPointer (), Idxs);
2529
- CGF.EmitStoreOfScalar (BufferPtr, Elem, /* Volatile=*/ false , C.VoidPtrTy );
2529
+ CGF.EmitStoreOfScalar (GlobAddr.getPointer (), Elem, /* Volatile=*/ false ,
2530
+ C.VoidPtrTy );
2530
2531
if ((*IPriv)->getType ()->isVariablyModifiedType ()) {
2531
2532
// Store array size.
2532
2533
++Idx;
@@ -2608,8 +2609,7 @@ static llvm::Value *emitGlobalToListCopyFunction(
2608
2609
CGF.EmitLoadOfScalar (AddrBufferArg, /* Volatile=*/ false , C.VoidPtrTy , Loc),
2609
2610
LLVMReductionsBufferTy->getPointerTo ());
2610
2611
2611
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2612
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2612
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2613
2613
/* Volatile=*/ false , C.IntTy ,
2614
2614
Loc)};
2615
2615
unsigned Idx = 0 ;
@@ -2627,12 +2627,12 @@ static llvm::Value *emitGlobalToListCopyFunction(
2627
2627
const ValueDecl *VD = cast<DeclRefExpr>(Private)->getDecl ();
2628
2628
// Global = Buffer.VD[Idx];
2629
2629
const FieldDecl *FD = VarFieldMap.lookup (VD);
2630
+ llvm::Value *BufferPtr =
2631
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2630
2632
LValue GlobLVal = CGF.EmitLValueForField (
2631
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2633
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2632
2634
Address GlobAddr = GlobLVal.getAddress (CGF);
2633
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (GlobAddr.getElementType (),
2634
- GlobAddr.getPointer (), Idxs);
2635
- GlobLVal.setAddress (Address (BufferPtr,
2635
+ GlobLVal.setAddress (Address (GlobAddr.getPointer (),
2636
2636
CGF.ConvertTypeForMem (Private->getType ()),
2637
2637
GlobAddr.getAlignment ()));
2638
2638
switch (CGF.getEvaluationKind (Private->getType ())) {
@@ -2719,8 +2719,7 @@ static llvm::Value *emitGlobalToListReduceFunction(
2719
2719
Address ReductionList =
2720
2720
CGF.CreateMemTemp (ReductionArrayTy, " .omp.reduction.red_list" );
2721
2721
auto IPriv = Privates.begin ();
2722
- llvm::Value *Idxs[] = {llvm::ConstantInt::getNullValue (CGF.Int32Ty ),
2723
- CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2722
+ llvm::Value *Idxs[] = {CGF.EmitLoadOfScalar (CGF.GetAddrOfLocalVar (&IdxArg),
2724
2723
/* Volatile=*/ false , C.IntTy ,
2725
2724
Loc)};
2726
2725
unsigned Idx = 0 ;
@@ -2729,12 +2728,13 @@ static llvm::Value *emitGlobalToListReduceFunction(
2729
2728
// Global = Buffer.VD[Idx];
2730
2729
const ValueDecl *VD = cast<DeclRefExpr>(*IPriv)->getDecl ();
2731
2730
const FieldDecl *FD = VarFieldMap.lookup (VD);
2731
+ llvm::Value *BufferPtr =
2732
+ Bld.CreateInBoundsGEP (LLVMReductionsBufferTy, BufferArrPtr, Idxs);
2732
2733
LValue GlobLVal = CGF.EmitLValueForField (
2733
- CGF.MakeNaturalAlignAddrLValue (BufferArrPtr , StaticTy), FD);
2734
+ CGF.MakeNaturalAlignAddrLValue (BufferPtr , StaticTy), FD);
2734
2735
Address GlobAddr = GlobLVal.getAddress (CGF);
2735
- llvm::Value *BufferPtr = Bld.CreateInBoundsGEP (
2736
- GlobAddr.getElementType (), GlobAddr.getPointer (), Idxs);
2737
- CGF.EmitStoreOfScalar (BufferPtr, Elem, /* Volatile=*/ false , C.VoidPtrTy );
2736
+ CGF.EmitStoreOfScalar (GlobAddr.getPointer (), Elem, /* Volatile=*/ false ,
2737
+ C.VoidPtrTy );
2738
2738
if ((*IPriv)->getType ()->isVariablyModifiedType ()) {
2739
2739
// Store array size.
2740
2740
++Idx;
0 commit comments