|
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