Skip to content

Commit de14bef

Browse files
committed
Remove redundant loads.
It is caused by regenerate captured var value when processing the has_device_addr, the captured var value has been generated in GenerateOpenMPCapturedVars and passed as Arg in generateInfoForCapture. The fix just use Arg instead regenerated just same as is_device_ptr
1 parent 09d38dd commit de14bef

File tree

4 files changed

+185
-166
lines changed

4 files changed

+185
-166
lines changed

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8739,7 +8739,7 @@ class MappableExprsHandler {
87398739
// If this declaration appears in a is_device_ptr clause we just have to
87408740
// pass the pointer by value. If it is a reference to a declaration, we just
87418741
// pass its value.
8742-
if (VD && DevPointersMap.count(VD)) {
8742+
if (VD && (DevPointersMap.count(VD) || HasDevAddrsMap.count(VD))) {
87438743
CombinedInfo.Exprs.push_back(VD);
87448744
CombinedInfo.BasePointers.emplace_back(Arg, VD);
87458745
CombinedInfo.Pointers.push_back(Arg);
@@ -8752,30 +8752,6 @@ class MappableExprsHandler {
87528752
CombinedInfo.Mappers.push_back(nullptr);
87538753
return;
87548754
}
8755-
if (VD && HasDevAddrsMap.count(VD)) {
8756-
auto I = HasDevAddrsMap.find(VD);
8757-
CombinedInfo.Exprs.push_back(VD);
8758-
Expr *E = nullptr;
8759-
for (auto &MCL : I->second) {
8760-
E = MCL.begin()->getAssociatedExpression();
8761-
break;
8762-
}
8763-
llvm::Value *Ptr = nullptr;
8764-
if (E->isGLValue())
8765-
Ptr = CGF.EmitLValue(E).getPointer(CGF);
8766-
else
8767-
Ptr = CGF.EmitScalarExpr(E);
8768-
CombinedInfo.BasePointers.emplace_back(Ptr, VD);
8769-
CombinedInfo.Pointers.push_back(Ptr);
8770-
CombinedInfo.Sizes.push_back(CGF.Builder.CreateIntCast(
8771-
CGF.getTypeSize(CGF.getContext().VoidPtrTy), CGF.Int64Ty,
8772-
/*isSigned=*/true));
8773-
CombinedInfo.Types.push_back(
8774-
(Cap->capturesVariable() ? OMP_MAP_TO : OMP_MAP_LITERAL) |
8775-
OMP_MAP_TARGET_PARAM);
8776-
CombinedInfo.Mappers.push_back(nullptr);
8777-
return;
8778-
}
87798755

87808756
using MapData =
87818757
std::tuple<OMPClauseMappableExprCommon::MappableExprComponentListRef,

clang/test/OpenMP/target_has_device_addr_codegen.cpp

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -350,11 +350,10 @@ void use_template() {
350350
// CHECK-NEXT: [[TMP17:%.*]] = load ptr, ptr [[Z]], align 8
351351
// CHECK-NEXT: store ptr [[TMP17]], ptr [[TMP]], align 8
352352
// CHECK-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP]], align 8
353-
// CHECK-NEXT: [[TMP19:%.*]] = load ptr, ptr [[TMP]], align 8
354353
// CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
355-
// CHECK-NEXT: store ptr [[TMP19]], ptr [[TMP20]], align 8
354+
// CHECK-NEXT: store ptr [[TMP18]], ptr [[TMP20]], align 8
356355
// CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
357-
// CHECK-NEXT: store ptr [[TMP19]], ptr [[TMP21]], align 8
356+
// CHECK-NEXT: store ptr [[TMP18]], ptr [[TMP21]], align 8
358357
// CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
359358
// CHECK-NEXT: store ptr null, ptr [[TMP22]], align 8
360359
// CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
@@ -422,11 +421,10 @@ void use_template() {
422421
// CHECK-NEXT: [[TMP52:%.*]] = load ptr, ptr [[RAA]], align 8
423422
// CHECK-NEXT: store ptr [[TMP52]], ptr [[_TMP13]], align 8
424423
// CHECK-NEXT: [[TMP53:%.*]] = load ptr, ptr [[_TMP13]], align 8
425-
// CHECK-NEXT: [[TMP54:%.*]] = load ptr, ptr [[_TMP13]], align 8
426424
// CHECK-NEXT: [[TMP55:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS14]], i32 0, i32 0
427-
// CHECK-NEXT: store ptr [[TMP54]], ptr [[TMP55]], align 8
425+
// CHECK-NEXT: store ptr [[TMP53]], ptr [[TMP55]], align 8
428426
// CHECK-NEXT: [[TMP56:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS15]], i32 0, i32 0
429-
// CHECK-NEXT: store ptr [[TMP54]], ptr [[TMP56]], align 8
427+
// CHECK-NEXT: store ptr [[TMP53]], ptr [[TMP56]], align 8
430428
// CHECK-NEXT: [[TMP57:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS16]], i64 0, i64 0
431429
// CHECK-NEXT: store ptr null, ptr [[TMP57]], align 8
432430
// CHECK-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS14]], i32 0, i32 0
@@ -491,11 +489,10 @@ void use_template() {
491489
// CHECK-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l153(ptr [[H]]) #[[ATTR5]]
492490
// CHECK-NEXT: br label [[OMP_OFFLOAD_CONT25]]
493491
// CHECK: omp_offload.cont25:
494-
// CHECK-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [5 x i32], ptr [[DA]], i64 0, i64 0
495492
// CHECK-NEXT: [[TMP87:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS26]], i32 0, i32 0
496-
// CHECK-NEXT: store ptr [[ARRAYDECAY]], ptr [[TMP87]], align 8
493+
// CHECK-NEXT: store ptr [[DA]], ptr [[TMP87]], align 8
497494
// CHECK-NEXT: [[TMP88:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS27]], i32 0, i32 0
498-
// CHECK-NEXT: store ptr [[ARRAYDECAY]], ptr [[TMP88]], align 8
495+
// CHECK-NEXT: store ptr [[DA]], ptr [[TMP88]], align 8
499496
// CHECK-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS28]], i64 0, i64 0
500497
// CHECK-NEXT: store ptr null, ptr [[TMP89]], align 8
501498
// CHECK-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS26]], i32 0, i32 0
@@ -684,11 +681,10 @@ void use_template() {
684681
// CHECK-NEXT: [[TMP17:%.*]] = load ptr, ptr [[Z]], align 8
685682
// CHECK-NEXT: store ptr [[TMP17]], ptr [[TMP]], align 8
686683
// CHECK-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP]], align 8
687-
// CHECK-NEXT: [[TMP19:%.*]] = load ptr, ptr [[TMP]], align 8
688684
// CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
689-
// CHECK-NEXT: store ptr [[TMP19]], ptr [[TMP20]], align 8
685+
// CHECK-NEXT: store ptr [[TMP18]], ptr [[TMP20]], align 8
690686
// CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
691-
// CHECK-NEXT: store ptr [[TMP19]], ptr [[TMP21]], align 8
687+
// CHECK-NEXT: store ptr [[TMP18]], ptr [[TMP21]], align 8
692688
// CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
693689
// CHECK-NEXT: store ptr null, ptr [[TMP22]], align 8
694690
// CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
@@ -859,11 +855,10 @@ void use_template() {
859855
// CHECK-NEXT: [[TMP17:%.*]] = load ptr, ptr [[Z]], align 8
860856
// CHECK-NEXT: store ptr [[TMP17]], ptr [[TMP]], align 8
861857
// CHECK-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP]], align 8
862-
// CHECK-NEXT: [[TMP19:%.*]] = load ptr, ptr [[TMP]], align 8
863858
// CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
864-
// CHECK-NEXT: store ptr [[TMP19]], ptr [[TMP20]], align 8
859+
// CHECK-NEXT: store ptr [[TMP18]], ptr [[TMP20]], align 8
865860
// CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
866-
// CHECK-NEXT: store ptr [[TMP19]], ptr [[TMP21]], align 8
861+
// CHECK-NEXT: store ptr [[TMP18]], ptr [[TMP21]], align 8
867862
// CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
868863
// CHECK-NEXT: store ptr null, ptr [[TMP22]], align 8
869864
// CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0

0 commit comments

Comments
 (0)