@@ -3028,10 +3028,10 @@ sumReduction(OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS,
3028
3028
}
3029
3029
3030
3030
static OpenMPIRBuilder::InsertPointTy
3031
- sumAtomicReduction (OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS) {
3031
+ sumAtomicReduction (OpenMPIRBuilder::InsertPointTy IP, Type *Ty, Value *LHS,
3032
+ Value *RHS) {
3032
3033
IRBuilder<> Builder (IP.getBlock (), IP.getPoint ());
3033
- Value *Partial = Builder.CreateLoad (RHS->getType ()->getPointerElementType (),
3034
- RHS, " red.partial" );
3034
+ Value *Partial = Builder.CreateLoad (Ty, RHS, " red.partial" );
3035
3035
Builder.CreateAtomicRMW (AtomicRMWInst::FAdd, LHS, Partial, None,
3036
3036
AtomicOrdering::Monotonic);
3037
3037
return Builder.saveIP ();
@@ -3046,10 +3046,10 @@ xorReduction(OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS,
3046
3046
}
3047
3047
3048
3048
static OpenMPIRBuilder::InsertPointTy
3049
- xorAtomicReduction (OpenMPIRBuilder::InsertPointTy IP, Value *LHS, Value *RHS) {
3049
+ xorAtomicReduction (OpenMPIRBuilder::InsertPointTy IP, Type *Ty, Value *LHS,
3050
+ Value *RHS) {
3050
3051
IRBuilder<> Builder (IP.getBlock (), IP.getPoint ());
3051
- Value *Partial = Builder.CreateLoad (RHS->getType ()->getPointerElementType (),
3052
- RHS, " red.partial" );
3052
+ Value *Partial = Builder.CreateLoad (Ty, RHS, " red.partial" );
3053
3053
Builder.CreateAtomicRMW (AtomicRMWInst::Xor, LHS, Partial, None,
3054
3054
AtomicOrdering::Monotonic);
3055
3055
return Builder.saveIP ();
@@ -3081,13 +3081,15 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) {
3081
3081
// Create variables to be reduced.
3082
3082
InsertPointTy OuterAllocaIP (&F->getEntryBlock (),
3083
3083
F->getEntryBlock ().getFirstInsertionPt ());
3084
+ Type *SumType = Builder.getFloatTy ();
3085
+ Type *XorType = Builder.getInt32Ty ();
3084
3086
Value *SumReduced;
3085
3087
Value *XorReduced;
3086
3088
{
3087
3089
IRBuilderBase::InsertPointGuard Guard (Builder);
3088
3090
Builder.restoreIP (OuterAllocaIP);
3089
- SumReduced = Builder.CreateAlloca (Builder. getFloatTy () );
3090
- XorReduced = Builder.CreateAlloca (Builder. getInt32Ty () );
3091
+ SumReduced = Builder.CreateAlloca (SumType );
3092
+ XorReduced = Builder.CreateAlloca (XorType );
3091
3093
}
3092
3094
3093
3095
// Store initial values of reductions into global variables.
@@ -3109,12 +3111,8 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) {
3109
3111
Value *TID = OMPBuilder.getOrCreateThreadID (Ident);
3110
3112
Value *SumLocal =
3111
3113
Builder.CreateUIToFP (TID, Builder.getFloatTy (), " sum.local" );
3112
- Value *SumPartial =
3113
- Builder.CreateLoad (SumReduced->getType ()->getPointerElementType (),
3114
- SumReduced, " sum.partial" );
3115
- Value *XorPartial =
3116
- Builder.CreateLoad (XorReduced->getType ()->getPointerElementType (),
3117
- XorReduced, " xor.partial" );
3114
+ Value *SumPartial = Builder.CreateLoad (SumType, SumReduced, " sum.partial" );
3115
+ Value *XorPartial = Builder.CreateLoad (XorType, XorReduced, " xor.partial" );
3118
3116
Value *Sum = Builder.CreateFAdd (SumPartial, SumLocal, " sum" );
3119
3117
Value *Xor = Builder.CreateXor (XorPartial, TID, " xor" );
3120
3118
Builder.CreateStore (Sum, SumReduced);
@@ -3164,8 +3162,8 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) {
3164
3162
Builder.restoreIP (AfterIP);
3165
3163
3166
3164
OpenMPIRBuilder::ReductionInfo ReductionInfos[] = {
3167
- {SumReduced, SumPrivatized, sumReduction, sumAtomicReduction},
3168
- {XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}};
3165
+ {SumType, SumReduced, SumPrivatized, sumReduction, sumAtomicReduction},
3166
+ {XorType, XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}};
3169
3167
3170
3168
OMPBuilder.createReductions (BodyIP, BodyAllocaIP, ReductionInfos);
3171
3169
@@ -3319,13 +3317,15 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
3319
3317
// Create variables to be reduced.
3320
3318
InsertPointTy OuterAllocaIP (&F->getEntryBlock (),
3321
3319
F->getEntryBlock ().getFirstInsertionPt ());
3320
+ Type *SumType = Builder.getFloatTy ();
3321
+ Type *XorType = Builder.getInt32Ty ();
3322
3322
Value *SumReduced;
3323
3323
Value *XorReduced;
3324
3324
{
3325
3325
IRBuilderBase::InsertPointGuard Guard (Builder);
3326
3326
Builder.restoreIP (OuterAllocaIP);
3327
- SumReduced = Builder.CreateAlloca (Builder. getFloatTy () );
3328
- XorReduced = Builder.CreateAlloca (Builder. getInt32Ty () );
3327
+ SumReduced = Builder.CreateAlloca (SumType );
3328
+ XorReduced = Builder.CreateAlloca (XorType );
3329
3329
}
3330
3330
3331
3331
// Store initial values of reductions into global variables.
@@ -3344,9 +3344,7 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
3344
3344
Value *TID = OMPBuilder.getOrCreateThreadID (Ident);
3345
3345
Value *SumLocal =
3346
3346
Builder.CreateUIToFP (TID, Builder.getFloatTy (), " sum.local" );
3347
- Value *SumPartial =
3348
- Builder.CreateLoad (SumReduced->getType ()->getPointerElementType (),
3349
- SumReduced, " sum.partial" );
3347
+ Value *SumPartial = Builder.CreateLoad (SumType, SumReduced, " sum.partial" );
3350
3348
Value *Sum = Builder.CreateFAdd (SumPartial, SumLocal, " sum" );
3351
3349
Builder.CreateStore (Sum, SumReduced);
3352
3350
@@ -3364,9 +3362,7 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
3364
3362
Constant *SrcLocStr = OMPBuilder.getOrCreateSrcLocStr (Loc);
3365
3363
Value *Ident = OMPBuilder.getOrCreateIdent (SrcLocStr);
3366
3364
Value *TID = OMPBuilder.getOrCreateThreadID (Ident);
3367
- Value *XorPartial =
3368
- Builder.CreateLoad (XorReduced->getType ()->getPointerElementType (),
3369
- XorReduced, " xor.partial" );
3365
+ Value *XorPartial = Builder.CreateLoad (XorType, XorReduced, " xor.partial" );
3370
3366
Value *Xor = Builder.CreateXor (XorPartial, TID, " xor" );
3371
3367
Builder.CreateStore (Xor, XorReduced);
3372
3368
@@ -3421,10 +3417,10 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
3421
3417
3422
3418
OMPBuilder.createReductions (
3423
3419
FirstBodyIP, FirstBodyAllocaIP,
3424
- {{SumReduced, SumPrivatized, sumReduction, sumAtomicReduction}});
3420
+ {{SumType, SumReduced, SumPrivatized, sumReduction, sumAtomicReduction}});
3425
3421
OMPBuilder.createReductions (
3426
3422
SecondBodyIP, SecondBodyAllocaIP,
3427
- {{XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}});
3423
+ {{XorType, XorReduced, XorPrivatized, xorReduction, xorAtomicReduction}});
3428
3424
3429
3425
Builder.restoreIP (AfterIP);
3430
3426
Builder.CreateRetVoid ();
0 commit comments