Skip to content

Commit c4044aa

Browse files
committed
conv:irstollvm: Improve codestyle.
1 parent 4df412b commit c4044aa

File tree

2 files changed

+78
-138
lines changed

2 files changed

+78
-138
lines changed

lib/vast/Conversion/Common/Common.hpp

Lines changed: 16 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
#include "vast/Conversion/Common/Patterns.hpp"
1010
#include "vast/Conversion/TypeConverters/LLVMTypeConverter.hpp"
1111

12-
namespace vast::conv::irstollvm
13-
{
12+
namespace vast::conv::irstollvm {
1413
// I would consider to just use the entire namespace, everything
1514
// has (unfortunately) prefixed name with `LLVM` anyway.
1615
namespace LLVM = mlir::LLVM;
@@ -48,14 +47,11 @@ namespace vast::conv::irstollvm
4847
}
4948

5049
auto mk_index(auto loc, std::size_t idx, auto &rewriter) const
51-
-> mlir::LLVM::ConstantOp
52-
{
50+
-> mlir::LLVM::ConstantOp {
5351
auto index_type = convert(rewriter.getIndexType());
5452
return rewriter.template create< mlir::LLVM::ConstantOp >(
55-
loc,
56-
index_type,
57-
rewriter.getIntegerAttr(index_type, idx));
58-
53+
loc, index_type, rewriter.getIntegerAttr(index_type, idx)
54+
);
5955
}
6056
};
6157

@@ -67,9 +63,8 @@ namespace vast::conv::irstollvm
6763

6864
using adaptor_t = typename src_t::Adaptor;
6965

70-
mlir::LogicalResult matchAndRewrite(
71-
src_t op, adaptor_t ops, conversion_rewriter &rewriter
72-
) const override {
66+
logical_result
67+
matchAndRewrite(src_t op, adaptor_t ops, conversion_rewriter &rewriter) const override {
7368
auto target_ty = this->type_converter().convert_type_to_type(op.getType());
7469
auto new_op = rewriter.create< trg_t >(op.getLoc(), *target_ty, ops.getOperands());
7570
rewriter.replaceOp(op, new_op);
@@ -86,9 +81,8 @@ namespace vast::conv::irstollvm
8681

8782
using adaptor_t = typename src_t::Adaptor;
8883

89-
mlir::LogicalResult matchAndRewrite(
90-
src_t op, adaptor_t ops, conversion_rewriter &rewriter
91-
) const override {
84+
logical_result
85+
matchAndRewrite(src_t op, adaptor_t ops, conversion_rewriter &rewriter) const override {
9286
rewriter.replaceOp(op, ops.getOperands());
9387
return mlir::success();
9488
}
@@ -102,38 +96,27 @@ namespace vast::conv::irstollvm
10296

10397
using adaptor_t = typename src_t::Adaptor;
10498

105-
mlir::LogicalResult matchAndRewrite(
106-
src_t op, adaptor_t ops, conversion_rewriter &rewriter
107-
) const override {
99+
logical_result
100+
matchAndRewrite(src_t op, adaptor_t ops, conversion_rewriter &rewriter) const override {
108101
rewriter.eraseOp(op);
109102
return mlir::success();
110103
}
111104

112105
static void legalize(auto &trg) { trg.template addIllegalOp< src_t >(); }
113106
};
114107

115-
static auto get_is_illegal(auto &tc)
116-
{
117-
return [&](mlir_type type)
118-
{
119-
return !tc.isLegal(type);
120-
};
108+
static auto get_is_illegal(auto &tc) {
109+
return [&](mlir_type type) { return !tc.isLegal(type); };
121110
}
122111

123112
template< typename T, typename type_converter >
124-
auto get_has_only_legal_types(type_converter &tc)
125-
{
126-
return [&](T op) -> bool
127-
{
128-
return !has_type_somewhere(op, get_is_illegal(tc));
129-
};
113+
auto get_has_only_legal_types(type_converter &tc) {
114+
return [&](T op) -> bool { return !has_type_somewhere(op, get_is_illegal(tc)); };
130115
}
131116

132117
template< typename T, typename type_converter >
133-
auto get_has_legal_return_type(type_converter &tc)
134-
{
135-
return [&](T op) -> bool
136-
{
118+
auto get_has_legal_return_type(type_converter &tc) {
119+
return [&](T op) -> bool {
137120
return !contains_subtype(op.getResult().getType(), get_is_illegal(tc));
138121
};
139122
}

lib/vast/Conversion/Common/IRsToLLVM.cpp

Lines changed: 62 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44

55
VAST_RELAX_WARNINGS
66
#include <mlir/Analysis/DataLayoutAnalysis.h>
7+
#include <mlir/Conversion/LLVMCommon/Pattern.h>
8+
#include <mlir/Conversion/LLVMCommon/TypeConverter.h>
9+
#include <mlir/Dialect/LLVMIR/LLVMDialect.h>
710
#include <mlir/IR/PatternMatch.h>
8-
#include <mlir/Transforms/GreedyPatternRewriteDriver.h>
911
#include <mlir/Transforms/DialectConversion.h>
10-
#include <mlir/Dialect/LLVMIR/LLVMDialect.h>
11-
#include <mlir/Conversion/LLVMCommon/TypeConverter.h>
12-
#include <mlir/Conversion/LLVMCommon/Pattern.h>
12+
#include <mlir/Transforms/GreedyPatternRewriteDriver.h>
1313

1414
#include <llvm/ADT/APFloat.h>
1515
VAST_UNRELAX_WARNINGS
1616

1717
#include "../PassesDetails.hpp"
1818

1919
#include "vast/Dialect/HighLevel/HighLevelAttributes.hpp"
20-
#include "vast/Dialect/HighLevel/HighLevelTypes.hpp"
2120
#include "vast/Dialect/HighLevel/HighLevelOps.hpp"
21+
#include "vast/Dialect/HighLevel/HighLevelTypes.hpp"
2222

2323
#include "vast/Dialect/Core/CoreAttributes.hpp"
2424

@@ -27,10 +27,10 @@ VAST_UNRELAX_WARNINGS
2727
#include "vast/Dialect/Core/CoreOps.hpp"
2828
#include "vast/Dialect/Core/TypeTraits.hpp"
2929

30+
#include "vast/Util/Common.hpp"
3031
#include "vast/Util/Symbols.hpp"
3132
#include "vast/Util/Terminator.hpp"
3233
#include "vast/Util/TypeList.hpp"
33-
#include "vast/Util/Common.hpp"
3434

3535
#include "vast/Conversion/Common/Passes.hpp"
3636
#include "vast/Conversion/TypeConverters/LLVMTypeConverter.hpp"
@@ -53,15 +53,12 @@ namespace vast::conv::irstollvm
5353
using op_t = ll::StructGEPOp;
5454

5555
logical_result matchAndRewrite(
56-
op_t op, typename op_t::Adaptor ops,
57-
conversion_rewriter &rewriter) const override
58-
{
59-
std::vector< mlir::LLVM::GEPArg > indices { 0ul, ops.getIdx() };
56+
op_t op, typename op_t::Adaptor ops, conversion_rewriter &rewriter
57+
) const override {
58+
std::vector< mlir::LLVM::GEPArg > indices{ 0ul, ops.getIdx() };
6059
auto gep = rewriter.create< mlir::LLVM::GEPOp >(
61-
op.getLoc(),
62-
convert(op.getType()),
63-
ops.getRecord(),
64-
indices);
60+
op.getLoc(), convert(op.getType()), ops.getRecord(), indices
61+
);
6562

6663
rewriter.replaceOp(op, gep);
6764
return mlir::success();
@@ -75,84 +72,65 @@ namespace vast::conv::irstollvm
7572

7673
using op_t = ll::Extract;
7774

78-
std::size_t to_number(mlir::TypedAttr attr) const
79-
{
75+
std::size_t to_number(mlir::TypedAttr attr) const {
8076
auto int_attr = mlir::dyn_cast< mlir::IntegerAttr >(attr);
8177
VAST_CHECK(int_attr, "Cannot convert {0} to `mlir::IntegerAttr`.", attr);
8278

8379
return int_attr.getUInt();
8480
}
8581

86-
bool is_consistent(op_t op) const
87-
{
88-
auto size = to_number(op.getTo()) - to_number(op.getFrom()) + 1;
89-
const auto &dl = this->type_converter().getDataLayoutAnalysis()
90-
->getAtOrAbove(op);
82+
bool is_consistent(op_t op) const {
83+
auto size = to_number(op.getTo()) - to_number(op.getFrom()) + 1;
84+
const auto &dl = this->type_converter().getDataLayoutAnalysis()->getAtOrAbove(op);
9185
auto target_bw = dl.getTypeSizeInBits(convert(op.getType()));
9286

9387
return target_bw != size;
9488
}
9589

9690
logical_result matchAndRewrite(
97-
op_t op, typename op_t::Adaptor ops,
98-
conversion_rewriter &rewriter) const override
99-
{
91+
op_t op, typename op_t::Adaptor ops, conversion_rewriter &rewriter
92+
) const override {
10093
auto loc = op.getLoc();
10194

102-
auto value = [&]() -> mlir::Value
103-
{
95+
auto value = [&]() -> mlir::Value {
10496
auto arg = ops.getArg();
105-
if (auto ptr = mlir::dyn_cast< mlir::LLVM::LLVMPointerType >(arg.getType()))
106-
{
97+
if (auto ptr = mlir::dyn_cast< mlir::LLVM::LLVMPointerType >(arg.getType())) {
10798
return rewriter.create< mlir::LLVM::LoadOp >(
108-
op.getLoc(),
109-
ptr.getElementType(),
110-
arg);
99+
op.getLoc(), ptr.getElementType(), arg
100+
);
111101
}
112102
return arg;
113103
}();
114104

115105
auto i8_type = mlir::IntegerType::get(getContext(), 8);
116106

117-
auto extract = [&](auto from, auto pos) -> mlir::Value
118-
{
107+
auto extract = [&](auto from, auto pos) -> mlir::Value {
119108
auto shift = rewriter.create< mlir::LLVM::LShrOp >(
120-
loc,
121-
value,
122-
iN(rewriter, loc, value.getType(), from));
123-
auto trunc = rewriter.create< mlir::LLVM::TruncOp >(
124-
loc,
125-
i8_type,
126-
shift);
127-
auto zext = rewriter.create< mlir::LLVM::ZExtOp >(
128-
loc,
129-
convert(op.getType()),
130-
trunc);
131-
132-
if (pos == 0)
109+
loc, value, iN(rewriter, loc, value.getType(), from)
110+
);
111+
auto trunc = rewriter.create< mlir::LLVM::TruncOp >(loc, i8_type, shift);
112+
auto zext =
113+
rewriter.create< mlir::LLVM::ZExtOp >(loc, convert(op.getType()), trunc);
114+
115+
if (pos == 0) {
133116
return zext;
117+
}
134118

135119
return rewriter.create< mlir::LLVM::ShlOp >(
136-
loc,
137-
convert(op.getType()),
138-
zext,
139-
iN(rewriter, loc, convert(op.getType()), pos));
140-
120+
loc, convert(op.getType()), zext,
121+
iN(rewriter, loc, convert(op.getType()), pos)
122+
);
141123
};
142124

143125
mlir::Value head = iN(rewriter, loc, convert(op.getType()), 0);
144126
// TODO(conv:abi): It may be possible we don't need this in the end and plain
145127
// `shift & trunc` will work. I am leaving it here for now as it
146128
// seems to work.
147-
for (std::size_t i = 0; i < op.size() / 8; ++i)
148-
{
129+
for (std::size_t i = 0; i < op.size() / 8; ++i) {
149130
auto offset = op.from() + i * 8;
150-
auto byte = extract(offset, i * 8);
151-
head = rewriter.create< mlir::LLVM::OrOp >(
152-
loc,
153-
convert(op.getType()),
154-
byte,
155-
head);
131+
auto byte = extract(offset, i * 8);
132+
head =
133+
rewriter.create< mlir::LLVM::OrOp >(loc, convert(op.getType()), byte, head);
156134
}
157135
rewriter.replaceOp(op, { head });
158136
return mlir::success();
@@ -166,44 +144,33 @@ namespace vast::conv::irstollvm
166144

167145
using op_t = ll::Concat;
168146

169-
std::size_t bw(operation op) const
170-
{
147+
std::size_t bw(operation op) const {
171148
VAST_ASSERT(op->getNumResults() == 1);
172-
const auto &dl = this->type_converter().getDataLayoutAnalysis()
173-
->getAtOrAbove(op);
149+
const auto &dl = this->type_converter().getDataLayoutAnalysis()->getAtOrAbove(op);
174150
return dl.getTypeSizeInBits(convert(op->getResult(0).getType()));
175151
}
176152

177153
logical_result matchAndRewrite(
178-
op_t op, typename op_t::Adaptor ops,
179-
conversion_rewriter &rewriter) const override
180-
{
154+
op_t op, typename op_t::Adaptor ops, conversion_rewriter &rewriter
155+
) const override {
181156
auto loc = op.getLoc();
182157

183-
auto resize = [&](auto w) -> mlir::Value
184-
{
158+
auto resize = [&](auto w) -> mlir::Value {
185159
auto trg_type = convert(op.getType());
186-
if (w.getType() == trg_type)
160+
if (w.getType() == trg_type) {
187161
return w;
188-
return rewriter.create< mlir::LLVM::ZExtOp >(
189-
loc,
190-
trg_type,
191-
w);
162+
}
163+
return rewriter.create< mlir::LLVM::ZExtOp >(loc, trg_type, w);
192164
};
193165
mlir::Value head = resize(ops.getOperands()[0]);
194166

195167
std::size_t start = bw(ops.getOperands()[0].getDefiningOp());
196-
for (std::size_t i = 1; i < ops.getOperands().size(); ++i)
197-
{
198-
auto full = resize(ops.getOperands()[i]);
168+
for (std::size_t i = 1; i < ops.getOperands().size(); ++i) {
169+
auto full = resize(ops.getOperands()[i]);
199170
auto shifted = rewriter.create< mlir::LLVM::ShlOp >(
200-
loc,
201-
full,
202-
mk_index(loc, start, rewriter));
203-
head = rewriter.create< mlir::LLVM::OrOp >(
204-
loc,
205-
head,
206-
shifted->getResult(0));
171+
loc, full, mk_index(loc, start, rewriter)
172+
);
173+
head = rewriter.create< mlir::LLVM::OrOp >(loc, head, shifted->getResult(0));
207174

208175
start += bw(ops.getOperands()[i].getDefiningOp());
209176
}
@@ -226,9 +193,8 @@ namespace vast::conv::irstollvm
226193
using base::base;
227194

228195
logical_result matchAndRewrite(
229-
Op unit_op, typename Op::Adaptor ops,
230-
conversion_rewriter &rewriter) const override
231-
{
196+
Op unit_op, typename Op::Adaptor ops, conversion_rewriter &rewriter
197+
) const override {
232198
auto parent = unit_op.getBody().getParentRegion();
233199
rewriter.inlineRegionBefore(unit_op.getBody(), *parent, parent->end());
234200

@@ -239,7 +205,6 @@ namespace vast::conv::irstollvm
239205
rewriter.eraseOp(unit_op);
240206
return logical_result::success();
241207
}
242-
243208
};
244209

245210
template< typename op_t >
@@ -250,37 +215,29 @@ namespace vast::conv::irstollvm
250215

251216
using Op = op_t;
252217

253-
mlir::Block *start_block(Op op) const override
254-
{
255-
return &*op.getBody().begin();
256-
}
218+
mlir::Block *start_block(Op op) const override { return &*op.getBody().begin(); }
257219

258-
auto matchAndRewrite(Op op, typename Op::Adaptor ops,
259-
conversion_rewriter &rewriter) const
260-
-> logical_result override
261-
{
220+
auto
221+
matchAndRewrite(Op op, typename Op::Adaptor ops, conversion_rewriter &rewriter) const
222+
-> logical_result override {
262223
// If we do not have any branching inside, we can just "inline"
263224
// the op.
264-
if (op.getBody().hasOneBlock())
225+
if (op.getBody().hasOneBlock()) {
265226
return base::handle_singleblock(op, ops, rewriter);
227+
}
266228

267229
return base::handle_multiblock(op, ops, rewriter);
268230
}
269231
};
270232

271233
using label_stmt = hl_scopelike< hl::LabelStmt >;
272-
using scope_op = hl_scopelike< core::ScopeOp >;
234+
using scope_op = hl_scopelike< core::ScopeOp >;
273235

274-
using label_patterns = util::type_list<
275-
erase_pattern< hl::LabelDeclOp >,
276-
label_stmt
277-
>;
236+
using label_patterns = util::type_list< erase_pattern< hl::LabelDeclOp >, label_stmt >;
278237

279238
// TODO(conv): Figure out if these can be somehow unified.
280-
using inline_region_from_op_conversions = util::type_list<
281-
inline_region_from_op< hl::TranslationUnitOp >,
282-
scope_op
283-
>;
239+
using inline_region_from_op_conversions =
240+
util::type_list< inline_region_from_op< hl::TranslationUnitOp >, scope_op >;
284241

285242
struct subscript : base_pattern< hl::SubscriptOp >
286243
{

0 commit comments

Comments
 (0)