Skip to content

Commit fba2930

Browse files
author
Jenkins
committed
merge main into amd-staging
Change-Id: Idc3a25a959a6d0200bdbf7f61cd49b137581e45f
2 parents 0f7f245 + c1ecc0d commit fba2930

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1938
-406
lines changed

clang/include/clang/Serialization/ASTWriter.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -997,13 +997,15 @@ class CXX20ModulesGenerator : public PCHGenerator {
997997
virtual Module *getEmittingModule(ASTContext &Ctx) override;
998998

999999
CXX20ModulesGenerator(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
1000-
StringRef OutputFile, bool GeneratingReducedBMI);
1000+
StringRef OutputFile, bool GeneratingReducedBMI,
1001+
bool AllowASTWithErrors);
10011002

10021003
public:
10031004
CXX20ModulesGenerator(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
1004-
StringRef OutputFile)
1005+
StringRef OutputFile, bool AllowASTWithErrors = false)
10051006
: CXX20ModulesGenerator(PP, ModuleCache, OutputFile,
1006-
/*GeneratingReducedBMI=*/false) {}
1007+
/*GeneratingReducedBMI=*/false,
1008+
AllowASTWithErrors) {}
10071009

10081010
void HandleTranslationUnit(ASTContext &Ctx) override;
10091011
};
@@ -1013,9 +1015,10 @@ class ReducedBMIGenerator : public CXX20ModulesGenerator {
10131015

10141016
public:
10151017
ReducedBMIGenerator(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
1016-
StringRef OutputFile)
1018+
StringRef OutputFile, bool AllowASTWithErrors = false)
10171019
: CXX20ModulesGenerator(PP, ModuleCache, OutputFile,
1018-
/*GeneratingReducedBMI=*/true) {}
1020+
/*GeneratingReducedBMI=*/true,
1021+
AllowASTWithErrors) {}
10191022
};
10201023

10211024
/// If we can elide the definition of \param D in reduced BMI.

clang/lib/Frontend/FrontendActions.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,12 +279,14 @@ GenerateModuleInterfaceAction::CreateASTConsumer(CompilerInstance &CI,
279279
!CI.getFrontendOpts().ModuleOutputPath.empty()) {
280280
Consumers.push_back(std::make_unique<ReducedBMIGenerator>(
281281
CI.getPreprocessor(), CI.getModuleCache(),
282-
CI.getFrontendOpts().ModuleOutputPath));
282+
CI.getFrontendOpts().ModuleOutputPath,
283+
+CI.getFrontendOpts().AllowPCMWithCompilerErrors));
283284
}
284285

285286
Consumers.push_back(std::make_unique<CXX20ModulesGenerator>(
286287
CI.getPreprocessor(), CI.getModuleCache(),
287-
CI.getFrontendOpts().OutputFile));
288+
CI.getFrontendOpts().OutputFile,
289+
+CI.getFrontendOpts().AllowPCMWithCompilerErrors));
288290

289291
return std::make_unique<MultiplexConsumer>(std::move(Consumers));
290292
}

clang/lib/Serialization/GeneratePCH.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,13 @@ void PCHGenerator::anchor() {}
102102
CXX20ModulesGenerator::CXX20ModulesGenerator(Preprocessor &PP,
103103
InMemoryModuleCache &ModuleCache,
104104
StringRef OutputFile,
105-
bool GeneratingReducedBMI)
105+
bool GeneratingReducedBMI,
106+
bool AllowASTWithErrors)
106107
: PCHGenerator(
107108
PP, ModuleCache, OutputFile, llvm::StringRef(),
108109
std::make_shared<PCHBuffer>(),
109110
/*Extensions=*/ArrayRef<std::shared_ptr<ModuleFileExtension>>(),
110-
/*AllowASTWithErrors*/ false, /*IncludeTimestamps=*/false,
111+
AllowASTWithErrors, /*IncludeTimestamps=*/false,
111112
/*BuildingImplicitModule=*/false, /*ShouldCacheASTInMemory=*/false,
112113
GeneratingReducedBMI) {}
113114

clang/test/Driver/print-supported-extensions-riscv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
// CHECK-NEXT: svukte 0.3 'Svukte' (Address-Independent Latency of User-Mode Faults to Supervisor Addresses)
191191
// CHECK-NEXT: xqcia 0.2 'Xqcia' (Qualcomm uC Arithmetic Extension)
192192
// CHECK-NEXT: xqciac 0.2 'Xqciac' (Qualcomm uC Load-Store Address Calculation Extension)
193+
// CHECK-NEXT: xqcicli 0.2 'Xqcicli' (Qualcomm uC Conditional Load Immediate Extension)
193194
// CHECK-NEXT: xqcics 0.2 'Xqcics' (Qualcomm uC Conditional Select Extension)
194195
// CHECK-NEXT: xqcicsr 0.2 'Xqcicsr' (Qualcomm uC CSR Extension)
195196
// CHECK-NEXT: xqcilsm 0.2 'Xqcilsm' (Qualcomm uC Load Store Multiple Extension)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// RUN: rm -rf %t
2+
// RUN: split-file %s %t
3+
// RUN: cd %t
4+
5+
// RUN: %clang_cc1 -std=c++23 m.cppm -emit-module-interface -o m.pcm -fallow-pcm-with-compiler-errors -verify
6+
// RUN: %clang_cc1 -std=c++23 main.cpp -fmodule-file=m=m.pcm -verify -fallow-pcm-with-compiler-errors -verify
7+
8+
// RUN: %clang_cc1 -std=c++23 m.cppm -fmodules-reduced-bmi -emit-module-interface -o m.pcm -fallow-pcm-with-compiler-errors -verify
9+
// RUN: %clang_cc1 -std=c++23 main.cpp -fmodule-file=m=m.pcm -verify -fallow-pcm-with-compiler-errors -verify
10+
11+
//--- m.cppm
12+
export module m;
13+
14+
export int f() {
15+
return 0;
16+
}
17+
18+
export struct Foo {
19+
__Int bar; // expected-error {{unknown type name '__Int'}}
20+
};
21+
22+
//--- main.cpp
23+
// expected-no-diagnostics
24+
import m; // ok
25+
26+
static_assert(__is_same(decltype(f), int())); // ok

flang/include/flang/Optimizer/Dialect/CUF/CUFOps.td

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,17 @@ def cuf_DeallocateOp : cuf_Op<"deallocate",
140140
let hasVerifier = 1;
141141
}
142142

143+
def cuf_SyncDescriptorOp : cuf_Op<"sync_descriptor", []> {
144+
let summary =
145+
"Synchronize the host and device descriptor of a Fortran pointer";
146+
147+
let arguments = (ins SymbolRefAttr:$globalName);
148+
149+
let assemblyFormat = [{
150+
$globalName attr-dict
151+
}];
152+
}
153+
143154
def cuf_DataTransferOp : cuf_Op<"data_transfer", []> {
144155
let summary = "Represent a data transfer between host and device memory";
145156

flang/include/flang/Runtime/CUDA/descriptor.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ void *RTDECL(CUFGetDeviceAddress)(
3333
void RTDECL(CUFDescriptorSync)(Descriptor *dst, const Descriptor *src,
3434
const char *sourceFile = nullptr, int sourceLine = 0);
3535

36+
/// Get the device address of registered with the \p hostPtr and sync them.
37+
void RTDECL(CUFSyncGlobalDescriptor)(
38+
void *hostPtr, const char *sourceFile = nullptr, int sourceLine = 0);
39+
3640
} // extern "C"
3741

3842
} // namespace Fortran::runtime::cuda

flang/lib/Lower/Allocatable.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
#include "flang/Lower/PFTBuilder.h"
2323
#include "flang/Lower/Runtime.h"
2424
#include "flang/Lower/StatementContext.h"
25+
#include "flang/Optimizer/Builder/CUFCommon.h"
2526
#include "flang/Optimizer/Builder/FIRBuilder.h"
2627
#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
2728
#include "flang/Optimizer/Builder/Todo.h"
2829
#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
2930
#include "flang/Optimizer/Dialect/FIROps.h"
3031
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
32+
#include "flang/Optimizer/HLFIR/HLFIROps.h"
3133
#include "flang/Optimizer/Support/FatalError.h"
3234
#include "flang/Optimizer/Support/InternalNames.h"
3335
#include "flang/Parser/parse-tree.h"
@@ -1086,6 +1088,22 @@ bool Fortran::lower::isArraySectionWithoutVectorSubscript(
10861088
!Fortran::evaluate::HasVectorSubscript(expr);
10871089
}
10881090

1091+
static void genCUFPointerSync(const mlir::Value box,
1092+
fir::FirOpBuilder &builder) {
1093+
if (auto declareOp = box.getDefiningOp<hlfir::DeclareOp>()) {
1094+
if (auto addrOfOp = declareOp.getMemref().getDefiningOp<fir::AddrOfOp>()) {
1095+
auto mod = addrOfOp->getParentOfType<mlir::ModuleOp>();
1096+
if (auto globalOp =
1097+
mod.lookupSymbol<fir::GlobalOp>(addrOfOp.getSymbol())) {
1098+
if (cuf::isRegisteredDeviceGlobal(globalOp)) {
1099+
builder.create<cuf::SyncDescriptorOp>(box.getLoc(),
1100+
addrOfOp.getSymbol());
1101+
}
1102+
}
1103+
}
1104+
}
1105+
}
1106+
10891107
void Fortran::lower::associateMutableBox(
10901108
Fortran::lower::AbstractConverter &converter, mlir::Location loc,
10911109
const fir::MutableBoxValue &box, const Fortran::lower::SomeExpr &source,
@@ -1098,6 +1116,7 @@ void Fortran::lower::associateMutableBox(
10981116
if (converter.getLoweringOptions().getLowerToHighLevelFIR()) {
10991117
fir::ExtendedValue rhs = converter.genExprAddr(loc, source, stmtCtx);
11001118
fir::factory::associateMutableBox(builder, loc, box, rhs, lbounds);
1119+
genCUFPointerSync(box.getAddr(), builder);
11011120
return;
11021121
}
11031122
// The right hand side is not be evaluated into a temp. Array sections can

flang/lib/Optimizer/Builder/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ add_flang_library(FIRBuilder
55
BoxValue.cpp
66
Character.cpp
77
Complex.cpp
8+
CUFCommon.cpp
89
DoLoopHelper.cpp
910
FIRBuilder.cpp
1011
HLFIRTools.cpp

flang/lib/Optimizer/Transforms/CUFCommon.cpp renamed to flang/lib/Optimizer/Builder/CUFCommon.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "flang/Optimizer/Transforms/CUFCommon.h"
9+
#include "flang/Optimizer/Builder/CUFCommon.h"
1010
#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
1111
#include "mlir/Dialect/Func/IR/FuncOps.h"
1212
#include "mlir/Dialect/LLVMIR/NVVMDialect.h"

flang/lib/Optimizer/Transforms/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ add_flang_library(FIRTransforms
99
CompilerGeneratedNames.cpp
1010
ConstantArgumentGlobalisation.cpp
1111
ControlFlowConverter.cpp
12-
CUFCommon.cpp
1312
CUFAddConstructor.cpp
1413
CUFDeviceGlobal.cpp
1514
CUFOpConversion.cpp

flang/lib/Optimizer/Transforms/CUFAddConstructor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "flang/Optimizer/Builder/BoxValue.h"
10+
#include "flang/Optimizer/Builder/CUFCommon.h"
1011
#include "flang/Optimizer/Builder/FIRBuilder.h"
1112
#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
1213
#include "flang/Optimizer/Builder/Todo.h"
@@ -19,7 +20,6 @@
1920
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
2021
#include "flang/Optimizer/Dialect/FIRType.h"
2122
#include "flang/Optimizer/Support/DataLayout.h"
22-
#include "flang/Optimizer/Transforms/CUFCommon.h"
2323
#include "flang/Runtime/CUDA/registration.h"
2424
#include "flang/Runtime/entry-names.h"
2525
#include "mlir/Dialect/GPU/IR/GPUDialect.h"

flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "flang/Common/Fortran.h"
10+
#include "flang/Optimizer/Builder/CUFCommon.h"
1011
#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
1112
#include "flang/Optimizer/Dialect/FIRDialect.h"
1213
#include "flang/Optimizer/Dialect/FIROps.h"
1314
#include "flang/Optimizer/HLFIR/HLFIROps.h"
1415
#include "flang/Optimizer/Support/InternalNames.h"
15-
#include "flang/Optimizer/Transforms/CUFCommon.h"
1616
#include "flang/Runtime/CUDA/common.h"
1717
#include "flang/Runtime/allocatable.h"
1818
#include "mlir/Dialect/LLVMIR/NVVMDialect.h"

flang/lib/Optimizer/Transforms/CUFOpConversion.cpp

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88

99
#include "flang/Optimizer/Transforms/CUFOpConversion.h"
1010
#include "flang/Common/Fortran.h"
11+
#include "flang/Optimizer/Builder/CUFCommon.h"
1112
#include "flang/Optimizer/Builder/Runtime/RTBuilder.h"
1213
#include "flang/Optimizer/CodeGen/TypeConverter.h"
1314
#include "flang/Optimizer/Dialect/CUF/CUFOps.h"
1415
#include "flang/Optimizer/Dialect/FIRDialect.h"
1516
#include "flang/Optimizer/Dialect/FIROps.h"
1617
#include "flang/Optimizer/HLFIR/HLFIROps.h"
1718
#include "flang/Optimizer/Support/DataLayout.h"
18-
#include "flang/Optimizer/Transforms/CUFCommon.h"
1919
#include "flang/Runtime/CUDA/allocatable.h"
2020
#include "flang/Runtime/CUDA/common.h"
2121
#include "flang/Runtime/CUDA/descriptor.h"
@@ -788,6 +788,38 @@ struct CUFLaunchOpConversion
788788
const mlir::SymbolTable &symTab;
789789
};
790790

791+
struct CUFSyncDescriptorOpConversion
792+
: public mlir::OpRewritePattern<cuf::SyncDescriptorOp> {
793+
using OpRewritePattern::OpRewritePattern;
794+
795+
mlir::LogicalResult
796+
matchAndRewrite(cuf::SyncDescriptorOp op,
797+
mlir::PatternRewriter &rewriter) const override {
798+
auto mod = op->getParentOfType<mlir::ModuleOp>();
799+
fir::FirOpBuilder builder(rewriter, mod);
800+
mlir::Location loc = op.getLoc();
801+
802+
auto globalOp = mod.lookupSymbol<fir::GlobalOp>(op.getGlobalName());
803+
if (!globalOp)
804+
return mlir::failure();
805+
806+
auto hostAddr = builder.create<fir::AddrOfOp>(
807+
loc, fir::ReferenceType::get(globalOp.getType()), op.getGlobalName());
808+
mlir::func::FuncOp callee =
809+
fir::runtime::getRuntimeFunc<mkRTKey(CUFSyncGlobalDescriptor)>(loc,
810+
builder);
811+
auto fTy = callee.getFunctionType();
812+
mlir::Value sourceFile = fir::factory::locationToFilename(builder, loc);
813+
mlir::Value sourceLine =
814+
fir::factory::locationToLineNo(builder, loc, fTy.getInput(2));
815+
llvm::SmallVector<mlir::Value> args{fir::runtime::createArguments(
816+
builder, loc, fTy, hostAddr, sourceFile, sourceLine)};
817+
builder.create<fir::CallOp>(loc, callee, args);
818+
op.erase();
819+
return mlir::success();
820+
}
821+
};
822+
791823
class CUFOpConversion : public fir::impl::CUFOpConversionBase<CUFOpConversion> {
792824
public:
793825
void runOnOperation() override {
@@ -848,7 +880,8 @@ void cuf::populateCUFToFIRConversionPatterns(
848880
const mlir::SymbolTable &symtab, mlir::RewritePatternSet &patterns) {
849881
patterns.insert<CUFAllocOpConversion>(patterns.getContext(), &dl, &converter);
850882
patterns.insert<CUFAllocateOpConversion, CUFDeallocateOpConversion,
851-
CUFFreeOpConversion>(patterns.getContext());
883+
CUFFreeOpConversion, CUFSyncDescriptorOpConversion>(
884+
patterns.getContext());
852885
patterns.insert<CUFDataTransferOpConversion>(patterns.getContext(), symtab,
853886
&dl, &converter);
854887
patterns.insert<CUFLaunchOpConversion>(patterns.getContext(), symtab);

flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424

2525
#include "flang/Common/Fortran.h"
2626
#include "flang/Optimizer/Builder/BoxValue.h"
27+
#include "flang/Optimizer/Builder/CUFCommon.h"
2728
#include "flang/Optimizer/Builder/FIRBuilder.h"
2829
#include "flang/Optimizer/Builder/LowLevelIntrinsics.h"
2930
#include "flang/Optimizer/Builder/Todo.h"
3031
#include "flang/Optimizer/Dialect/FIROps.h"
3132
#include "flang/Optimizer/Dialect/FIRType.h"
3233
#include "flang/Optimizer/Dialect/Support/FIRContext.h"
3334
#include "flang/Optimizer/HLFIR/HLFIRDialect.h"
34-
#include "flang/Optimizer/Transforms/CUFCommon.h"
3535
#include "flang/Optimizer/Transforms/Passes.h"
3636
#include "flang/Optimizer/Transforms/Utils.h"
3737
#include "flang/Runtime/entry-names.h"

flang/runtime/CUDA/descriptor.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ void RTDEF(CUFDescriptorSync)(Descriptor *dst, const Descriptor *src,
4646
(void *)dst, (const void *)src, count, cudaMemcpyHostToDevice));
4747
}
4848

49+
void RTDEF(CUFSyncGlobalDescriptor)(
50+
void *hostPtr, const char *sourceFile, int sourceLine) {
51+
void *devAddr{RTNAME(CUFGetDeviceAddress)(hostPtr, sourceFile, sourceLine)};
52+
RTNAME(CUFDescriptorSync)
53+
((Descriptor *)devAddr, (Descriptor *)hostPtr, sourceFile, sourceLine);
54+
}
55+
4956
RT_EXT_API_GROUP_END
5057
}
5158
} // namespace Fortran::runtime::cuda
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// RUN: fir-opt --cuf-convert %s | FileCheck %s
2+
3+
module attributes {dlti.dl_spec = #dlti.dl_spec<i16 = dense<16> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, f80 = dense<128> : vector<2xi64>, i1 = dense<8> : vector<2xi64>, !llvm.ptr = dense<64> : vector<4xi64>, i64 = dense<64> : vector<2xi64>, i128 = dense<128> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, !llvm.ptr<270> = dense<32> : vector<4xi64>, f64 = dense<64> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, !llvm.ptr<271> = dense<32> : vector<4xi64>, !llvm.ptr<272> = dense<64> : vector<4xi64>, "dlti.endianness" = "little", "dlti.stack_alignment" = 128 : i64>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 20.0.0 ([email protected]:clementval/llvm-project.git f37e52237791f58438790c77edeb8de08f692987)", llvm.target_triple = "x86_64-unknown-linux-gnu"} {
4+
fir.global @_QMdevptrEdev_ptr {data_attr = #cuf.cuda<device>} : !fir.box<!fir.ptr<!fir.array<?xf32>>> {
5+
%0 = fir.zero_bits !fir.ptr<!fir.array<?xf32>>
6+
%c0 = arith.constant 0 : index
7+
%1 = fir.shape %c0 : (index) -> !fir.shape<1>
8+
%2 = fir.embox %0(%1) {allocator_idx = 2 : i32} : (!fir.ptr<!fir.array<?xf32>>, !fir.shape<1>) -> !fir.box<!fir.ptr<!fir.array<?xf32>>>
9+
fir.has_value %2 : !fir.box<!fir.ptr<!fir.array<?xf32>>>
10+
}
11+
func.func @_QQmain() {
12+
cuf.sync_descriptor @_QMdevptrEdev_ptr
13+
return
14+
}
15+
}
16+
17+
// CHECK-LABEL: func.func @_QQmain()
18+
// CHECK: %[[HOST_ADDR:.*]] = fir.address_of(@_QMdevptrEdev_ptr) : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>
19+
// CHECK: %[[HOST_ADDR_PTR:.*]] = fir.convert %[[HOST_ADDR]] : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>) -> !fir.llvm_ptr<i8>
20+
// CHECK: fir.call @_FortranACUFSyncGlobalDescriptor(%[[HOST_ADDR_PTR]], %{{.*}}, %{{.*}}) : (!fir.llvm_ptr<i8>, !fir.ref<i8>, i32)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s
2+
3+
module devptr
4+
real, device, pointer, dimension(:) :: dev_ptr
5+
end module
6+
7+
use devptr
8+
real, device, target, dimension(4) :: a_dev
9+
a_dev = 42.0
10+
dev_ptr => a_dev
11+
end
12+
13+
! CHECK: fir.global @_QMdevptrEdev_ptr {data_attr = #cuf.cuda<device>} : !fir.box<!fir.ptr<!fir.array<?xf32>>>
14+
! CHECK-LABEL: func.func @_QQmain()
15+
! CHECK: fir.embox
16+
! CHECK: fir.store
17+
! CHECK: cuf.sync_descriptor @_QMdevptrEdev_ptr

libc/include/__llvm-libc-common.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@
5252
#undef __restrict
5353
#define __restrict restrict // C99 and above support the restrict keyword.
5454

55+
#undef _Noreturn
56+
#if __STDC_VERSION__ >= 201112L
57+
// In C11 and later, _Noreturn is a keyword.
58+
#elif defined(__GNUC__)
59+
// GNU-compatible compilers have an equivalent attribute.
60+
#define _Noreturn __attribute__((__noreturn__))
61+
#else
62+
#define _Noreturn
63+
#endif
64+
5565
#undef __NOEXCEPT
5666
#ifdef __GNUC__
5767
#define __NOEXCEPT __attribute__((__nothrow__))

lld/wasm/Config.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,9 @@ struct Config {
126126
llvm::SmallVector<uint8_t, 0> buildIdVector;
127127
};
128128

129-
struct ConfigWrapper {
130-
Config c;
131-
Config *operator->() { return &c; }
132-
};
133-
134-
// The only instance of Configuration struct.
135-
extern ConfigWrapper config;
136-
137129
// The Ctx object hold all other (non-configuration) global state.
138130
struct Ctx {
139-
Config &arg;
131+
Config arg;
140132

141133
llvm::SmallVector<ObjFile *, 0> objectFiles;
142134
llvm::SmallVector<StubFile *, 0> stubFiles;

0 commit comments

Comments
 (0)