@@ -4304,18 +4304,24 @@ class CIRAbsOpLowering : public mlir::OpConversionPattern<cir::AbsOp> {
4304
4304
return mlir::success ();
4305
4305
}
4306
4306
};
4307
- class CIRSignBitOpLowering
4308
- : public mlir::OpConversionPattern<mlir::cir::SignBitOp> {
4307
+ class CIRSignBitOpLowering : public mlir ::OpConversionPattern<cir::SignBitOp> {
4309
4308
public:
4310
- using OpConversionPattern<mlir:: cir::SignBitOp>::OpConversionPattern;
4309
+ using OpConversionPattern<cir::SignBitOp>::OpConversionPattern;
4311
4310
4312
4311
mlir::LogicalResult
4313
- matchAndRewrite (mlir:: cir::SignBitOp op, OpAdaptor adaptor,
4312
+ matchAndRewrite (cir::SignBitOp op, OpAdaptor adaptor,
4314
4313
mlir::ConversionPatternRewriter &rewriter) const override {
4315
4314
assert (!::cir::MissingFeatures::isPPC_FP128Ty ());
4316
4315
4317
4316
mlir::DataLayout layout (op->getParentOfType <mlir::ModuleOp>());
4318
4317
int width = layout.getTypeSizeInBits (op.getInput ().getType ());
4318
+ if (auto longDoubleType =
4319
+ mlir::dyn_cast<cir::LongDoubleType>(op.getInput ().getType ())) {
4320
+ if (mlir::isa<cir::FP80Type>(longDoubleType.getUnderlying ())) {
4321
+ // see https://github.com/llvm/clangir/issues/1057
4322
+ llvm_unreachable (" NYI" );
4323
+ }
4324
+ }
4319
4325
auto intTy = mlir::IntegerType::get (rewriter.getContext (), width);
4320
4326
auto bitcast = rewriter.create <mlir::LLVM::BitcastOp>(op->getLoc (), intTy,
4321
4327
adaptor.getInput ());
@@ -4401,27 +4407,27 @@ std::unique_ptr<cir::LowerModule> prepareLowerModule(mlir::ModuleOp module) {
4401
4407
void prepareTypeConverter (mlir::LLVMTypeConverter &converter,
4402
4408
mlir::DataLayout &dataLayout,
4403
4409
cir::LowerModule *lowerModule) {
4404
- converter.addConversion ([&,
4405
- lowerModule](cir::PointerType type) -> mlir::Type {
4406
- // Drop pointee type since LLVM dialect only allows opaque pointers.
4407
-
4408
- auto addrSpace =
4409
- mlir::cast_if_present<cir::AddressSpaceAttr>(type.getAddrSpace ());
4410
- // Null addrspace attribute indicates the default addrspace.
4411
- if (!addrSpace)
4412
- return mlir::LLVM::LLVMPointerType::get (type.getContext ());
4413
-
4414
- assert (lowerModule && " CIR AS map is not available" );
4415
- // Pass through target addrspace and map CIR addrspace to LLVM addrspace by
4416
- // querying the target info.
4417
- unsigned targetAS =
4418
- addrSpace.isTarget ()
4419
- ? addrSpace.getTargetValue ()
4420
- : lowerModule->getTargetLoweringInfo ()
4421
- .getTargetAddrSpaceFromCIRAddrSpace (addrSpace);
4422
-
4423
- return mlir::LLVM::LLVMPointerType::get (type.getContext (), targetAS);
4424
- });
4410
+ converter.addConversion (
4411
+ [&, lowerModule](cir::PointerType type) -> mlir::Type {
4412
+ // Drop pointee type since LLVM dialect only allows opaque pointers.
4413
+
4414
+ auto addrSpace =
4415
+ mlir::cast_if_present<cir::AddressSpaceAttr>(type.getAddrSpace ());
4416
+ // Null addrspace attribute indicates the default addrspace.
4417
+ if (!addrSpace)
4418
+ return mlir::LLVM::LLVMPointerType::get (type.getContext ());
4419
+
4420
+ assert (lowerModule && " CIR AS map is not available" );
4421
+ // Pass through target addrspace and map CIR addrspace to LLVM addrspace
4422
+ // by querying the target info.
4423
+ unsigned targetAS =
4424
+ addrSpace.isTarget ()
4425
+ ? addrSpace.getTargetValue ()
4426
+ : lowerModule->getTargetLoweringInfo ()
4427
+ .getTargetAddrSpaceFromCIRAddrSpace (addrSpace);
4428
+
4429
+ return mlir::LLVM::LLVMPointerType::get (type.getContext (), targetAS);
4430
+ });
4425
4431
converter.addConversion ([&](cir::DataMemberType type) -> mlir::Type {
4426
4432
return mlir::IntegerType::get (type.getContext (),
4427
4433
dataLayout.getTypeSizeInBits (type));
0 commit comments