Skip to content

Commit e1f4a91

Browse files
author
Sairudra More
committed
[OpenMP] Fix defaultmap(firstprivate:pointer) handling for implicit captures
This fixes a bug where pointers from defaultmap(firstprivate:pointer) were incorrectly treated as firstprivate literals, causing OMP_MAP_LITERAL to be set. This prevented the runtime from performing device address lookup.
1 parent 97732dd commit e1f4a91

18 files changed

+258
-34
lines changed

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "clang/Basic/SourceManager.h"
2929
#include "clang/CodeGen/ConstantInitBuilder.h"
3030
#include "llvm/ADT/ArrayRef.h"
31+
#include "llvm/ADT/SmallSet.h"
3132
#include "llvm/ADT/SmallVector.h"
3233
#include "llvm/ADT/StringExtras.h"
3334
#include "llvm/Bitcode/BitcodeReader.h"
@@ -7211,6 +7212,9 @@ class MappableExprsHandler {
72117212
/// firstprivate, false otherwise.
72127213
llvm::DenseMap<CanonicalDeclPtr<const VarDecl>, bool> FirstPrivateDecls;
72137214

7215+
/// Set of defaultmap clause kinds that use firstprivate behavior.
7216+
llvm::SmallSet<OpenMPDefaultmapClauseKind, 4> DefaultmapFirstprivateKinds;
7217+
72147218
/// Map between device pointer declarations and their expression components.
72157219
/// The key value for declarations in 'this' is null.
72167220
llvm::DenseMap<
@@ -8989,6 +8993,10 @@ class MappableExprsHandler {
89898993
FirstPrivateDecls.try_emplace(VD, /*Implicit=*/true);
89908994
}
89918995
}
8996+
// Extract defaultmap clause information.
8997+
for (const auto *C : Dir.getClausesOfKind<OMPDefaultmapClause>())
8998+
if (C->getDefaultmapModifier() == OMPC_DEFAULTMAP_MODIFIER_firstprivate)
8999+
DefaultmapFirstprivateKinds.insert(C->getDefaultmapKind());
89929000
// Extract device pointer clause information.
89939001
for (const auto *C : Dir.getClausesOfKind<OMPIsDevicePtrClause>())
89949002
for (auto L : C->component_lists())
@@ -9566,6 +9574,37 @@ class MappableExprsHandler {
95669574
}
95679575
}
95689576

9577+
/// Check if a variable should be treated as firstprivate literal.
9578+
/// Returns true ONLY for explicit firstprivate clauses, not for implicit
9579+
/// captures via defaultmap(firstprivate:pointer). Implicitly captured
9580+
/// pointers need runtime lookup to get their device addresses.
9581+
bool isEffectivelyFirstprivate(const VarDecl *VD, QualType Type) const {
9582+
// Check explicit firstprivate clauses (not implicit from defaultmap)
9583+
auto I = FirstPrivateDecls.find(VD);
9584+
if (I != FirstPrivateDecls.end() && !I->getSecond())
9585+
return true; // Explicit firstprivate only
9586+
9587+
// For non-pointer types, defaultmap(firstprivate:...) should also
9588+
// be treated as firstprivate literals since they're passed by value
9589+
if (Type->isAnyPointerType())
9590+
return false; // Pointers from defaultmap need runtime lookup
9591+
9592+
// Check defaultmap(firstprivate:scalar) for scalar types
9593+
if (DefaultmapFirstprivateKinds.count(OMPC_DEFAULTMAP_scalar)) {
9594+
if (Type->isScalarType())
9595+
return true;
9596+
}
9597+
9598+
// Check defaultmap(firstprivate:aggregate) for aggregate types
9599+
if (DefaultmapFirstprivateKinds.count(OMPC_DEFAULTMAP_aggregate)) {
9600+
if (Type->isAggregateType())
9601+
return true;
9602+
}
9603+
9604+
// Check defaultmap(firstprivate:all) for all types
9605+
return DefaultmapFirstprivateKinds.count(OMPC_DEFAULTMAP_all);
9606+
}
9607+
95699608
/// Generate the default map information for a given capture \a CI,
95709609
/// record field declaration \a RI and captured value \a CV.
95719610
void generateDefaultMapInfo(const CapturedStmt::Capture &CI,
@@ -9593,13 +9632,23 @@ class MappableExprsHandler {
95939632
CombinedInfo.DevicePtrDecls.push_back(nullptr);
95949633
CombinedInfo.DevicePointers.push_back(DeviceInfoTy::None);
95959634
CombinedInfo.Pointers.push_back(CV);
9635+
bool IsFirstprivate =
9636+
isEffectivelyFirstprivate(VD, RI.getType().getNonReferenceType());
9637+
95969638
if (!RI.getType()->isAnyPointerType()) {
95979639
// We have to signal to the runtime captures passed by value that are
95989640
// not pointers.
95999641
CombinedInfo.Types.push_back(
96009642
OpenMPOffloadMappingFlags::OMP_MAP_LITERAL);
96019643
CombinedInfo.Sizes.push_back(CGF.Builder.CreateIntCast(
96029644
CGF.getTypeSize(RI.getType()), CGF.Int64Ty, /*isSigned=*/true));
9645+
} else if (IsFirstprivate) {
9646+
// Firstprivate pointers should be passed by value (as literals)
9647+
// without performing a present table lookup at runtime.
9648+
CombinedInfo.Types.push_back(
9649+
OpenMPOffloadMappingFlags::OMP_MAP_LITERAL);
9650+
// Use zero size for pointer literals (just passing the pointer value)
9651+
CombinedInfo.Sizes.push_back(llvm::Constant::getNullValue(CGF.Int64Ty));
96039652
} else {
96049653
// Pointers are implicitly mapped with a zero size and no flags
96059654
// (other than first map that is added for all implicit maps).
@@ -9613,26 +9662,31 @@ class MappableExprsHandler {
96139662
assert(CI.capturesVariable() && "Expected captured reference.");
96149663
const auto *PtrTy = cast<ReferenceType>(RI.getType().getTypePtr());
96159664
QualType ElementType = PtrTy->getPointeeType();
9616-
CombinedInfo.Sizes.push_back(CGF.Builder.CreateIntCast(
9617-
CGF.getTypeSize(ElementType), CGF.Int64Ty, /*isSigned=*/true));
9618-
// The default map type for a scalar/complex type is 'to' because by
9619-
// default the value doesn't have to be retrieved. For an aggregate
9620-
// type, the default is 'tofrom'.
9621-
CombinedInfo.Types.push_back(getMapModifiersForPrivateClauses(CI));
96229665
const VarDecl *VD = CI.getCapturedVar();
9623-
auto I = FirstPrivateDecls.find(VD);
9666+
bool IsFirstprivate = isEffectivelyFirstprivate(VD, ElementType);
96249667
CombinedInfo.Exprs.push_back(VD->getCanonicalDecl());
96259668
CombinedInfo.BasePointers.push_back(CV);
96269669
CombinedInfo.DevicePtrDecls.push_back(nullptr);
96279670
CombinedInfo.DevicePointers.push_back(DeviceInfoTy::None);
9628-
if (I != FirstPrivateDecls.end() && ElementType->isAnyPointerType()) {
9629-
Address PtrAddr = CGF.EmitLoadOfReference(CGF.MakeAddrLValue(
9630-
CV, ElementType, CGF.getContext().getDeclAlign(VD),
9631-
AlignmentSource::Decl));
9632-
CombinedInfo.Pointers.push_back(PtrAddr.emitRawPointer(CGF));
9671+
9672+
// For firstprivate pointers, pass by value instead of dereferencing
9673+
if (IsFirstprivate && ElementType->isAnyPointerType()) {
9674+
// Treat as a literal value (pass the pointer value itself)
9675+
CombinedInfo.Pointers.push_back(CV);
9676+
// Use zero size for pointer literals
9677+
CombinedInfo.Sizes.push_back(llvm::Constant::getNullValue(CGF.Int64Ty));
9678+
CombinedInfo.Types.push_back(
9679+
OpenMPOffloadMappingFlags::OMP_MAP_LITERAL);
96339680
} else {
9681+
CombinedInfo.Sizes.push_back(CGF.Builder.CreateIntCast(
9682+
CGF.getTypeSize(ElementType), CGF.Int64Ty, /*isSigned=*/true));
9683+
// The default map type for a scalar/complex type is 'to' because by
9684+
// default the value doesn't have to be retrieved. For an aggregate
9685+
// type, the default is 'tofrom'.
9686+
CombinedInfo.Types.push_back(getMapModifiersForPrivateClauses(CI));
96349687
CombinedInfo.Pointers.push_back(CV);
96359688
}
9689+
auto I = FirstPrivateDecls.find(VD);
96369690
if (I != FirstPrivateDecls.end())
96379691
IsImplicit = I->getSecond();
96389692
}

clang/test/OpenMP/target_codegen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
// code and have mapped arguments, and only 6 have all-constant map sizes.
7979

8080
// CHECK-DAG: [[SIZET:@.+]] = private unnamed_addr constant [2 x i64] [i64 0, i64 4]
81-
// CHECK-DAG: [[MAPT:@.+]] = private unnamed_addr constant [2 x i64] [i64 544, i64 800]
81+
// CHECK-DAG: [[MAPT:@.+]] = private unnamed_addr constant [2 x i64] [i64 800, i64 800]
8282
// CHECK-DAG: [[SIZET2:@.+]] = private unnamed_addr constant [1 x i{{32|64}}] [i64 2]
8383
// CHECK-DAG: [[MAPT2:@.+]] = private unnamed_addr constant [1 x i64] [i64 800]
8484
// CHECK-DAG: [[SIZET3:@.+]] = private unnamed_addr constant [2 x i64] [i64 4, i64 2]

clang/test/OpenMP/target_defaultmap_codegen_01.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ void explicit_maps_single (){
735735

736736
// CK14: [[SIZE09:@.+]] = private {{.*}}constant [1 x i64] zeroinitializer
737737
// Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 544
738-
// CK14: [[MTYPE09:@.+]] = private {{.*}}constant [1 x i64] [i64 544]
738+
// CK14: [[MTYPE09:@.+]] = private {{.*}}constant [1 x i64] [i64 800]
739739

740740
// CK14-LABEL: explicit_maps_single{{.*}}(
741741
void explicit_maps_single (){
@@ -1235,7 +1235,7 @@ void implicit_maps_struct (int a){
12351235

12361236
// CK22-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] zeroinitializer
12371237
// Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 544
1238-
// CK22-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 544]
1238+
// CK22-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800]
12391239

12401240
// CK22-LABEL: implicit_maps_pointer{{.*}}(
12411241
void implicit_maps_pointer (){

clang/test/OpenMP/target_depend_codegen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
// TCHECK: [[ENTTY:%.+]] = type { i64, i16, i16, i32, ptr, ptr, i64, i64, ptr }
4545

4646
// CHECK-DAG: [[SIZET:@.+]] = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 {{16|12}}]
47-
// CHECK-DAG: [[MAPT:@.+]] = private unnamed_addr constant [3 x i64] [i64 544, i64 800, i64 3]
47+
// CHECK-DAG: [[MAPT:@.+]] = private unnamed_addr constant [3 x i64] [i64 800, i64 800, i64 3]
4848
// CHECK-DAG: @{{.*}} = weak constant i8 0
4949

5050
// TCHECK: @{{.+}} = weak constant [[ENTTY]]
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s
2+
// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
3+
// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
4+
// expected-no-diagnostics
5+
6+
#ifndef HEADER
7+
#define HEADER
8+
9+
/// ========================================================================
10+
/// Test: Firstprivate pointer handling in OpenMP target regions
11+
/// ========================================================================
12+
///
13+
/// This test verifies that pointers with firstprivate semantics get the
14+
/// OMP_MAP_LITERAL flag, enabling the runtime to pass pointer values directly
15+
/// without performing present table lookups.
16+
///
17+
/// Map type values:
18+
/// 288 = OMP_MAP_TARGET_PARAM (32) + OMP_MAP_LITERAL (256)
19+
/// Used for explicit firstprivate(ptr)
20+
///
21+
/// 800 = OMP_MAP_TARGET_PARAM (32) + OMP_MAP_LITERAL (256) + OMP_MAP_IS_PTR (512)
22+
/// Used for implicit firstprivate pointers (e.g., from defaultmap clauses)
23+
/// Note: 512 is OMP_MAP_IS_PTR, not IMPLICIT. Implicitness is tracked separately.
24+
///
25+
/// 544 = OMP_MAP_TARGET_PARAM (32) + OMP_MAP_IS_PTR (512)
26+
/// Incorrect behavior - missing LITERAL flag, causes runtime present table lookup
27+
///
28+
29+
///==========================================================================
30+
/// Test 1: Explicit firstprivate(pointer) → map type 288
31+
///==========================================================================
32+
33+
// CHECK-DAG: @.offload_maptypes{{[^.]*}} = private unnamed_addr constant [1 x i64] [i64 288]
34+
// CHECK-DAG: @.offload_sizes{{[^.]*}} = private unnamed_addr constant [1 x i64] zeroinitializer
35+
36+
void test1_explicit_firstprivate() {
37+
double *ptr = nullptr;
38+
39+
// Explicit firstprivate should generate map type 288
40+
// (TARGET_PARAM | LITERAL, no IS_PTR flag for explicit clauses)
41+
#pragma omp target firstprivate(ptr)
42+
{
43+
if (ptr) ptr[0] = 1.0;
44+
}
45+
}
46+
47+
///==========================================================================
48+
/// Test 2: defaultmap(firstprivate:pointer) → map type 544
49+
///==========================================================================
50+
51+
// CHECK-DAG: @.offload_maptypes{{.*}} = private unnamed_addr constant [1 x i64] [i64 544]
52+
// CHECK-DAG: @.offload_sizes{{.*}} = private unnamed_addr constant [1 x i64] zeroinitializer
53+
54+
void test2_defaultmap_firstprivate_pointer() {
55+
double *ptr = nullptr;
56+
57+
// defaultmap(firstprivate:pointer) creates implicit firstprivate
58+
// Should generate map type 544 (TARGET_PARAM | TO) - pointers need runtime lookup, not literal
59+
#pragma omp target defaultmap(firstprivate:pointer)
60+
{
61+
if (ptr) ptr[0] = 2.0;
62+
}
63+
}
64+
65+
///==========================================================================
66+
/// Test 3: defaultmap(firstprivate:scalar) with double → map type 800
67+
///==========================================================================
68+
69+
// CHECK-DAG: @.offload_maptypes{{.*}} = private unnamed_addr constant [1 x i64] [i64 800]
70+
71+
void test3_defaultmap_scalar_double() {
72+
double d = 3.0;
73+
74+
// OpenMP's "scalar" category excludes pointers but includes arithmetic types
75+
// Double gets implicit firstprivate → map type 800
76+
#pragma omp target defaultmap(firstprivate:scalar)
77+
{
78+
d += 1.0;
79+
}
80+
}
81+
82+
///==========================================================================
83+
/// Test 4: Pointer with defaultmap(firstprivate:scalar) → gets 544 (not firstprivate)
84+
///==========================================================================
85+
86+
// CHECK-DAG: @.offload_maptypes{{.*}} = private unnamed_addr constant [1 x i64] [i64 544]
87+
// CHECK-DAG: @.offload_sizes{{.*}} = private unnamed_addr constant [1 x i64] zeroinitializer
88+
89+
void test4_pointer_with_scalar_defaultmap() {
90+
double *ptr = nullptr;
91+
92+
// Note: defaultmap(firstprivate:scalar) does NOT apply to pointers (scalar excludes pointers).
93+
// The pointer gets implicit map type 544 (OMP_MAP_TO | OMP_MAP_TARGET_PARAM) which means
94+
// it will perform runtime lookup to get the device address, NOT treat it as a literal.
95+
// This is the correct behavior - pointers need device address translation.
96+
#pragma omp target defaultmap(firstprivate:scalar)
97+
{
98+
if (ptr) ptr[0] = 4.0;
99+
}
100+
}
101+
102+
///==========================================================================
103+
/// Test 5: Multiple pointers with explicit firstprivate → all get 288
104+
///==========================================================================
105+
106+
// CHECK-DAG: @.offload_maptypes{{.*}} = private unnamed_addr constant [3 x i64] [i64 288, i64 288, i64 288]
107+
// CHECK-DAG: @.offload_sizes{{.*}} = private unnamed_addr constant [3 x i64] zeroinitializer
108+
109+
void test5_multiple_firstprivate() {
110+
int *a = nullptr;
111+
float *b = nullptr;
112+
double *c = nullptr;
113+
114+
// All explicit firstprivate pointers get map type 288
115+
#pragma omp target firstprivate(a, b, c)
116+
{
117+
if (a) a[0] = 6;
118+
if (b) b[0] = 7.0f;
119+
if (c) c[0] = 8.0;
120+
}
121+
}
122+
123+
///==========================================================================
124+
/// Test 6: Pointer to const with firstprivate → map type 288
125+
///==========================================================================
126+
127+
// CHECK-DAG: @.offload_maptypes{{.*}} = private unnamed_addr constant [1 x i64] [i64 288]
128+
// CHECK-DAG: @.offload_sizes{{.*}} = private unnamed_addr constant [1 x i64] zeroinitializer
129+
130+
void test6_const_pointer() {
131+
const double *const_ptr = nullptr;
132+
133+
// Const pointer with explicit firstprivate → 288
134+
#pragma omp target firstprivate(const_ptr)
135+
{
136+
if (const_ptr) {
137+
double val = const_ptr[0];
138+
(void)val;
139+
}
140+
}
141+
}
142+
143+
///==========================================================================
144+
/// Test 7: Pointer-to-pointer with firstprivate → map type 288
145+
///==========================================================================
146+
147+
// CHECK-DAG: @.offload_maptypes{{.*}} = private unnamed_addr constant [1 x i64] [i64 288]
148+
// CHECK-DAG: @.offload_sizes{{.*}} = private unnamed_addr constant [1 x i64] zeroinitializer
149+
150+
void test7_pointer_to_pointer() {
151+
int **pp = nullptr;
152+
153+
// Pointer-to-pointer with explicit firstprivate → 288
154+
#pragma omp target firstprivate(pp)
155+
{
156+
if (pp && *pp) (*pp)[0] = 9;
157+
}
158+
}
159+
160+
///==========================================================================
161+
/// Verification: The key fix is that firstprivate pointers now include
162+
/// the LITERAL flag (256), which tells the runtime to pass the pointer
163+
/// value directly instead of performing a present table lookup.
164+
///
165+
/// Before fix: Pointers got 544 (TARGET_PARAM | IS_PTR) → runtime lookup
166+
/// After fix: Pointers get 288 or 800 (includes LITERAL) → direct pass
167+
///==========================================================================
168+
169+
#endif // HEADER

clang/test/OpenMP/target_map_codegen_01.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@
3838
// CK2-LABEL: @.__omp_offloading_{{.*}}implicit_maps_reference{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
3939

4040
// CK2: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4]
41-
// Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800
41+
// Map types: OMP_MAP_LITERAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800
4242
// CK2: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800]
4343
// CK2-LABEL: @.__omp_offloading_{{.*}}implicit_maps_reference{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
4444
// CK2: [[SIZES2:@.+]] = {{.+}}constant [1 x i64] zeroinitializer
45-
// Map types: OMP_MAP_IS_PTR | OMP_MAP_IMPLICIT = 544
46-
// CK2: [[TYPES2:@.+]] = {{.+}}constant [1 x i64] [i64 544]
45+
// Map types: OMP_MAP_IS_PTR | OMP_MAP_LITERAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800
46+
// CK2: [[TYPES2:@.+]] = {{.+}}constant [1 x i64] [i64 800]
4747

4848
// CK2-LABEL: implicit_maps_reference{{.*}}(
4949
void implicit_maps_reference (int a, int *b){

clang/test/OpenMP/target_map_codegen_09.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
// CK10-LABEL: @.__omp_offloading_{{.*}}implicit_maps_pointer{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
3737

3838
// CK10-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] zeroinitializer
39-
// Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 544
40-
// CK10-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 544]
39+
// Map types: OMP_MAP_IS_PTR | OMP_MAP_LITERAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800
40+
// CK10-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800]
4141

4242
// CK10-LABEL: implicit_maps_pointer{{.*}}(
4343
void implicit_maps_pointer (){

clang/test/OpenMP/target_map_codegen_10.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
// CK11_5-DAG: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 16, i64 0]
3333
// Map types: OMP_MAP_TO | OMP_MAP_FROM | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547
3434
// CK11_4-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 547]
35-
// CK11_5-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 544]
35+
// Map types: OMP_MAP_TO | OMP_MAP_FROM | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547, OMP_MAP_IS_PTR | OMP_MAP_LITERAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800
36+
// CK11_5-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 800]
3637

3738
// CK11-LABEL: implicit_maps_double_complex{{.*}}(
3839
void implicit_maps_double_complex (int a, int *b){

clang/test/OpenMP/target_map_codegen_26.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
// CK27-LABEL: @.__omp_offloading_{{.*}}zero_size_section_and_private_maps{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
3737
// CK27: [[SIZE00:@.+]] = private {{.*}}constant [1 x i64] zeroinitializer
38-
// CK27: [[MTYPE00:@.+]] = private {{.*}}constant [1 x i64] [i64 544]
38+
// CK27: [[MTYPE00:@.+]] = private {{.*}}constant [1 x i64] [i64 800]
3939

4040
// CK27-LABEL: @.__omp_offloading_{{.*}}zero_size_section_and_private_maps{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
4141
// CK27: [[SIZE01:@.+]] = private {{.*}}constant [1 x i64] zeroinitializer
@@ -52,7 +52,7 @@
5252
// CK27-LABEL: @.__omp_offloading_{{.*}}zero_size_section_and_private_maps{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
5353
// CK27-LABEL: @.__omp_offloading_{{.*}}zero_size_section_and_private_maps{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
5454
// CK27: [[SIZE05:@.+]] = private {{.*}}constant [1 x i64] zeroinitializer
55-
// CK27: [[MTYPE05:@.+]] = private {{.*}}constant [1 x i64] [i64 32]
55+
// CK27: [[MTYPE05:@.+]] = private {{.*}}constant [1 x i64] [i64 288]
5656

5757
// CK27-LABEL: @.__omp_offloading_{{.*}}zero_size_section_and_private_maps{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
5858
// CK27-LABEL: @.__omp_offloading_{{.*}}zero_size_section_and_private_maps{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0

0 commit comments

Comments
 (0)