|
25 | 25 | #include "flang/Lower/StatementContext.h"
|
26 | 26 | #include "flang/Lower/Support/Utils.h"
|
27 | 27 | #include "flang/Lower/SymbolMap.h"
|
| 28 | +#include "flang/Optimizer/Builder/CUFCommon.h" |
28 | 29 | #include "flang/Optimizer/Builder/Character.h"
|
29 | 30 | #include "flang/Optimizer/Builder/FIRBuilder.h"
|
30 | 31 | #include "flang/Optimizer/Builder/HLFIRTools.h"
|
@@ -735,8 +736,10 @@ static mlir::Value createNewLocal(Fortran::lower::AbstractConverter &converter,
|
735 | 736 | if (dataAttr.getValue() == cuf::DataAttribute::Shared)
|
736 | 737 | return builder.create<cuf::SharedMemoryOp>(loc, ty, nm, symNm, lenParams,
|
737 | 738 | indices);
|
738 |
| - return builder.create<cuf::AllocOp>(loc, ty, nm, symNm, dataAttr, lenParams, |
739 |
| - indices); |
| 739 | + |
| 740 | + if (!cuf::isCUDADeviceContext(builder.getRegion())) |
| 741 | + return builder.create<cuf::AllocOp>(loc, ty, nm, symNm, dataAttr, |
| 742 | + lenParams, indices); |
740 | 743 | }
|
741 | 744 |
|
742 | 745 | // Let the builder do all the heavy lifting.
|
@@ -1072,8 +1075,9 @@ static void instantiateLocal(Fortran::lower::AbstractConverter &converter,
|
1072 | 1075 | if (mustBeDefaultInitializedAtRuntime(var))
|
1073 | 1076 | Fortran::lower::defaultInitializeAtRuntime(converter, var.getSymbol(),
|
1074 | 1077 | symMap);
|
1075 |
| - if (Fortran::semantics::NeedCUDAAlloc(var.getSymbol())) { |
1076 |
| - auto *builder = &converter.getFirOpBuilder(); |
| 1078 | + auto *builder = &converter.getFirOpBuilder(); |
| 1079 | + if (Fortran::semantics::NeedCUDAAlloc(var.getSymbol()) && |
| 1080 | + !cuf::isCUDADeviceContext(builder->getRegion())) { |
1077 | 1081 | cuf::DataAttributeAttr dataAttr =
|
1078 | 1082 | Fortran::lower::translateSymbolCUFDataAttribute(builder->getContext(),
|
1079 | 1083 | var.getSymbol());
|
|
0 commit comments