aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKushal Pal <kushalpal109@gmail.com>2024-08-19 10:06:49 +0000
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2024-09-09 08:33:02 +0000
commit1fcfec23a452427f6fd8596ee6345cf7bb49dd97 (patch)
tree9996f7542bf122c5ef8468b415b3cc198cb6a4bd /gcc
parent5f42a91bd2b308da2d78912f899dff871598b23e (diff)
downloadgcc-1fcfec23a452427f6fd8596ee6345cf7bb49dd97.zip
gcc-1fcfec23a452427f6fd8596ee6345cf7bb49dd97.tar.gz
gcc-1fcfec23a452427f6fd8596ee6345cf7bb49dd97.tar.bz2
Used `IndexVec` for BasicBlocks
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit): Use strong type as index and remove access to numeric value. * checks/errors/borrowck/rust-bir-builder-internal.h (struct BuilderContext): Likewise. * checks/errors/borrowck/rust-bir-dump.cc (simplify_cfg): Likewise. (Dump::go): Likewise. (Dump::visit): Likewise. * checks/errors/borrowck/rust-bir-fact-collector.h (class FactCollector): Likewise. (points): Likewise. * checks/errors/borrowck/rust-bir.h (struct BasicBlockId): Used IndexVec for BasicBlocks. (struct Function): Likewise. * checks/errors/borrowck/rust-borrow-checker-diagnostics.cc (BorrowCheckerDiagnostics::get_statement): Change the extracted index to strong type. Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc6
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h6
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-bir-dump.cc19
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h6
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-bir.h4
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc4
6 files changed, 22 insertions, 23 deletions
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc b/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
index 5014566..c11cff0 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
@@ -565,7 +565,7 @@ ExprStmtBuilder::visit (HIR::IfExpr &expr)
add_jump (if_block, then_start_block);
add_jump (if_block, final_block);
- auto &then_end_bb = ctx.basic_blocks[then_end_block.value];
+ auto &then_end_bb = ctx.basic_blocks[then_end_block];
if (then_end_bb.is_goto_terminated () && then_end_bb.successors.empty ())
add_jump (then_end_block, final_block);
}
@@ -602,11 +602,11 @@ ExprStmtBuilder::visit (HIR::IfExprConseqElse &expr)
add_jump (if_end_bb, then_start_bb);
add_jump (if_end_bb, else_start_bb);
- auto &then_bb = ctx.basic_blocks[then_end_bb.value];
+ auto &then_bb = ctx.basic_blocks[then_end_bb];
if (then_bb.is_goto_terminated () && then_bb.successors.empty ())
add_jump (then_end_bb, final_start_bb);
- auto &else_bb = ctx.basic_blocks[else_end_bb.value];
+ auto &else_bb = ctx.basic_blocks[else_end_bb];
if (else_bb.is_goto_terminated () && else_bb.successors.empty ())
add_jump (else_end_bb, final_start_bb);
}
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h b/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
index 694b2d6..8de6b8b 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
@@ -76,7 +76,7 @@ struct BuilderContext
Resolver::Resolver &resolver;
// BIR output
- std::vector<BasicBlock> basic_blocks;
+ BasicBlocks basic_blocks;
BasicBlockId current_bb = ENTRY_BASIC_BLOCK;
/**
@@ -107,7 +107,7 @@ public:
basic_blocks.emplace_back (); // StartBB
}
- BasicBlock &get_current_bb () { return basic_blocks[current_bb.value]; }
+ BasicBlock &get_current_bb () { return basic_blocks[current_bb]; }
const LoopAndLabelCtx &lookup_label (NodeId label)
{
@@ -378,7 +378,7 @@ protected: // CFG helpers
void add_jump (BasicBlockId from, BasicBlockId to)
{
- ctx.basic_blocks[from.value].successors.emplace_back (to);
+ ctx.basic_blocks[from].successors.emplace_back (to);
}
void add_jump_to (BasicBlockId bb) { add_jump (ctx.current_bb, bb); }
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-dump.cc b/gcc/rust/checks/errors/borrowck/rust-bir-dump.cc
index 86bc5b1..5bcf224 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-dump.cc
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-dump.cc
@@ -84,7 +84,7 @@ simplify_cfg (Function &func, std::vector<BasicBlockId> &bb_fold_map)
// BB0 cannot be folded as it is an entry block.
for (BasicBlockId i = {1}; i.value < func.basic_blocks.size (); ++i.value)
{
- const BasicBlock &bb = func.basic_blocks[bb_fold_map[i.value].value];
+ const BasicBlock &bb = func.basic_blocks[bb_fold_map[i.value]];
if (bb.statements.empty () && bb.is_goto_terminated ())
{
auto dst = bb.successors.at (0);
@@ -149,13 +149,13 @@ Dump::go (bool enable_simplify_cfg)
if (bb_fold_map[statement_bb.value] != statement_bb)
continue; // This BB was folded.
- if (func.basic_blocks[statement_bb.value].statements.empty ()
- && func.basic_blocks[statement_bb.value].successors.empty ())
+ if (func.basic_blocks[statement_bb].statements.empty ()
+ && func.basic_blocks[statement_bb].successors.empty ())
continue;
bb_terminated = false;
- BasicBlock &bb = func.basic_blocks[statement_bb.value];
+ BasicBlock &bb = func.basic_blocks[statement_bb];
stream << "\n";
stream << indentation << "bb" << bb_fold_map[statement_bb.value].value
<< ": {\n";
@@ -192,8 +192,7 @@ Dump::visit (const Statement &stmt)
stream << "switchInt(";
visit_move_place (stmt.get_place ());
stream << ") -> [";
- print_comma_separated (stream,
- func.basic_blocks[statement_bb.value].successors,
+ print_comma_separated (stream, func.basic_blocks[statement_bb].successors,
[this] (BasicBlockId succ) {
stream << "bb" << bb_fold_map[succ.value].value;
});
@@ -207,9 +206,8 @@ Dump::visit (const Statement &stmt)
case Statement::Kind::GOTO:
stream
<< "goto -> bb"
- << bb_fold_map
- [func.basic_blocks[statement_bb.value].successors.at (0).value]
- .value;
+ << bb_fold_map[func.basic_blocks[statement_bb].successors.at (0).value]
+ .value;
bb_terminated = true;
break;
case Statement::Kind::STORAGE_DEAD:
@@ -329,8 +327,7 @@ Dump::visit (const CallExpr &expr)
visit_move_place (place_id);
});
stream << ") -> [";
- print_comma_separated (stream,
- func.basic_blocks[statement_bb.value].successors,
+ print_comma_separated (stream, func.basic_blocks[statement_bb].successors,
[this] (BasicBlockId succ) {
stream << "bb" << bb_fold_map[succ.value].value;
});
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h b/gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h
index 0d59f80..0c3e733 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h
@@ -40,7 +40,7 @@ class FactCollector : public Visitor
// Read-only context.
const PlaceDB &place_db;
- const std::vector<BasicBlock> &basic_blocks;
+ const BasicBlocks &basic_blocks;
const PlaceId first_local;
const location_t location;
@@ -212,7 +212,7 @@ protected: // Main collection entry points (for different categories).
for (current_bb = ENTRY_BASIC_BLOCK;
current_bb.value < basic_blocks.size (); ++current_bb.value)
{
- auto &bb = basic_blocks[current_bb.value];
+ auto &bb = basic_blocks[current_bb];
for (current_stmt = 0; current_stmt < bb.statements.size ();
++current_stmt)
{
@@ -393,7 +393,7 @@ protected: // Main collection entry points (for different categories).
protected: // Statement visitor helpers
WARN_UNUSED_RESULT const BasicBlock &get_current_bb () const
{
- return basic_blocks[current_bb.value];
+ return basic_blocks[current_bb];
}
WARN_UNUSED_RESULT static Polonius::Point
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir.h b/gcc/rust/checks/errors/borrowck/rust-bir.h
index 4bfc147..e303a84 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir.h
+++ b/gcc/rust/checks/errors/borrowck/rust-bir.h
@@ -30,6 +30,8 @@ namespace Rust {
namespace BIR {
struct BasicBlock;
+struct BasicBlockId;
+using BasicBlocks = IndexVec<BasicBlockId, BasicBlock>;
class Statement;
class AbstractExpr;
@@ -42,7 +44,7 @@ struct Function
{
PlaceDB place_db;
std::vector<PlaceId> arguments;
- std::vector<BasicBlock> basic_blocks;
+ BasicBlocks basic_blocks;
FreeRegions universal_regions;
std::vector<std::pair<FreeRegion, FreeRegion>> universal_region_bounds;
std::unordered_map<Polonius::Origin, HIR::LifetimeParam *> region_hir_map;
diff --git a/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc b/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
index 4002ed4..6c67706 100644
--- a/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
+++ b/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
@@ -135,8 +135,8 @@ BorrowCheckerDiagnostics::get_statement (Polonius::Point point)
// assert that the extracted indexes are valid
rust_assert (bb_index < bir_function.basic_blocks.size ());
rust_assert (statement_index
- < bir_function.basic_blocks[bb_index].statements.size ());
- return bir_function.basic_blocks[bb_index].statements[statement_index];
+ < bir_function.basic_blocks[{bb_index}].statements.size ());
+ return bir_function.basic_blocks[{bb_index}].statements[statement_index];
}
const BIR::Loan &