================
@@ -1357,6 +1357,55 @@ mlir::LogicalResult
CIRToLLVMCastOpLowering::matchAndRewrite(
return mlir::success();
}
+static mlir::Value convertToIndexTy(mlir::ConversionPatternRewriter &rewriter,
+ mlir::ModuleOp mod, mlir::Value index,
+ mlir::Type baseTy, cir::IntType strideTy) {
+ mlir::Operation *indexOp = index.getDefiningOp();
+ if (!indexOp)
+ return index;
+
+ auto indexType = mlir::cast<mlir::IntegerType>(index.getType());
+ mlir::DataLayout llvmLayout(mod);
+ std::optional<uint64_t> layoutWidth =
llvmLayout.getTypeIndexBitwidth(baseTy);
+
+ // If there is no change in width, don't do anything.
+ if (!layoutWidth || *layoutWidth == indexType.getWidth())
+ return index;
+
+ // If the index comes from a subtraction, make sure the extension happens
+ // before it. To achieve that, look at unary minus, which already got
+ // lowered to "sub 0, x".
+ auto sub = dyn_cast<mlir::LLVM::SubOp>(indexOp);
+ bool rewriteSub = false;
+ if (sub) {
+ if (auto lhsConst = dyn_cast<mlir::LLVM::ConstantOp>(
+ sub.getOperand(0).getDefiningOp())) {
+ auto lhsConstInt =
mlir::dyn_cast<mlir::IntegerAttr>(lhsConst.getValue());
+ if (lhsConstInt && lhsConstInt.getValue() == 0) {
+ index = sub.getOperand(1);
----------------
xlauko wrote:
```suggestion
index = sub.getRhs();
```
https://github.com/llvm/llvm-project/pull/172897
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits