Skip to content

Commit 9176612

Browse files
committed
Fix triple for macos and wasm32 data layout
Signed-off-by: Roberto Raggi <[email protected]>
1 parent f7b4e4e commit 9176612

File tree

3 files changed

+81
-31
lines changed

3 files changed

+81
-31
lines changed

src/mlir/cxx/mlir/codegen_units.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ auto Codegen::UnitVisitor::operator()(TranslationUnitAST* ast) -> UnitResult {
108108
module->setAttr("cxx.triple", mlir::StringAttr::get(module->getContext(),
109109
memoryLayout->triple()));
110110

111+
module->setAttr(
112+
"cxx.data-layout",
113+
mlir::StringAttr::get(module->getContext(),
114+
llvmDataLayout.getStringRepresentation()));
115+
111116
std::swap(gen.module_, module);
112117

113118
ForEachExternalDefinition forEachExternalDefinition;

src/mlir/cxx/mlir/cxx_dialect_conversions.cc

Lines changed: 74 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ class CallOpLowering : public OpConversionPattern<cxx::CallOp> {
147147

148148
class AllocaOpLowering : public OpConversionPattern<cxx::AllocaOp> {
149149
public:
150-
using OpConversionPattern::OpConversionPattern;
150+
AllocaOpLowering(const TypeConverter &typeConverter,
151+
const DataLayout &dataLayout, MLIRContext *context,
152+
PatternBenefit benefit = 1)
153+
: OpConversionPattern<cxx::AllocaOp>(typeConverter, context, benefit),
154+
dataLayout_(dataLayout) {}
151155

152156
auto matchAndRewrite(cxx::AllocaOp op, OpAdaptor adaptor,
153157
ConversionPatternRewriter &rewriter) const
@@ -170,17 +174,25 @@ class AllocaOpLowering : public OpConversionPattern<cxx::AllocaOp> {
170174
}
171175

172176
auto size = rewriter.create<LLVM::ConstantOp>(
173-
op.getLoc(), rewriter.getI64Type(), rewriter.getIndexAttr(1));
177+
op.getLoc(), typeConverter->convertType(rewriter.getIndexType()),
178+
rewriter.getIntegerAttr(rewriter.getIndexType(), 1));
174179

175180
auto x = rewriter.replaceOpWithNewOp<LLVM::AllocaOp>(op, resultType,
176181
elementType, size);
177182
return success();
178183
}
184+
185+
private:
186+
const DataLayout &dataLayout_;
179187
};
180188

181189
class LoadOpLowering : public OpConversionPattern<cxx::LoadOp> {
182190
public:
183-
using OpConversionPattern::OpConversionPattern;
191+
LoadOpLowering(const TypeConverter &typeConverter,
192+
const DataLayout &dataLayout, MLIRContext *context,
193+
PatternBenefit benefit = 1)
194+
: OpConversionPattern<cxx::LoadOp>(typeConverter, context, benefit),
195+
dataLayout_(dataLayout) {}
184196

185197
auto matchAndRewrite(cxx::LoadOp op, OpAdaptor adaptor,
186198
ConversionPatternRewriter &rewriter) const
@@ -195,11 +207,18 @@ class LoadOpLowering : public OpConversionPattern<cxx::LoadOp> {
195207

196208
return success();
197209
}
210+
211+
private:
212+
const DataLayout &dataLayout_;
198213
};
199214

200215
class StoreOpLowering : public OpConversionPattern<cxx::StoreOp> {
201216
public:
202-
using OpConversionPattern::OpConversionPattern;
217+
StoreOpLowering(const TypeConverter &typeConverter,
218+
const DataLayout &dataLayout, MLIRContext *context,
219+
PatternBenefit benefit = 1)
220+
: OpConversionPattern<cxx::StoreOp>(typeConverter, context, benefit),
221+
dataLayout_(dataLayout) {}
203222

204223
auto matchAndRewrite(cxx::StoreOp op, OpAdaptor adaptor,
205224
ConversionPatternRewriter &rewriter) const
@@ -218,34 +237,18 @@ class StoreOpLowering : public OpConversionPattern<cxx::StoreOp> {
218237

219238
return success();
220239
}
221-
};
222-
223-
class BoolConstantOpLowering : public OpConversionPattern<cxx::BoolConstantOp> {
224-
public:
225-
using OpConversionPattern::OpConversionPattern;
226240

227-
auto matchAndRewrite(cxx::BoolConstantOp op, OpAdaptor adaptor,
228-
ConversionPatternRewriter &rewriter) const
229-
-> LogicalResult override {
230-
auto typeConverter = getTypeConverter();
231-
auto context = getContext();
232-
233-
auto resultType = typeConverter->convertType(op.getType());
234-
if (!resultType) {
235-
return rewriter.notifyMatchFailure(
236-
op, "failed to convert boolean constant type");
237-
}
238-
239-
rewriter.replaceOpWithNewOp<LLVM::ConstantOp>(op, resultType,
240-
adaptor.getValue());
241-
242-
return success();
243-
}
241+
private:
242+
const DataLayout &dataLayout_;
244243
};
245244

246245
class SubscriptOpLowering : public OpConversionPattern<cxx::SubscriptOp> {
247246
public:
248-
using OpConversionPattern::OpConversionPattern;
247+
SubscriptOpLowering(const TypeConverter &typeConverter,
248+
const DataLayout &dataLayout, MLIRContext *context,
249+
PatternBenefit benefit = 1)
250+
: OpConversionPattern<cxx::SubscriptOp>(typeConverter, context, benefit),
251+
dataLayout_(dataLayout) {}
249252

250253
auto matchAndRewrite(cxx::SubscriptOp op, OpAdaptor adaptor,
251254
ConversionPatternRewriter &rewriter) const
@@ -266,8 +269,9 @@ class SubscriptOpLowering : public OpConversionPattern<cxx::SubscriptOp> {
266269
op, "expected base type of subscript to be an array type");
267270
}
268271

269-
SmallVector<Value> indices;
272+
SmallVector<LLVM::GEPArg> indices;
270273

274+
indices.push_back(0);
271275
indices.push_back(adaptor.getIndex());
272276

273277
auto resultType = LLVM::LLVMPointerType::get(context);
@@ -278,6 +282,32 @@ class SubscriptOpLowering : public OpConversionPattern<cxx::SubscriptOp> {
278282

279283
return success();
280284
}
285+
286+
private:
287+
const DataLayout &dataLayout_;
288+
};
289+
290+
class BoolConstantOpLowering : public OpConversionPattern<cxx::BoolConstantOp> {
291+
public:
292+
using OpConversionPattern::OpConversionPattern;
293+
294+
auto matchAndRewrite(cxx::BoolConstantOp op, OpAdaptor adaptor,
295+
ConversionPatternRewriter &rewriter) const
296+
-> LogicalResult override {
297+
auto typeConverter = getTypeConverter();
298+
auto context = getContext();
299+
300+
auto resultType = typeConverter->convertType(op.getType());
301+
if (!resultType) {
302+
return rewriter.notifyMatchFailure(
303+
op, "failed to convert boolean constant type");
304+
}
305+
306+
rewriter.replaceOpWithNewOp<LLVM::ConstantOp>(op, resultType,
307+
adaptor.getValue());
308+
309+
return success();
310+
}
281311
};
282312

283313
class IntConstantOpLowering : public OpConversionPattern<cxx::IntConstantOp> {
@@ -1189,8 +1219,10 @@ void CxxToLLVMLoweringPass::runOnOperation() {
11891219
typeConverter, context);
11901220

11911221
// memory operations
1222+
DataLayout dataLayout{module};
1223+
11921224
patterns.insert<AllocaOpLowering, LoadOpLowering, StoreOpLowering,
1193-
SubscriptOpLowering>(typeConverter, context);
1225+
SubscriptOpLowering>(typeConverter, dataLayout, context);
11941226

11951227
// cast operations
11961228
patterns
@@ -1236,7 +1268,20 @@ void CxxToLLVMLoweringPass::runOnOperation() {
12361268

12371269
if (failed(applyPartialConversion(module, target, std::move(patterns)))) {
12381270
signalPassFailure();
1271+
return;
12391272
}
1273+
1274+
auto targetTriple =
1275+
mlir::cast<mlir::StringAttr>(module->getAttr("cxx.triple"));
1276+
1277+
module->setAttr(LLVM::LLVMDialect::getTargetTripleAttrName(),
1278+
mlir::StringAttr::get(context, targetTriple.str()));
1279+
1280+
auto dataLayoutDescr =
1281+
mlir::cast<mlir::StringAttr>(module->getAttr("cxx.data-layout"));
1282+
1283+
module->setAttr(LLVM::LLVMDialect::getDataLayoutAttrName(),
1284+
mlir::StringAttr::get(context, dataLayoutDescr.str()));
12401285
}
12411286

12421287
} // namespace mlir

src/parser/cxx/macos_toolchain.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ MacOSToolchain::MacOSToolchain(Preprocessor* preprocessor, std::string arch)
4242

4343
if (arch_ == "aarch64") {
4444
memoryLayout()->setSizeOfLongDouble(8);
45-
memoryLayout()->setTriple("aarch64-darwin");
45+
memoryLayout()->setTriple("arm64-apple-macosx15.0.0");
4646
} else if (arch_ == "x86_64") {
4747
memoryLayout()->setSizeOfLongDouble(16);
48-
memoryLayout()->setTriple("x86_64-apple-darwin24.6.0");
48+
memoryLayout()->setTriple("x86_64-apple-macosx15.0.0");
4949
} else {
5050
cxx_runtime_error(std::format("Unsupported architecture: {}", arch_));
5151
}

0 commit comments

Comments
 (0)