diff --git a/clang/lib/CIR/CodeGen/CIRGenerator.cpp b/clang/lib/CIR/CodeGen/CIRGenerator.cpp index 0266e893909a..a4c6bd16df52 100644 --- a/clang/lib/CIR/CodeGen/CIRGenerator.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenerator.cpp @@ -42,8 +42,6 @@ CIRGenerator::~CIRGenerator() { static void setMLIRDataLayout(mlir::ModuleOp &mod, const llvm::DataLayout &dl) { auto *context = mod.getContext(); - mod->setAttr(mlir::LLVM::LLVMDialect::getDataLayoutAttrName(), - mlir::StringAttr::get(context, dl.getStringRepresentation())); mlir::DataLayoutSpecInterface dlSpec = mlir::translateDataLayout(dl, context); mod->setAttr(mlir::DLTIDialect::kDataLayoutAttrName, dlSpec); } diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.cpp b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.cpp index f6c75b39e516..3963a161bbf4 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.cpp +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.cpp @@ -89,12 +89,10 @@ createTargetLoweringInfo(LowerModule &LM) { } LowerModule::LowerModule(clang::LangOptions opts, mlir::ModuleOp &module, - mlir::StringAttr DL, std::unique_ptr target, mlir::PatternRewriter &rewriter) : context(module, opts), module(module), Target(std::move(target)), - ABI(createCXXABI(*this)), types(*this, DL.getValue()), - rewriter(rewriter) { + ABI(createCXXABI(*this)), types(*this), rewriter(rewriter) { context.initBuiltinTypes(*Target); } @@ -228,13 +226,6 @@ llvm::LogicalResult LowerModule::rewriteFunctionCall(CallOp callOp, // TODO: not to create it every time std::unique_ptr createLowerModule(mlir::ModuleOp module, mlir::PatternRewriter &rewriter) { - assert(module->getAttr(mlir::LLVM::LLVMDialect::getDataLayoutAttrName()) && - "Missing data layout attribute"); - - // Fetch the LLVM data layout string. - auto dataLayoutStr = mlir::cast( - module->getAttr(mlir::LLVM::LLVMDialect::getDataLayoutAttrName())); - // Fetch target information. llvm::Triple triple(mlir::cast( module->getAttr(cir::CIRDialect::getTripleAttrName())) @@ -249,8 +240,8 @@ createLowerModule(mlir::ModuleOp module, mlir::PatternRewriter &rewriter) { cir_cconv_assert(!cir::MissingFeatures::langOpts()); clang::LangOptions langOpts; - return std::make_unique(langOpts, module, dataLayoutStr, - std::move(targetInfo), rewriter); + return std::make_unique(langOpts, module, std::move(targetInfo), + rewriter); } } // namespace cir diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.h b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.h index 16f5a099cf63..eb206f2750a7 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.h +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.h @@ -43,7 +43,7 @@ class LowerModule { public: LowerModule(clang::LangOptions opts, mlir::ModuleOp &module, - mlir::StringAttr DL, std::unique_ptr target, + std::unique_ptr target, mlir::PatternRewriter &rewriter); ~LowerModule() = default; diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.cpp b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.cpp index f4b9c73cf43f..0c2233ef84c9 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.cpp +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.cpp @@ -33,7 +33,7 @@ unsigned LowerTypes::clangCallConvToLLVMCallConv(clang::CallingConv CC) { } } -LowerTypes::LowerTypes(LowerModule &LM, llvm::StringRef DLString) +LowerTypes::LowerTypes(LowerModule &LM) : LM(LM), context(LM.getContext()), Target(LM.getTarget()), CXXABI(LM.getCXXABI()), TheABIInfo(LM.getTargetLoweringInfo().getABIInfo()), diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.h b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.h index 751f95e67efd..a1c23718eadd 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.h +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerTypes.h @@ -52,7 +52,7 @@ class LowerTypes { const ABIInfo &getABIInfo() const { return TheABIInfo; } public: - LowerTypes(LowerModule &LM, llvm::StringRef DLString); + LowerTypes(LowerModule &LM); ~LowerTypes() = default; const cir::CIRDataLayout &getDataLayout() const { return DL; } diff --git a/clang/test/CIR/CodeGen/dlti.c b/clang/test/CIR/CodeGen/dlti.c index 2267b992f42e..a613b9e49cc7 100644 --- a/clang/test/CIR/CodeGen/dlti.c +++ b/clang/test/CIR/CodeGen/dlti.c @@ -24,5 +24,3 @@ void foo() {} // CHECK-DAG: "dlti.stack_alignment" = 128 : i64 // CHECK-DAG: "dlti.endianness" = "little" // >, -// CHECK-DAG: 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" - diff --git a/clang/test/CIR/Lowering/address-space.cir b/clang/test/CIR/Lowering/address-space.cir index 733c6ddda940..ac80912bdbd9 100644 --- a/clang/test/CIR/Lowering/address-space.cir +++ b/clang/test/CIR/Lowering/address-space.cir @@ -5,7 +5,7 @@ module attributes { cir.triple = "spirv64-unknown-unknown", - llvm.data_layout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1" + dlti.dl_spec = #dlti.dl_spec : vector<2xi64>, i32 = dense<32> : vector<2xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, i64 = dense<64> : vector<2xi64>, !llvm.ptr = dense<64> : vector<4xi64>, "dlti.endianness" = "little", "dlti.global_memory_space" = 1 : ui64> } { cir.global external addrspace(offload_global) @addrspace1 = #cir.int<1> : !s32i // LLVM: @addrspace1 = addrspace(1) global i32 diff --git a/clang/test/CIR/Lowering/exceptions.cir b/clang/test/CIR/Lowering/exceptions.cir index 1d99e9e2e620..2c40ac96d351 100644 --- a/clang/test/CIR/Lowering/exceptions.cir +++ b/clang/test/CIR/Lowering/exceptions.cir @@ -8,7 +8,7 @@ !u8i = !cir.int !void = !cir.void -module @"try-catch.cpp" attributes {cir.lang = #cir.lang, cir.sob = #cir.signed_overflow_behavior, cir.triple = "x86_64-unknown-linux-gnu", dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>, #dlti.dl_entry<"dlti.endianness", "little">>, 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"} { +module @"try-catch.cpp" attributes {cir.lang = #cir.lang, cir.sob = #cir.signed_overflow_behavior, cir.triple = "x86_64-unknown-linux-gnu", dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>, #dlti.dl_entry<"dlti.endianness", "little">>} { cir.global "private" constant external @_ZTIi : !cir.ptr cir.global "private" constant external @_ZTIPKc : !cir.ptr cir.func private @_Z8divisionii(!s32i, !s32i) -> !cir.double diff --git a/clang/test/CIR/Lowering/hello.cir b/clang/test/CIR/Lowering/hello.cir index 195cbf28fbde..868261307b87 100644 --- a/clang/test/CIR/Lowering/hello.cir +++ b/clang/test/CIR/Lowering/hello.cir @@ -3,7 +3,7 @@ !s32i = !cir.int !s8i = !cir.int -module @"/tmp/test.raw" attributes {cir.lang = #cir.lang, cir.sob = #cir.signed_overflow_behavior, dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i32>>, llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"} { +module @"/tmp/test.raw" attributes {cir.lang = #cir.lang, cir.sob = #cir.signed_overflow_behavior, dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry, dense<32> : vector<4xi64>>, #dlti.dl_entry, dense<64> : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<4xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry : vector<2xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i32>>} { cir.func private @printf(!cir.ptr, ...) -> !s32i cir.global "private" constant internal @".str" = #cir.const_array<"Hello, world!\0A\00" : !cir.array> : !cir.array {alignment = 1 : i64} cir.func @main() -> !s32i { diff --git a/clang/test/CIR/Tools/cir-translate-triple.cir b/clang/test/CIR/Tools/cir-translate-triple.cir index a647df165aba..175e3cc7cded 100644 --- a/clang/test/CIR/Tools/cir-translate-triple.cir +++ b/clang/test/CIR/Tools/cir-translate-triple.cir @@ -3,7 +3,7 @@ module attributes { cir.triple = "x86_64-unknown-linux-gnu", - 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" + dlti.dl_spec = #dlti.dl_spec : vector<2xi64>, f80 = dense<128> : vector<2xi64>, !llvm.ptr<271> = dense<32> : vector<4xi64>, !llvm.ptr<272> = dense<64> : vector<4xi64>, i64 = dense<64> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, !llvm.ptr<270> = dense<32> : vector<4xi64>, f64 = dense<64> : vector<2xi64>, !llvm.ptr = dense<64> : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, "dlti.stack_alignment" = 128 : i64, "dlti.endianness" = "little"> } { cir.func @foo() { cir.return @@ -11,3 +11,4 @@ module attributes { } // LLVM-DAG: target triple = "x86_64-unknown-linux-gnu" +// LLVM-DAG: target datalayout = "{{.*}}"