-
Notifications
You must be signed in to change notification settings - Fork 14k
[CIR] Streamline creation of mlir::IntegerAttrs using mlir::Builder #141830
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
@llvm/pr-subscribers-clangir Author: Henrich Lauko (xlauko) Changes
This mirrors incubator changes from llvm/clangir#1645 (comment) Full diff: https://github.com/llvm/llvm-project/pull/141830.diff 6 Files Affected:
diff --git a/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h b/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
index 9de3a66755778..ac65c66c01589 100644
--- a/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
+++ b/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
@@ -18,6 +18,7 @@
#include "llvm/Support/ErrorHandling.h"
#include "mlir/IR/Builders.h"
+#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Location.h"
#include "mlir/IR/Types.h"
@@ -167,9 +168,7 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
}
mlir::TypedAttr getConstPtrAttr(mlir::Type type, int64_t value) {
- auto valueAttr = mlir::IntegerAttr::get(
- mlir::IntegerType::get(type.getContext(), 64), value);
- return cir::ConstPtrAttr::get(type, valueAttr);
+ return cir::ConstPtrAttr::get(type, getI64IntegerAttr(value));
}
mlir::Value createAlloca(mlir::Location loc, cir::PointerType addrType,
@@ -197,14 +196,9 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
mlir::Value createDummyValue(mlir::Location loc, mlir::Type type,
clang::CharUnits alignment) {
- auto addr = createAlloca(loc, getPointerTo(type), type, {},
- getSizeFromCharUnits(getContext(), alignment));
- mlir::IntegerAttr alignAttr;
- uint64_t align = alignment.getQuantity();
- if (align)
- alignAttr = getI64IntegerAttr(align);
-
- return create<cir::LoadOp>(loc, addr, /*isDeref=*/false, alignAttr);
+ mlir::IntegerAttr alignmentAttr = getAlignmentAttr(alignment);
+ auto addr = createAlloca(loc, getPointerTo(type), type, {}, alignmentAttr);
+ return create<cir::LoadOp>(loc, addr, /*isDeref=*/false, alignmentAttr);
}
cir::PtrStrideOp createPtrStride(mlir::Location loc, mlir::Value base,
@@ -428,13 +422,28 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
return OpBuilder::InsertPoint(block, block->begin());
};
- mlir::IntegerAttr getSizeFromCharUnits(mlir::MLIRContext *ctx,
- clang::CharUnits size) {
- // Note that mlir::IntegerType is used instead of cir::IntType here
- // because we don't need sign information for this to be useful, so keep
- // it simple.
- return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64),
- size.getQuantity());
+ //
+ // Alignement and size helpers
+ //
+
+ // Note that mlir::IntegerType is used instead of cir::IntType here because we
+ // don't need sign information for these to be useful, so keep it simple.
+
+ // Fot 0 alignment, return an empty attribute.
+ mlir::IntegerAttr getAlignmentAttr(clang::CharUnits alignment) {
+ return getAlignmentAttr(alignment.getQuantity());
+ }
+
+ mlir::IntegerAttr getAlignmentAttr(llvm::Align alignment) {
+ return getAlignmentAttr(alignment.value());
+ }
+
+ mlir::IntegerAttr getAlignmentAttr(int64_t alignment) {
+ return alignment ? getI64IntegerAttr(alignment) : mlir::IntegerAttr();
+ }
+
+ mlir::IntegerAttr getSizeFromCharUnits(clang::CharUnits size) {
+ return getI64IntegerAttr(size.getQuantity());
}
/// Create a loop condition.
diff --git a/clang/lib/CIR/CodeGen/CIRGenBuilder.h b/clang/lib/CIR/CodeGen/CIRGenBuilder.h
index e53f5e9202961..b8548487d5b31 100644
--- a/clang/lib/CIR/CodeGen/CIRGenBuilder.h
+++ b/clang/lib/CIR/CodeGen/CIRGenBuilder.h
@@ -282,22 +282,15 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy {
cir::LoadOp createLoad(mlir::Location loc, Address addr,
bool isVolatile = false) {
- mlir::IntegerAttr align;
- uint64_t alignment = addr.getAlignment().getQuantity();
- if (alignment)
- align = getI64IntegerAttr(alignment);
+ mlir::IntegerAttr align = getAlignmentAttr(addr.getAlignment());
return create<cir::LoadOp>(loc, addr.getPointer(), /*isDeref=*/false,
align);
}
cir::StoreOp createStore(mlir::Location loc, mlir::Value val, Address dst,
- ::mlir::IntegerAttr align = {}) {
- if (!align) {
- uint64_t alignment = dst.getAlignment().getQuantity();
- if (alignment)
- align = mlir::IntegerAttr::get(mlir::IntegerType::get(getContext(), 64),
- alignment);
- }
+ mlir::IntegerAttr align = {}) {
+ if (!align)
+ align = getAlignmentAttr(dst.getAlignment());
return CIRBaseBuilderTy::createStore(loc, val, dst.getPointer(), align);
}
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.h b/clang/lib/CIR/CodeGen/CIRGenModule.h
index add1b40ab0aea..767b2f8e2a550 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.h
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.h
@@ -208,7 +208,7 @@ class CIRGenModule : public CIRGenTypeCache {
const clang::FunctionDecl *funcDecl);
mlir::IntegerAttr getSize(CharUnits size) {
- return builder.getSizeFromCharUnits(&getMLIRContext(), size);
+ return builder.getSizeFromCharUnits(size);
}
const llvm::Triple &getTriple() const { return target.getTriple(); }
diff --git a/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp b/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp
index c4fb4942aec75..52f0b33afaba4 100644
--- a/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp
+++ b/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp
@@ -64,8 +64,7 @@ void CIRDialect::printAttribute(Attribute attr, DialectAsmPrinter &os) const {
static ParseResult parseConstPtr(AsmParser &parser, mlir::IntegerAttr &value) {
if (parser.parseOptionalKeyword("null").succeeded()) {
- value = mlir::IntegerAttr::get(
- mlir::IntegerType::get(parser.getContext(), 64), 0);
+ value = parser.getBuilder().getI64IntegerAttr(0);
return success();
}
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 8e82af7e62bc0..d30c85d572fed 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -417,8 +417,7 @@ mlir::LogicalResult CIRToLLVMCastOpLowering::matchAndRewrite(
case cir::CastKind::int_to_bool: {
mlir::Value llvmSrcVal = adaptor.getOperands().front();
mlir::Value zeroInt = rewriter.create<mlir::LLVM::ConstantOp>(
- castOp.getLoc(), llvmSrcVal.getType(),
- mlir::IntegerAttr::get(llvmSrcVal.getType(), 0));
+ castOp.getLoc(), llvmSrcVal.getType(), 0);
rewriter.replaceOpWithNewOp<mlir::LLVM::ICmpOp>(
castOp, mlir::LLVM::ICmpPredicate::ne, llvmSrcVal, zeroInt);
break;
@@ -630,9 +629,8 @@ mlir::LogicalResult CIRToLLVMPtrStrideOpLowering::matchAndRewrite(
if (rewriteSub) {
index = rewriter.create<mlir::LLVM::SubOp>(
index.getLoc(), index.getType(),
- rewriter.create<mlir::LLVM::ConstantOp>(
- index.getLoc(), index.getType(),
- mlir::IntegerAttr::get(index.getType(), 0)),
+ rewriter.create<mlir::LLVM::ConstantOp>(index.getLoc(),
+ index.getType(), 0),
index);
rewriter.eraseOp(sub);
}
@@ -648,8 +646,7 @@ mlir::LogicalResult CIRToLLVMAllocaOpLowering::matchAndRewrite(
mlir::ConversionPatternRewriter &rewriter) const {
assert(!cir::MissingFeatures::opAllocaDynAllocSize());
mlir::Value size = rewriter.create<mlir::LLVM::ConstantOp>(
- op.getLoc(), typeConverter->convertType(rewriter.getIndexType()),
- rewriter.getIntegerAttr(rewriter.getIndexType(), 1));
+ op.getLoc(), typeConverter->convertType(rewriter.getIndexType()), 1);
mlir::Type elementTy =
convertTypeForMemory(*getTypeConverter(), dataLayout, op.getAllocaType());
mlir::Type resultTy = convertTypeForMemory(*getTypeConverter(), dataLayout,
@@ -1111,18 +1108,16 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
switch (op.getKind()) {
case cir::UnaryOpKind::Inc: {
assert(!isVector && "++ not allowed on vector types");
- mlir::LLVM::ConstantOp one = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, 1));
+ auto one = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 1);
rewriter.replaceOpWithNewOp<mlir::LLVM::AddOp>(
op, llvmType, adaptor.getInput(), one, maybeNSW);
return mlir::success();
}
case cir::UnaryOpKind::Dec: {
assert(!isVector && "-- not allowed on vector types");
- mlir::LLVM::ConstantOp one = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, 1));
- rewriter.replaceOpWithNewOp<mlir::LLVM::SubOp>(
- op, llvmType, adaptor.getInput(), one, maybeNSW);
+ auto one = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 1);
+ rewriter.replaceOpWithNewOp<mlir::LLVM::SubOp>(op, adaptor.getInput(),
+ one, maybeNSW);
return mlir::success();
}
case cir::UnaryOpKind::Plus:
@@ -1133,10 +1128,9 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
if (isVector)
zero = rewriter.create<mlir::LLVM::ZeroOp>(loc, llvmType);
else
- zero = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, 0));
+ zero = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 0);
rewriter.replaceOpWithNewOp<mlir::LLVM::SubOp>(
- op, llvmType, zero, adaptor.getInput(), maybeNSW);
+ op, zero, adaptor.getInput(), maybeNSW);
return mlir::success();
}
case cir::UnaryOpKind::Not: {
@@ -1150,11 +1144,10 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
minusOne =
rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, denseVec);
} else {
- minusOne = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, -1));
+ minusOne = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, -1);
}
- rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(
- op, llvmType, adaptor.getInput(), minusOne);
+ rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(op, adaptor.getInput(),
+ minusOne);
return mlir::success();
}
}
@@ -1206,10 +1199,9 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
return op.emitError() << "Unsupported unary operation on boolean type";
case cir::UnaryOpKind::Not: {
assert(!isVector && "NYI: op! on vector mask");
- mlir::LLVM::ConstantOp one = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, rewriter.getIntegerAttr(llvmType, 1));
- rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(op, llvmType,
- adaptor.getInput(), one);
+ auto one = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 1);
+ rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(op, adaptor.getInput(),
+ one);
return mlir::success();
}
}
diff --git a/clang/unittests/CIR/PointerLikeTest.cpp b/clang/unittests/CIR/PointerLikeTest.cpp
index c0da271d56d4c..22690f2834cc4 100644
--- a/clang/unittests/CIR/PointerLikeTest.cpp
+++ b/clang/unittests/CIR/PointerLikeTest.cpp
@@ -47,12 +47,10 @@ class CIROpenACCPointerLikeTest : public ::testing::Test {
llvm::StringMap<unsigned> recordNames;
mlir::IntegerAttr getAlignOne(mlir::MLIRContext *ctx) {
- // Note that mlir::IntegerType is used instead of cir::IntType here
- // because we don't need sign information for this to be useful, so keep
- // it simple.
+ // Note that mlir::IntegerType is used instead of cir::IntType here because
+ // we don't need sign information for this to be useful, so keep it simple.
clang::CharUnits align = clang::CharUnits::One();
- return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64),
- align.getQuantity());
+ return b.getI64IntegerAttr(align.getQuantity());
}
mlir::StringAttr getUniqueRecordName(const std::string &baseName) {
|
@llvm/pr-subscribers-clang Author: Henrich Lauko (xlauko) Changes
This mirrors incubator changes from llvm/clangir#1645 (comment) Full diff: https://github.com/llvm/llvm-project/pull/141830.diff 6 Files Affected:
diff --git a/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h b/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
index 9de3a66755778..ac65c66c01589 100644
--- a/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
+++ b/clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h
@@ -18,6 +18,7 @@
#include "llvm/Support/ErrorHandling.h"
#include "mlir/IR/Builders.h"
+#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Location.h"
#include "mlir/IR/Types.h"
@@ -167,9 +168,7 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
}
mlir::TypedAttr getConstPtrAttr(mlir::Type type, int64_t value) {
- auto valueAttr = mlir::IntegerAttr::get(
- mlir::IntegerType::get(type.getContext(), 64), value);
- return cir::ConstPtrAttr::get(type, valueAttr);
+ return cir::ConstPtrAttr::get(type, getI64IntegerAttr(value));
}
mlir::Value createAlloca(mlir::Location loc, cir::PointerType addrType,
@@ -197,14 +196,9 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
mlir::Value createDummyValue(mlir::Location loc, mlir::Type type,
clang::CharUnits alignment) {
- auto addr = createAlloca(loc, getPointerTo(type), type, {},
- getSizeFromCharUnits(getContext(), alignment));
- mlir::IntegerAttr alignAttr;
- uint64_t align = alignment.getQuantity();
- if (align)
- alignAttr = getI64IntegerAttr(align);
-
- return create<cir::LoadOp>(loc, addr, /*isDeref=*/false, alignAttr);
+ mlir::IntegerAttr alignmentAttr = getAlignmentAttr(alignment);
+ auto addr = createAlloca(loc, getPointerTo(type), type, {}, alignmentAttr);
+ return create<cir::LoadOp>(loc, addr, /*isDeref=*/false, alignmentAttr);
}
cir::PtrStrideOp createPtrStride(mlir::Location loc, mlir::Value base,
@@ -428,13 +422,28 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
return OpBuilder::InsertPoint(block, block->begin());
};
- mlir::IntegerAttr getSizeFromCharUnits(mlir::MLIRContext *ctx,
- clang::CharUnits size) {
- // Note that mlir::IntegerType is used instead of cir::IntType here
- // because we don't need sign information for this to be useful, so keep
- // it simple.
- return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64),
- size.getQuantity());
+ //
+ // Alignement and size helpers
+ //
+
+ // Note that mlir::IntegerType is used instead of cir::IntType here because we
+ // don't need sign information for these to be useful, so keep it simple.
+
+ // Fot 0 alignment, return an empty attribute.
+ mlir::IntegerAttr getAlignmentAttr(clang::CharUnits alignment) {
+ return getAlignmentAttr(alignment.getQuantity());
+ }
+
+ mlir::IntegerAttr getAlignmentAttr(llvm::Align alignment) {
+ return getAlignmentAttr(alignment.value());
+ }
+
+ mlir::IntegerAttr getAlignmentAttr(int64_t alignment) {
+ return alignment ? getI64IntegerAttr(alignment) : mlir::IntegerAttr();
+ }
+
+ mlir::IntegerAttr getSizeFromCharUnits(clang::CharUnits size) {
+ return getI64IntegerAttr(size.getQuantity());
}
/// Create a loop condition.
diff --git a/clang/lib/CIR/CodeGen/CIRGenBuilder.h b/clang/lib/CIR/CodeGen/CIRGenBuilder.h
index e53f5e9202961..b8548487d5b31 100644
--- a/clang/lib/CIR/CodeGen/CIRGenBuilder.h
+++ b/clang/lib/CIR/CodeGen/CIRGenBuilder.h
@@ -282,22 +282,15 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy {
cir::LoadOp createLoad(mlir::Location loc, Address addr,
bool isVolatile = false) {
- mlir::IntegerAttr align;
- uint64_t alignment = addr.getAlignment().getQuantity();
- if (alignment)
- align = getI64IntegerAttr(alignment);
+ mlir::IntegerAttr align = getAlignmentAttr(addr.getAlignment());
return create<cir::LoadOp>(loc, addr.getPointer(), /*isDeref=*/false,
align);
}
cir::StoreOp createStore(mlir::Location loc, mlir::Value val, Address dst,
- ::mlir::IntegerAttr align = {}) {
- if (!align) {
- uint64_t alignment = dst.getAlignment().getQuantity();
- if (alignment)
- align = mlir::IntegerAttr::get(mlir::IntegerType::get(getContext(), 64),
- alignment);
- }
+ mlir::IntegerAttr align = {}) {
+ if (!align)
+ align = getAlignmentAttr(dst.getAlignment());
return CIRBaseBuilderTy::createStore(loc, val, dst.getPointer(), align);
}
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.h b/clang/lib/CIR/CodeGen/CIRGenModule.h
index add1b40ab0aea..767b2f8e2a550 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.h
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.h
@@ -208,7 +208,7 @@ class CIRGenModule : public CIRGenTypeCache {
const clang::FunctionDecl *funcDecl);
mlir::IntegerAttr getSize(CharUnits size) {
- return builder.getSizeFromCharUnits(&getMLIRContext(), size);
+ return builder.getSizeFromCharUnits(size);
}
const llvm::Triple &getTriple() const { return target.getTriple(); }
diff --git a/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp b/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp
index c4fb4942aec75..52f0b33afaba4 100644
--- a/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp
+++ b/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp
@@ -64,8 +64,7 @@ void CIRDialect::printAttribute(Attribute attr, DialectAsmPrinter &os) const {
static ParseResult parseConstPtr(AsmParser &parser, mlir::IntegerAttr &value) {
if (parser.parseOptionalKeyword("null").succeeded()) {
- value = mlir::IntegerAttr::get(
- mlir::IntegerType::get(parser.getContext(), 64), 0);
+ value = parser.getBuilder().getI64IntegerAttr(0);
return success();
}
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 8e82af7e62bc0..d30c85d572fed 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -417,8 +417,7 @@ mlir::LogicalResult CIRToLLVMCastOpLowering::matchAndRewrite(
case cir::CastKind::int_to_bool: {
mlir::Value llvmSrcVal = adaptor.getOperands().front();
mlir::Value zeroInt = rewriter.create<mlir::LLVM::ConstantOp>(
- castOp.getLoc(), llvmSrcVal.getType(),
- mlir::IntegerAttr::get(llvmSrcVal.getType(), 0));
+ castOp.getLoc(), llvmSrcVal.getType(), 0);
rewriter.replaceOpWithNewOp<mlir::LLVM::ICmpOp>(
castOp, mlir::LLVM::ICmpPredicate::ne, llvmSrcVal, zeroInt);
break;
@@ -630,9 +629,8 @@ mlir::LogicalResult CIRToLLVMPtrStrideOpLowering::matchAndRewrite(
if (rewriteSub) {
index = rewriter.create<mlir::LLVM::SubOp>(
index.getLoc(), index.getType(),
- rewriter.create<mlir::LLVM::ConstantOp>(
- index.getLoc(), index.getType(),
- mlir::IntegerAttr::get(index.getType(), 0)),
+ rewriter.create<mlir::LLVM::ConstantOp>(index.getLoc(),
+ index.getType(), 0),
index);
rewriter.eraseOp(sub);
}
@@ -648,8 +646,7 @@ mlir::LogicalResult CIRToLLVMAllocaOpLowering::matchAndRewrite(
mlir::ConversionPatternRewriter &rewriter) const {
assert(!cir::MissingFeatures::opAllocaDynAllocSize());
mlir::Value size = rewriter.create<mlir::LLVM::ConstantOp>(
- op.getLoc(), typeConverter->convertType(rewriter.getIndexType()),
- rewriter.getIntegerAttr(rewriter.getIndexType(), 1));
+ op.getLoc(), typeConverter->convertType(rewriter.getIndexType()), 1);
mlir::Type elementTy =
convertTypeForMemory(*getTypeConverter(), dataLayout, op.getAllocaType());
mlir::Type resultTy = convertTypeForMemory(*getTypeConverter(), dataLayout,
@@ -1111,18 +1108,16 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
switch (op.getKind()) {
case cir::UnaryOpKind::Inc: {
assert(!isVector && "++ not allowed on vector types");
- mlir::LLVM::ConstantOp one = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, 1));
+ auto one = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 1);
rewriter.replaceOpWithNewOp<mlir::LLVM::AddOp>(
op, llvmType, adaptor.getInput(), one, maybeNSW);
return mlir::success();
}
case cir::UnaryOpKind::Dec: {
assert(!isVector && "-- not allowed on vector types");
- mlir::LLVM::ConstantOp one = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, 1));
- rewriter.replaceOpWithNewOp<mlir::LLVM::SubOp>(
- op, llvmType, adaptor.getInput(), one, maybeNSW);
+ auto one = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 1);
+ rewriter.replaceOpWithNewOp<mlir::LLVM::SubOp>(op, adaptor.getInput(),
+ one, maybeNSW);
return mlir::success();
}
case cir::UnaryOpKind::Plus:
@@ -1133,10 +1128,9 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
if (isVector)
zero = rewriter.create<mlir::LLVM::ZeroOp>(loc, llvmType);
else
- zero = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, 0));
+ zero = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 0);
rewriter.replaceOpWithNewOp<mlir::LLVM::SubOp>(
- op, llvmType, zero, adaptor.getInput(), maybeNSW);
+ op, zero, adaptor.getInput(), maybeNSW);
return mlir::success();
}
case cir::UnaryOpKind::Not: {
@@ -1150,11 +1144,10 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
minusOne =
rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, denseVec);
} else {
- minusOne = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, mlir::IntegerAttr::get(llvmType, -1));
+ minusOne = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, -1);
}
- rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(
- op, llvmType, adaptor.getInput(), minusOne);
+ rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(op, adaptor.getInput(),
+ minusOne);
return mlir::success();
}
}
@@ -1206,10 +1199,9 @@ mlir::LogicalResult CIRToLLVMUnaryOpLowering::matchAndRewrite(
return op.emitError() << "Unsupported unary operation on boolean type";
case cir::UnaryOpKind::Not: {
assert(!isVector && "NYI: op! on vector mask");
- mlir::LLVM::ConstantOp one = rewriter.create<mlir::LLVM::ConstantOp>(
- loc, llvmType, rewriter.getIntegerAttr(llvmType, 1));
- rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(op, llvmType,
- adaptor.getInput(), one);
+ auto one = rewriter.create<mlir::LLVM::ConstantOp>(loc, llvmType, 1);
+ rewriter.replaceOpWithNewOp<mlir::LLVM::XOrOp>(op, adaptor.getInput(),
+ one);
return mlir::success();
}
}
diff --git a/clang/unittests/CIR/PointerLikeTest.cpp b/clang/unittests/CIR/PointerLikeTest.cpp
index c0da271d56d4c..22690f2834cc4 100644
--- a/clang/unittests/CIR/PointerLikeTest.cpp
+++ b/clang/unittests/CIR/PointerLikeTest.cpp
@@ -47,12 +47,10 @@ class CIROpenACCPointerLikeTest : public ::testing::Test {
llvm::StringMap<unsigned> recordNames;
mlir::IntegerAttr getAlignOne(mlir::MLIRContext *ctx) {
- // Note that mlir::IntegerType is used instead of cir::IntType here
- // because we don't need sign information for this to be useful, so keep
- // it simple.
+ // Note that mlir::IntegerType is used instead of cir::IntType here because
+ // we don't need sign information for this to be useful, so keep it simple.
clang::CharUnits align = clang::CharUnits::One();
- return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64),
- align.getQuantity());
+ return b.getI64IntegerAttr(align.getQuantity());
}
mlir::StringAttr getUniqueRecordName(const std::string &baseName) {
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what amounts to 2 nits.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm with a couple of nits
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM pending comments from other reviewers
- Uses getI<bitwidth>IntegerAttr builder method instead of explicit attribute and its type creation. - Adds few helper functions `getAlignmentAttr` to build alignment representing mlir::IntegerAttr. - Removes duplicit type parameters, that are inferred from mlir::IntegerAttr. This mirrors incubator changes from llvm/clangir#1645 (comment)
Co-authored-by: Andy Kaylor <akaylor@nvidia.com>
Co-authored-by: Erich Keane <ekeane@nvidia.com>
d1647c4
to
41b6128
Compare
…141830) - Uses getI<bitwidth>IntegerAttr builder method instead of explicit attribute and its type creation. - Adds few helper functions `getAlignmentAttr` to build alignment representing mlir::IntegerAttr. - Removes duplicit type parameters, that are inferred from mlir::IntegerAttr. This mirrors incubator changes from llvm/clangir#1645 (comment)
…lvm#141830) - Uses getI<bitwidth>IntegerAttr builder method instead of explicit attribute and its type creation. - Adds few helper functions `getAlignmentAttr` to build alignment representing mlir::IntegerAttr. - Removes duplicit type parameters, that are inferred from mlir::IntegerAttr. This mirrors incubator changes from llvm/clangir#1645 (comment)
…lvm#141830) - Uses getI<bitwidth>IntegerAttr builder method instead of explicit attribute and its type creation. - Adds few helper functions `getAlignmentAttr` to build alignment representing mlir::IntegerAttr. - Removes duplicit type parameters, that are inferred from mlir::IntegerAttr. This mirrors incubator changes from llvm/clangir#1645 (comment)
getAlignmentAttr
to build alignment representing mlir::IntegerAttr.This mirrors incubator changes from llvm/clangir#1645 (comment)