Merge pull request #2278 from AleoHQ/feat/dead-code-elimination

[Feature] Dead Code Elimination
This commit is contained in:
d0cd 2023-03-21 09:47:32 -07:00 committed by GitHub
commit 3dc56f5058
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
393 changed files with 1097 additions and 84 deletions

View File

@ -65,7 +65,7 @@ pub trait ExpressionReconstructor {
index: tuple.index,
span: tuple.span,
}),
expr => expr,
AccessExpression::AssociatedConstant(constant) => AccessExpression::AssociatedConstant(constant),
}),
Default::default(),
)
@ -255,12 +255,13 @@ pub trait StatementReconstructor: ExpressionReconstructor {
)
}
// TODO: Reconstructor should visit this.
fn reconstruct_decrement(&mut self, input: DecrementStatement) -> (Statement, Self::AdditionalOutput) {
(
Statement::Decrement(DecrementStatement {
mapping: input.mapping,
index: input.index,
amount: input.amount,
index: input.index,
span: input.span,
}),
Default::default(),
@ -290,6 +291,7 @@ pub trait StatementReconstructor: ExpressionReconstructor {
)
}
// TODO: Reconstructor should visit this.
fn reconstruct_increment(&mut self, input: IncrementStatement) -> (Statement, Self::AdditionalOutput) {
(
Statement::Increment(IncrementStatement {

View File

@ -25,6 +25,7 @@ use std::fmt;
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
pub struct AssignStatement {
/// The place to assign to.
/// Note that `place` can either be an identifier or tuple.
pub place: Expression,
/// The value to assign to the `assignee`.
pub value: Expression,

View File

@ -30,7 +30,7 @@ use sha2::{Digest, Sha256};
use std::fs;
use std::path::PathBuf;
use crate::OutputOptions;
use crate::CompilerOptions;
/// The primary entry point of the Leo compiler.
#[derive(Clone)]
@ -49,8 +49,8 @@ pub struct Compiler<'a> {
pub ast: Ast,
/// The input ast for the program if it exists.
pub input_ast: Option<InputAst>,
/// Compiler options on some optional output files.
output_options: OutputOptions,
/// Options configuring compilation.
compiler_options: CompilerOptions,
}
impl<'a> Compiler<'a> {
@ -61,7 +61,7 @@ impl<'a> Compiler<'a> {
handler: &'a Handler,
main_file_path: PathBuf,
output_directory: PathBuf,
output_options: Option<OutputOptions>,
compiler_options: Option<CompilerOptions>,
) -> Self {
Self {
handler,
@ -71,7 +71,7 @@ impl<'a> Compiler<'a> {
network,
ast: Ast::new(Program::default()),
input_ast: None,
output_options: output_options.unwrap_or_default(),
compiler_options: compiler_options.unwrap_or_default(),
}
}
@ -111,7 +111,7 @@ impl<'a> Compiler<'a> {
.into());
}
if self.output_options.initial_ast {
if self.compiler_options.initial_ast {
self.write_ast_to_json("initial_ast.json")?;
}
@ -136,9 +136,9 @@ impl<'a> Compiler<'a> {
// Parse and serialize it.
let input_ast = leo_parser::parse_input(self.handler, &input_sf.src, input_sf.start_pos)?;
if self.output_options.initial_ast {
if self.compiler_options.initial_ast {
// Write the input AST snapshot post parsing.
if self.output_options.spans_enabled {
if self.compiler_options.spans_enabled {
input_ast.to_json_file(
self.output_directory.clone(),
&format!("{}.initial_input_ast.json", self.program_name),
@ -172,7 +172,7 @@ impl<'a> Compiler<'a> {
let (ast, symbol_table) = Unroller::do_pass((std::mem::take(&mut self.ast), self.handler, symbol_table))?;
self.ast = ast;
if self.output_options.unrolled_ast {
if self.compiler_options.unrolled_ast {
self.write_ast_to_json("unrolled_ast.json")?;
}
@ -184,7 +184,7 @@ impl<'a> Compiler<'a> {
let (ast, assigner) = StaticSingleAssigner::do_pass((std::mem::take(&mut self.ast), symbol_table))?;
self.ast = ast;
if self.output_options.ssa_ast {
if self.compiler_options.ssa_ast {
self.write_ast_to_json("ssa_ast.json")?;
}
@ -196,7 +196,7 @@ impl<'a> Compiler<'a> {
let (ast, assigner) = Flattener::do_pass((std::mem::take(&mut self.ast), symbol_table, assigner))?;
self.ast = ast;
if self.output_options.flattened_ast {
if self.compiler_options.flattened_ast {
self.write_ast_to_json("flattened_ast.json")?;
}
@ -208,13 +208,36 @@ impl<'a> Compiler<'a> {
let (ast, assigner) = FunctionInliner::do_pass((std::mem::take(&mut self.ast), call_graph, assigner))?;
self.ast = ast;
if self.output_options.inlined_ast {
if self.compiler_options.inlined_ast {
self.write_ast_to_json("inlined_ast.json")?;
}
Ok(assigner)
}
/// Runs the dead code elimination pass.
pub fn dead_code_elimination_pass(&mut self) -> Result<()> {
if self.compiler_options.dce_enabled {
self.ast = DeadCodeEliminator::do_pass(std::mem::take(&mut self.ast))?;
}
if self.compiler_options.dce_ast {
self.write_ast_to_json("dce_ast.json")?;
}
Ok(())
}
/// Runs the code generation pass.
pub fn code_generation_pass(
&mut self,
symbol_table: &SymbolTable,
struct_graph: &StructGraph,
call_graph: &CallGraph,
) -> Result<String> {
CodeGenerator::do_pass((&self.ast, symbol_table, struct_graph, call_graph))
}
/// Runs the compiler stages.
pub fn compiler_stages(&mut self) -> Result<(SymbolTable, StructGraph, CallGraph)> {
let st = self.symbol_table_pass()?;
@ -230,30 +253,26 @@ impl<'a> Compiler<'a> {
let _ = self.function_inlining_pass(&call_graph, assigner)?;
self.dead_code_elimination_pass()?;
Ok((st, struct_graph, call_graph))
}
/// Returns a compiled Leo program and prints the resulting bytecode.
// TODO: Remove when code generation is ready to be integrated into the compiler.
pub fn compile_and_generate_instructions(&mut self) -> Result<(SymbolTable, String)> {
self.parse_program()?;
let (symbol_table, struct_graph, call_graph) = self.compiler_stages()?;
let bytecode = CodeGenerator::do_pass((&self.ast, &symbol_table, &struct_graph, &call_graph))?;
Ok((symbol_table, bytecode))
}
/// Returns a compiled Leo program.
pub fn compile(&mut self) -> Result<SymbolTable> {
pub fn compile(&mut self) -> Result<(SymbolTable, String)> {
// Parse the program.
self.parse_program()?;
self.compiler_stages().map(|(st, _, _)| st)
// Run the intermediate compiler stages.
let (symbol_table, struct_graph, call_graph) = self.compiler_stages()?;
// Run code generation.
let bytecode = self.code_generation_pass(&symbol_table, &struct_graph, &call_graph)?;
Ok((symbol_table, bytecode))
}
/// Writes the AST to a JSON file.
fn write_ast_to_json(&self, file_suffix: &str) -> Result<()> {
// Remove `Span`s if they are not enabled.
if self.output_options.spans_enabled {
if self.compiler_options.spans_enabled {
self.ast.to_json_file(
self.output_directory.clone(),
&format!("{}.{file_suffix}", self.program_name),

View File

@ -17,9 +17,11 @@
// NOTE: If compiler passes are made optional, pass preconditions and invariants may not necessarily hold true.
#[derive(Clone, Default)]
pub struct OutputOptions {
pub struct CompilerOptions {
/// Whether spans are enabled in the output ASTs.
pub spans_enabled: bool,
/// Whether to enable dead code elimination.
pub dce_enabled: bool,
/// If enabled writes the AST after parsing.
pub initial_ast: bool,
/// If enabled writes the input AST after parsing.
@ -32,4 +34,6 @@ pub struct OutputOptions {
pub flattened_ast: bool,
/// If enabled writes the AST after inlining.
pub inlined_ast: bool,
/// If enabled writes the AST after dead code elimination.
pub dce_ast: bool,
}

View File

@ -54,6 +54,7 @@ struct CompileOutput {
pub ssa_ast: String,
pub flattened_ast: String,
pub inlined_ast: String,
pub dce_ast: String,
pub bytecode: String,
}
@ -75,7 +76,7 @@ fn run_test(test: Test, handler: &Handler) -> Result<Value, ()> {
handler.extend_if_error(package.get_process().map_err(LeoError::Anyhow))?;
// Hash the ast files.
let (initial_ast, unrolled_ast, ssa_ast, flattened_ast, inlined_ast) = hash_asts();
let (initial_ast, unrolled_ast, ssa_ast, flattened_ast, inlined_ast, dce_ast) = hash_asts();
// Clean up the output directory.
if fs::read_dir("/tmp/output").is_ok() {
@ -88,6 +89,7 @@ fn run_test(test: Test, handler: &Handler) -> Result<Value, ()> {
ssa_ast,
flattened_ast,
inlined_ast,
dce_ast,
bytecode: hash_content(&bytecode),
};
Ok(serde_yaml::to_value(final_output).expect("serialization failed"))

View File

@ -61,6 +61,7 @@ struct ExecuteOutput {
pub ssa_ast: String,
pub flattened_ast: String,
pub inlined_ast: String,
pub dce_ast: String,
pub bytecode: String,
pub results: BTreeMap<String, Vec<BTreeMap<String, String>>>,
}
@ -161,7 +162,7 @@ fn run_test(test: Test, handler: &Handler, err_buf: &BufferEmitter) -> Result<Va
}
// Hash the ast files.
let (initial_ast, unrolled_ast, ssa_ast, flattened_ast, inlined_ast) = hash_asts();
let (initial_ast, unrolled_ast, ssa_ast, flattened_ast, inlined_ast, dce_ast) = hash_asts();
// Clean up the output directory.
if fs::read_dir("/tmp/output").is_ok() {
@ -174,6 +175,7 @@ fn run_test(test: Test, handler: &Handler, err_buf: &BufferEmitter) -> Result<Va
ssa_ast,
flattened_ast,
inlined_ast,
dce_ast,
bytecode: hash_content(&bytecode),
results,
};

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use leo_compiler::{Compiler, OutputOptions};
use leo_compiler::{Compiler, CompilerOptions};
use leo_errors::{
emitter::{Buffer, Emitter, Handler},
LeoError, LeoWarning,
@ -39,14 +39,15 @@ pub type Network = Testnet3;
#[allow(unused)]
pub type Aleo = snarkvm::circuit::AleoV0;
pub fn hash_asts() -> (String, String, String, String, String) {
pub fn hash_asts() -> (String, String, String, String, String, String) {
let initial_ast = hash_file("/tmp/output/test.initial_ast.json");
let unrolled_ast = hash_file("/tmp/output/test.unrolled_ast.json");
let ssa_ast = hash_file("/tmp/output/test.ssa_ast.json");
let flattened_ast = hash_file("/tmp/output/test.flattened_ast.json");
let inlined_ast = hash_file("/tmp/output/test.inlined_ast.json");
let dce_ast = hash_file("/tmp/output/test.dce_ast.json");
(initial_ast, unrolled_ast, ssa_ast, flattened_ast, inlined_ast)
(initial_ast, unrolled_ast, ssa_ast, flattened_ast, inlined_ast, dce_ast)
}
pub fn get_cwd_option(test: &Test) -> Option<PathBuf> {
@ -94,14 +95,16 @@ pub fn new_compiler(handler: &Handler, main_file_path: PathBuf) -> Compiler<'_>
handler,
main_file_path,
output_dir,
Some(OutputOptions {
Some(CompilerOptions {
spans_enabled: false,
dce_enabled: true,
initial_input_ast: true,
initial_ast: true,
unrolled_ast: true,
ssa_ast: true,
flattened_ast: true,
inlined_ast: true,
dce_ast: true,
}),
)
}
@ -196,6 +199,8 @@ pub fn compile_and_process<'a>(parsed: &'a mut Compiler<'a>) -> Result<String, L
let _ = parsed.function_inlining_pass(&call_graph, assigner)?;
parsed.dead_code_elimination_pass()?;
// Compile Leo program to bytecode.
let bytecode = CodeGenerator::do_pass((&parsed.ast, &st, &struct_graph, &call_graph))?;

View File

@ -0,0 +1,37 @@
// Copyright (C) 2019-2023 Aleo Systems Inc.
// This file is part of the Leo library.
// The Leo library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// The Leo library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use leo_span::Symbol;
use indexmap::IndexSet;
#[derive(Default)]
pub struct DeadCodeEliminator {
/// The set of used variables in the current function body.
pub(crate) used_variables: IndexSet<Symbol>,
/// Whether or not the variables are necessary.
pub(crate) is_necessary: bool,
}
impl DeadCodeEliminator {
/// Initializes a new `DeadCodeEliminator`.
pub fn new() -> Self {
Self {
used_variables: Default::default(),
is_necessary: false,
}
}
}

View File

@ -0,0 +1,58 @@
// Copyright (C) 2019-2023 Aleo Systems Inc.
// This file is part of the Leo library.
// The Leo library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// The Leo library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use crate::DeadCodeEliminator;
use leo_ast::{Expression, ExpressionReconstructor, Identifier, StructExpression, StructVariableInitializer};
impl ExpressionReconstructor for DeadCodeEliminator {
type AdditionalOutput = ();
/// Reconstruct the components of the struct init expression.
/// This is necessary since the reconstructor does not explicitly visit each component of the expression.
fn reconstruct_struct_init(&mut self, input: StructExpression) -> (Expression, Self::AdditionalOutput) {
(
Expression::Struct(StructExpression {
name: input.name,
// Reconstruct each of the struct members.
members: input
.members
.into_iter()
.map(|member| StructVariableInitializer {
identifier: member.identifier,
expression: match member.expression {
Some(expression) => Some(self.reconstruct_expression(expression).0),
None => unreachable!("Static single assignment ensures that the expression always exists."),
},
})
.collect(),
span: input.span,
}),
Default::default(),
)
}
/// Marks identifiers as used.
/// This is necessary to determine which statements can be eliminated from the program.
fn reconstruct_identifier(&mut self, input: Identifier) -> (Expression, Self::AdditionalOutput) {
// Add the identifier to `self.used_variables`.
if self.is_necessary {
self.used_variables.insert(input.name);
}
// Return the identifier as is.
(Expression::Identifier(input), Default::default())
}
}

View File

@ -0,0 +1,61 @@
// Copyright (C) 2019-2023 Aleo Systems Inc.
// This file is part of the Leo library.
// The Leo library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// The Leo library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use crate::DeadCodeEliminator;
use leo_ast::{Finalize, Function, ProgramReconstructor, StatementReconstructor};
impl ProgramReconstructor for DeadCodeEliminator {
fn reconstruct_function(&mut self, input: Function) -> Function {
// Reset the state of the dead code eliminator.
self.used_variables.clear();
self.is_necessary = false;
// Traverse the function body.
let block = self.reconstruct_block(input.block).0;
// Reconstruct the finalize block, if it exists.
let finalize = input.finalize.map(|finalize| {
// Reset the state of the dead code eliminator.
self.used_variables.clear();
self.is_necessary = false;
// Traverse the finalize block.
let block = self.reconstruct_block(finalize.block).0;
Finalize {
identifier: finalize.identifier,
input: finalize.input,
output: finalize.output,
output_type: finalize.output_type,
block,
span: finalize.span,
}
});
Function {
annotations: input.annotations,
variant: input.variant,
identifier: input.identifier,
input: input.input,
output: input.output,
output_type: input.output_type,
block,
finalize,
span: input.span,
}
}
}

View File

@ -0,0 +1,216 @@
// Copyright (C) 2019-2023 Aleo Systems Inc.
// This file is part of the Leo library.
// The Leo library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// The Leo library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use crate::DeadCodeEliminator;
use leo_ast::{
AssertStatement, AssertVariant, AssignStatement, Block, ConditionalStatement, ConsoleStatement, DecrementStatement,
DefinitionStatement, Expression, ExpressionReconstructor, ExpressionStatement, IncrementStatement,
IterationStatement, ReturnStatement, Statement, StatementReconstructor,
};
impl StatementReconstructor for DeadCodeEliminator {
fn reconstruct_assert(&mut self, input: AssertStatement) -> (Statement, Self::AdditionalOutput) {
// Set the `is_necessary` flag.
self.is_necessary = true;
// Visit the statement.
let statement = Statement::Assert(AssertStatement {
variant: match input.variant {
AssertVariant::Assert(expr) => AssertVariant::Assert(self.reconstruct_expression(expr).0),
AssertVariant::AssertEq(left, right) => AssertVariant::AssertEq(
self.reconstruct_expression(left).0,
self.reconstruct_expression(right).0,
),
AssertVariant::AssertNeq(left, right) => AssertVariant::AssertNeq(
self.reconstruct_expression(left).0,
self.reconstruct_expression(right).0,
),
},
span: input.span,
});
// Unset the `is_necessary` flag.
self.is_necessary = false;
(statement, Default::default())
}
/// Reconstruct an assignment statement by eliminating any dead code.
fn reconstruct_assign(&mut self, input: AssignStatement) -> (Statement, Self::AdditionalOutput) {
// Check the lhs of the assignment to see any of variables are used.
let lhs_is_used = match &input.place {
Expression::Identifier(identifier) => self.used_variables.contains(&identifier.name),
Expression::Tuple(tuple_expression) => tuple_expression
.elements
.iter()
.map(|element| match element {
Expression::Identifier(identifier) => identifier.name,
_ => unreachable!(
"The previous compiler passes guarantee the tuple elements on the lhs are identifiers."
),
})
.any(|symbol| self.used_variables.contains(&symbol)),
_ => unreachable!(
"The previous compiler passes guarantee that `place` is either an identifier or tuple of identifiers."
),
};
match lhs_is_used {
// If the lhs is used, then we return the original statement.
true => {
// Set the `is_necessary` flag.
self.is_necessary = true;
// Visit the statement.
let statement = Statement::Assign(Box::new(AssignStatement {
place: input.place,
value: self.reconstruct_expression(input.value).0,
span: input.span,
}));
// Unset the `is_necessary` flag.
self.is_necessary = false;
(statement, Default::default())
}
// Otherwise, we can eliminate it.
false => (Statement::dummy(Default::default()), Default::default()),
}
}
/// Reconstructs the statements inside a basic block, eliminating any dead code.
fn reconstruct_block(&mut self, block: Block) -> (Block, Self::AdditionalOutput) {
// Reconstruct each of the statements in reverse.
let mut statements: Vec<Statement> = block
.statements
.into_iter()
.rev()
.map(|statement| self.reconstruct_statement(statement).0)
.collect();
// Reverse the direction of `statements`.
statements.reverse();
(
Block {
statements,
span: block.span,
},
Default::default(),
)
}
/// Flattening removes conditional statements from the program.
fn reconstruct_conditional(&mut self, _: ConditionalStatement) -> (Statement, Self::AdditionalOutput) {
unreachable!("`ConditionalStatement`s should not be in the AST at this phase of compilation.")
}
/// Parsing guarantees that console statements are not present in the program.
fn reconstruct_console(&mut self, _: ConsoleStatement) -> (Statement, Self::AdditionalOutput) {
unreachable!("`ConsoleStatement`s should not be in the AST at this phase of compilation.")
}
fn reconstruct_decrement(&mut self, input: DecrementStatement) -> (Statement, Self::AdditionalOutput) {
// Set the `is_necessary` flag.
self.is_necessary = true;
// Visit the statement.
let statement = Statement::Decrement(DecrementStatement {
mapping: input.mapping,
index: self.reconstruct_expression(input.index).0,
amount: self.reconstruct_expression(input.amount).0,
span: input.span,
});
// Unset the `is_necessary` flag.
self.is_necessary = false;
(statement, Default::default())
}
/// Static single assignment replaces definition statements with assignment statements.
fn reconstruct_definition(&mut self, _: DefinitionStatement) -> (Statement, Self::AdditionalOutput) {
unreachable!("`DefinitionStatement`s should not exist in the AST at this phase of compilation.")
}
/// Reconstructs expression statements by eliminating any dead code.
fn reconstruct_expression_statement(&mut self, input: ExpressionStatement) -> (Statement, Self::AdditionalOutput) {
match input.expression {
Expression::Call(expression) => {
// Set the `is_necessary` flag.
self.is_necessary = true;
// Visit the expression.
let statement = Statement::Expression(ExpressionStatement {
expression: self.reconstruct_call(expression).0,
span: input.span,
});
// Unset the `is_necessary` flag.
self.is_necessary = false;
(statement, Default::default())
}
_ => unreachable!("Type checking guarantees that expression statements are always function calls."),
}
}
fn reconstruct_increment(&mut self, input: IncrementStatement) -> (Statement, Self::AdditionalOutput) {
// Set the `is_necessary` flag.
self.is_necessary = true;
// Visit the statement.
let statement = Statement::Increment(IncrementStatement {
mapping: input.mapping,
index: self.reconstruct_expression(input.index).0,
amount: self.reconstruct_expression(input.amount).0,
span: input.span,
});
// Unset the `is_necessary` flag.
self.is_necessary = false;
(statement, Default::default())
}
/// Loop unrolling unrolls and removes iteration statements from the program.
fn reconstruct_iteration(&mut self, _: IterationStatement) -> (Statement, Self::AdditionalOutput) {
unreachable!("`IterationStatement`s should not be in the AST at this phase of compilation.");
}
fn reconstruct_return(&mut self, input: ReturnStatement) -> (Statement, Self::AdditionalOutput) {
// Set the `is_necessary` flag.
self.is_necessary = true;
// Visit the statement.
let statement = Statement::Return(ReturnStatement {
expression: self.reconstruct_expression(input.expression).0,
finalize_arguments: input.finalize_arguments.map(|arguments| {
arguments
.into_iter()
.map(|argument| self.reconstruct_expression(argument).0)
.collect()
}),
span: input.span,
});
// Unset the `is_necessary` flag.
self.is_necessary = false;
(statement, Default::default())
}
}

View File

@ -0,0 +1,76 @@
// Copyright (C) 2019-2023 Aleo Systems Inc.
// This file is part of the Leo library.
// The Leo library is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// The Leo library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
//! The Dead Code Elimination pass traverses the AST and eliminates unused code,
//! specifically assignment statements, within the boundary of `transition`s and `function`s.
//! The pass is run after the Function Inlining pass.
//!
//! See https://en.wikipedia.org/wiki/Dead-code_elimination for more information.
//!
//! Consider the following flattened Leo code.
//! ```leo
//! function main(flag: u8, value: u8) -> u8 {
//! $var$0 = flag == 0u8;
//! $var$4$5 = value * value;
//! $var$1 = $var$4$5;
//! value$2 = $var$1;
//! value$3 = $var$0 ? value$2 : value;
//! value$6 = $var$1 * $var$1;
//! return value$3;
//! }
//! ```
//!
//! The dead code elimination pass produces the following code.
//! ```leo
//! function main(flag: u8, value: u8) -> u8 {
//! $var$0 = flag == 0u8;
//! $var$4$5 = value * value;
//! $var$1 = $var$4$5;
//! value$2 = $var$1;
//! value$3 = $var$0 ? value$2 : value;
//! return value$3;
//! }
//! ```
//! Note this pass relies on the following invariants:
//! - No shadowing for all variables, struct names, function names, etc.
//! - Unique variable names (provided by SSA)
//! - Flattened code (provided by the flattening pass)
mod eliminate_expression;
mod eliminate_statement;
mod eliminate_program;
pub mod dead_code_eliminator;
pub use dead_code_eliminator::*;
use crate::Pass;
use leo_ast::{Ast, ProgramReconstructor};
use leo_errors::Result;
impl Pass for DeadCodeEliminator {
type Input = Ast;
type Output = Result<Ast>;
fn do_pass(ast: Self::Input) -> Self::Output {
let mut reconstructor = DeadCodeEliminator::new();
let program = reconstructor.reconstruct_program(ast.into_repr());
Ok(Ast::new(program))
}
}

View File

@ -23,6 +23,9 @@ pub use code_generation::*;
pub mod common;
pub use common::*;
pub mod dead_code_elimination;
pub use dead_code_elimination::*;
pub mod flattening;
pub use flattening::*;

View File

@ -18,7 +18,7 @@ use crate::commands::ALEO_CLI_COMMAND;
use crate::{commands::Command, context::Context};
use leo_ast::Struct;
use leo_compiler::{Compiler, InputAst, OutputOptions};
use leo_compiler::{Compiler, CompilerOptions, InputAst};
use leo_errors::{CliError, CompilerError, PackageError, Result};
use leo_package::source::SourceDirectory;
use leo_package::{inputs::InputFile, outputs::OutputsDirectory};
@ -46,6 +46,8 @@ pub struct BuildOptions {
pub offline: bool,
#[structopt(long, help = "Enable spans in AST snapshots.")]
pub enable_spans: bool,
#[structopt(long, help = "Enables dead code elimination in the compiler.")]
pub enable_dce: bool,
#[structopt(long, help = "Writes all AST snapshots for the different compiler phases.")]
pub enable_all_ast_snapshots: bool,
#[structopt(long, help = "Writes Input AST snapshot of the initial parse.")]
@ -60,18 +62,22 @@ pub struct BuildOptions {
pub enable_flattened_ast_snapshot: bool,
#[structopt(long, help = "Writes AST snapshot of the inlined AST.")]
pub enable_inlined_ast_snapshot: bool,
#[structopt(long, help = "Writes AST snapshot of the dead code eliminated (DCE) AST.")]
pub enable_dce_ast_snapshot: bool,
}
impl From<BuildOptions> for OutputOptions {
impl From<BuildOptions> for CompilerOptions {
fn from(options: BuildOptions) -> Self {
let mut out_options = Self {
spans_enabled: options.enable_spans,
dce_enabled: options.enable_dce,
initial_input_ast: options.enable_initial_input_ast_snapshot,
initial_ast: options.enable_initial_ast_snapshot,
unrolled_ast: options.enable_unrolled_ast_snapshot,
ssa_ast: options.enable_ssa_ast_snapshot,
flattened_ast: options.enable_flattened_ast_snapshot,
inlined_ast: options.enable_inlined_ast_snapshot,
dce_ast: options.enable_dce_ast_snapshot,
};
if options.enable_all_ast_snapshots {
out_options.initial_input_ast = true;
@ -80,6 +86,7 @@ impl From<BuildOptions> for OutputOptions {
out_options.ssa_ast = true;
out_options.flattened_ast = true;
out_options.inlined_ast = true;
out_options.dce_ast = true;
}
out_options
@ -90,7 +97,7 @@ impl From<BuildOptions> for OutputOptions {
#[derive(StructOpt, Debug)]
pub struct Build {
#[structopt(flatten)]
pub(crate) compiler_options: BuildOptions,
pub(crate) options: BuildOptions,
}
impl Command for Build {
@ -140,7 +147,7 @@ impl Command for Build {
&outputs_directory,
&build_directory,
&handler,
self.compiler_options.clone(),
self.options.clone(),
false,
)?);
}
@ -161,7 +168,7 @@ impl Command for Build {
&outputs_directory,
&build_imports_directory,
&handler,
self.compiler_options.clone(),
self.options.clone(),
true,
)?);
}
@ -193,7 +200,7 @@ impl Command for Build {
// Call the `aleo build` command with the appropriate from the Aleo SDK.
let mut args = vec![ALEO_CLI_COMMAND];
if self.compiler_options.offline {
if self.options.offline {
args.push("--offline");
}
let command = AleoBuild::try_parse_from(&args).map_err(CliError::failed_to_execute_aleo_build)?;
@ -252,7 +259,7 @@ fn compile_leo_file(
);
// Compile the Leo program into Aleo instructions.
let (symbol_table, instructions) = compiler.compile_and_generate_instructions()?;
let (symbol_table, instructions) = compiler.compile()?;
// Write the instructions.
std::fs::File::create(&aleo_file_path)

View File

@ -54,7 +54,7 @@ impl Command for Run {
fn prelude(&self, context: Context) -> Result<Self::Input> {
(Build {
compiler_options: self.compiler_options.clone(),
options: self.compiler_options.clone(),
})
.execute(context)
}

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 71af510447b440ecf9517b244604dead0fb36905201d7205e1da396acd0de0fe
flattened_ast: 5b0842e447b4e1f92f4bcd22824ed5e12c51c8db145d1541763d10ad3dc1f37a
inlined_ast: 5b0842e447b4e1f92f4bcd22824ed5e12c51c8db145d1541763d10ad3dc1f37a
bytecode: eada90968195512a17847ed966d0bef43b7011c18ceee417a3cdb02a1190ca52
dce_ast: 946b0fe81e942060d870c228afb1a31c42501fb8f9c481d35d7908b226af5cbe
bytecode: 31bab7a79a7dfdfbcd4a7a3f26cd813b48d7c1438dec3fd4905a81845161dba1

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 0d44a08f0cace01d86fec36ea409e6424ff21f9ee8834f53062569af8c35579e
flattened_ast: c1b6954bff1ce18c0bb3be1cd6392a554a15989c90939c99e375221b1003e3b7
inlined_ast: c1b6954bff1ce18c0bb3be1cd6392a554a15989c90939c99e375221b1003e3b7
dce_ast: c1b6954bff1ce18c0bb3be1cd6392a554a15989c90939c99e375221b1003e3b7
bytecode: b192f4b7f52da46a22cec3aec7e8c14b6e3fad7c40b9d0c0990255902fb596ef

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 96122b72b05f839341f0f808bf47523fc976c219e1284c2fad253ebc159d84ff
flattened_ast: f9458e7824444415aa9f3feec4924461f49dee915429e63dec244806d3812722
inlined_ast: f9458e7824444415aa9f3feec4924461f49dee915429e63dec244806d3812722
dce_ast: f9458e7824444415aa9f3feec4924461f49dee915429e63dec244806d3812722
bytecode: 4903abf35d22e4264aae4bf26b908108d11d981d069c247793cea817dd8851a7

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 6b09114518e99d698d0709d7b78fb8fa521e87cc98eb32af8898b344cd611b6d
flattened_ast: 1041763865cf86407bf30dae2b003ec9094e91e79c3e5b493b54fbd67cdd8f24
inlined_ast: 1041763865cf86407bf30dae2b003ec9094e91e79c3e5b493b54fbd67cdd8f24
dce_ast: 1041763865cf86407bf30dae2b003ec9094e91e79c3e5b493b54fbd67cdd8f24
bytecode: 5cbdf4a6a290f80540d2653153c57495eaf45432bc7ce44d52af2b5d0594951c

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: e0015762d1fb228999fd2ef236fae8fcf8bd6e6bbd0ce37fad230a708ca063d2
flattened_ast: 4e7759584ade51a19ff90284e5ee1ac91af6dad5cd966568b708ead553a8a4bd
inlined_ast: 4e7759584ade51a19ff90284e5ee1ac91af6dad5cd966568b708ead553a8a4bd
dce_ast: 4e7759584ade51a19ff90284e5ee1ac91af6dad5cd966568b708ead553a8a4bd
bytecode: e3deaf24a91bcb77628f7af29d4ad6d0ba67215617d6cfe753168543123ce7d2

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 42925975f1f91dc72941e3c018d6c0595824086f50fa5e6398f21649a57c6661
flattened_ast: de891bab08a157399fdceeeccc7c3d4fd70cc3f75d1ca694a4fcd0344fdaac20
inlined_ast: de891bab08a157399fdceeeccc7c3d4fd70cc3f75d1ca694a4fcd0344fdaac20
dce_ast: de891bab08a157399fdceeeccc7c3d4fd70cc3f75d1ca694a4fcd0344fdaac20
bytecode: d0d3f79c32e6cb17c98afa2f1d4861d0f71d7f805a87712b3491ef0a9e1b4892

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 453e77387be9254ded9019b6c362721f766ebf5a5b2d3604e51ae81452fac4e8
flattened_ast: b39344c70e1a23869b236146ace198addf0801b348deedfb3e4ff1e3c4ace904
inlined_ast: b39344c70e1a23869b236146ace198addf0801b348deedfb3e4ff1e3c4ace904
dce_ast: b39344c70e1a23869b236146ace198addf0801b348deedfb3e4ff1e3c4ace904
bytecode: e742ac3b95a8971f2018963aba6d915ea53205c21443d0b11ad52a42ad443b97

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 211f4122a90e6a117dc4fe2e7ca3c3e21bdc09a4c7992b212b6c34c283e896f6
flattened_ast: 84fd34b95b75f6d72b28164a9cb2ac80fa4149564c8c187b0ead1e14d2299a63
inlined_ast: 84fd34b95b75f6d72b28164a9cb2ac80fa4149564c8c187b0ead1e14d2299a63
dce_ast: 84fd34b95b75f6d72b28164a9cb2ac80fa4149564c8c187b0ead1e14d2299a63
bytecode: 1db874ad15d9bb70df7372ed3250cc6d0f65992e17788cd90c656ef1e1ceb63e

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 0ae9482705f95c26507f0040b972c76267a30eaa265f95764c758613d841932b
flattened_ast: 1e61c9d9ccdae7fb4aed4d7332538438839bef08a322f52fabcf46eac7bfc9c8
inlined_ast: 1e61c9d9ccdae7fb4aed4d7332538438839bef08a322f52fabcf46eac7bfc9c8
bytecode: 1a2170c46bb214eb8bedf2e98b58393ec0fa09051aeb52c3f59734a8da6ca5dc
dce_ast: ab80f3a28ba9de58b165074c3ffae7e5be48e721bf17219252cecc0a6fb8b6e4
bytecode: fedea8c873d237103657ba0902968bf5be3e854c95b2720b28fda529c5b87ff1

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: f1ecffe7065e9782af5bf452b6ea547bfb5026a4c56e0c3105077c85ce196216
flattened_ast: cf5034c292702654bd282c10c8d1abafed8ed328f8e6cd0a01b286438809afd5
inlined_ast: cf5034c292702654bd282c10c8d1abafed8ed328f8e6cd0a01b286438809afd5
dce_ast: cf5034c292702654bd282c10c8d1abafed8ed328f8e6cd0a01b286438809afd5
bytecode: e859520fd52dbdf69b14a3c3d9bad64bf6165084fb949912224eda3ccab9b638

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 0c66a00da3384b853fd83ecb3747abf1101af0c39849fd75af793a68537f714d
flattened_ast: 7a2b73a748d86babab5ca7a4f9e513cfd028dcbadc7df8baeb7774ffb54c1b43
inlined_ast: 7a2b73a748d86babab5ca7a4f9e513cfd028dcbadc7df8baeb7774ffb54c1b43
dce_ast: 7a2b73a748d86babab5ca7a4f9e513cfd028dcbadc7df8baeb7774ffb54c1b43
bytecode: fdc5659b97d4dbfea710ca848dcffa29bcd4da3a7a54739fb916e5292284a1a4

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 0a690ca166cfd10c1b57d3df756032f10b003cc0d006bf27f41901b6af2ce95e
flattened_ast: 083a9af2e592de0c827b15230cd2307daae4b90e324e35714f474d50cbb59162
inlined_ast: 083a9af2e592de0c827b15230cd2307daae4b90e324e35714f474d50cbb59162
dce_ast: 083a9af2e592de0c827b15230cd2307daae4b90e324e35714f474d50cbb59162
bytecode: 9006475518263541b3a855db6907377b638ef28f2a44caf4e26db7991c3b58ef

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 869edce87a429184f914c6ff72592de2e8dc1395f8b413237857c4111a796d39
flattened_ast: a2b862ac405e65f5dd9258cff25237c23ea457bfa8b5c449da49248d326f28d0
inlined_ast: a2b862ac405e65f5dd9258cff25237c23ea457bfa8b5c449da49248d326f28d0
bytecode: 65dcc91a4e07d98f73a0eb5b43d945f85859694417bd643b3ebba0d40494d001
dce_ast: df34074e0922066553939fcbf28b572addaaf4bcd83f6cd42222780f1ec6622b
bytecode: ba841e355e57f9ad4c4a01b358d4e21d960453a5f0590715b16544c7cdde20b4

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: bc7b8721cbfb437ea6eb609ec335e9e22ddabb3f9240488801f9f193cf14b403
flattened_ast: b237061bd9ae5a830947d80f051bbee4e7ced839dee6a1fb28f868aa3c7a4537
inlined_ast: b237061bd9ae5a830947d80f051bbee4e7ced839dee6a1fb28f868aa3c7a4537
bytecode: 629677c0e48a743b2fc341de20c6b14ccc59d74c6ae08c317bdf597e0cc2f749
dce_ast: c67c332f52173ca72aa22ee4a365ce953f9b4f18767ecaba69bd2c7184a0fafe
bytecode: 4f6a5b2268ffc7810d1d7fca88c7d7ec7c92b080fc2c752e3faf737f37a58e64

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 649adcba3bd743536eab0aaf9d81ca0b72911c7b9b5d83f23c73a481102c36e0
flattened_ast: 133fcd28e2d6767664071a0af992bc9601e481ac2ea9f17faf624f144c43bc4b
inlined_ast: 133fcd28e2d6767664071a0af992bc9601e481ac2ea9f17faf624f144c43bc4b
bytecode: a120b1e1d98948faf72473e55ec5ee1ea7ead4b7b5e4e79560053918dc1ff81b
dce_ast: 3df14b9911324d85dd9f114e9db7ebb9f163f5dbac6669c033431c01b44758e0
bytecode: d323d7074e8595ad95520b70580a5c41a57541aac1eb7aa680e674fb699f90ed

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: c5ef5cf3a66b8fd09c4fb651bec9feec382af6aa025ca54f2514fcba1b781d30
flattened_ast: 3dab7bf9e471da6c3f524c510c64c6b5a8850ea4e4b644f3a5513c9d5fcf622a
inlined_ast: 3dab7bf9e471da6c3f524c510c64c6b5a8850ea4e4b644f3a5513c9d5fcf622a
bytecode: 0098070069139200be104771fcb1807e52b331b50bab0dc82d3a16d451e4db97
dce_ast: e0a7d58415cc69357806e74261e06204cbadbdd6acbecf3c80c7abd3a77be1f1
bytecode: a838bb972d5c9fab64c81f1c874d90795edc4a6385b524fcf6f90d8513e2a05b

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 7118572de7aef8ba01b0211cfa1e40d92c5d856256f91e5ffddd5621b935e2b8
flattened_ast: de6afb7703d3e89ab7a00c33683a690bdc401e58278bd27164b623088835570d
inlined_ast: de6afb7703d3e89ab7a00c33683a690bdc401e58278bd27164b623088835570d
bytecode: b9875b017a81226905d6fec1324bf41bc859bb4fca832de6b5309224ca343511
dce_ast: 5a3c26e31d0810f8bccf1efe46988141b50f5d8c37e15b585accb74c3514bdb8
bytecode: 12b55db95d5f6e760a8ebb0604264fb1b09b771d247d093eaed4dec8c28a579b

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 907da2b9128857218e5c3a6f94e66f6fea60002fb84edfc152737a02cf7dacd1
flattened_ast: 75c3f273bfeb27f285138e30b1cbc97f1b45d310dd8bd59278bea1c44ae66f6b
inlined_ast: 75c3f273bfeb27f285138e30b1cbc97f1b45d310dd8bd59278bea1c44ae66f6b
bytecode: 976c0daf1133bb687c763b552cf546d3c02ad6f2ba23def2a1aec0e56e5aff64
dce_ast: 5ffda7837ed85713d10352862a479bfb31165902a21de31c849c25cfb8e6657a
bytecode: fca69f7905d164b970b57988810e4629b009cdbfc1ad5952459ef579a40b616c

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 782104fd26bd70f18b2a7baedd9594ffa0c7879e0a8e9fdfd8e66f03b51102c6
flattened_ast: 8e4b0058f7016f503300ac68760852dff28900eaa79215926464b924665ebcb6
inlined_ast: 8e4b0058f7016f503300ac68760852dff28900eaa79215926464b924665ebcb6
bytecode: d8c824aec550f73676651160b81bf3e546b5958ec8520629f779b9156b033032
dce_ast: efdd14f5229f37fcf190afeecde9c42699a7a936c219cb6f90be3b31cbf5bb87
bytecode: ed946f317a1fbdd2a8f9a2274d8cb72326308007df1d2f02d82893fe00453844

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ea512a03053a33e37bb817d6c4592043329e98e1f9a115fd101d74ccd239e2c2
flattened_ast: 68fd19aa7e43e46b9ffa4f23e518e0b3d818b9ad10f8521c3be324241fb36521
inlined_ast: 68fd19aa7e43e46b9ffa4f23e518e0b3d818b9ad10f8521c3be324241fb36521
bytecode: 45f6f395a7abca14ca5a1e3d5dc3fb2ac5ea3946740553ca5aee7a5822a235ec
dce_ast: 898d04af13dec567b07cfea58295650ffc76b709d617c7545632ebc6a550aefd
bytecode: 15c8e5674fa814192d9b8f836c92615685079bf9fb97bbfca8e3d5ca836a1cdf

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 586af29b0b79edf5f19a4bd494d8428f22a87f851119d7f74eab9b535810468d
flattened_ast: f72217bcb7185ae66114addb89c1bcf61da6ff200ece88309aa50dc3f5ebefd9
inlined_ast: f72217bcb7185ae66114addb89c1bcf61da6ff200ece88309aa50dc3f5ebefd9
bytecode: e5e0c25f5c089802ae51be9f719ccd87b53adf4676bc463ddf6e6f63d6e1f977
dce_ast: d5dad9bef9df7ffdf27685563189b9900543e153761cf5ded8e16a58b48dd07b
bytecode: 52babd5fc1693c9b41d1f8e26d7c5c91f27c9409c8a49c56374c14f068a69715

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 29ecb3770403a15ee05a695260ebc6f7b8e313b4614e3a1f06de34b4d03ff147
flattened_ast: 9711e4d72e2e9e85b24e3b4b3e73cc939a05a5846733c0eb15dab5c5b54a054a
inlined_ast: 9711e4d72e2e9e85b24e3b4b3e73cc939a05a5846733c0eb15dab5c5b54a054a
bytecode: 9217044f6eb12f18c1298c2ce3217533eb27618e7c8c5ead76848d21935783d4
dce_ast: 3a8d12872135e283b8f21c4207fa37fe7969ea75b810aa227aeeca69c90a1a5a
bytecode: 2dd437da2efd160fbba1cb573e9ac61d046ff0afbbffd8f98fa1aebefdde98c5

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 3e1a3d03f465a60b2ceb2fc480551d9d498beb758a6b378ae6558117ec2955a7
flattened_ast: 2448c3c0819a99113f4acb509371009619592a984911b836f9787a386cf1e617
inlined_ast: 2448c3c0819a99113f4acb509371009619592a984911b836f9787a386cf1e617
bytecode: 6a07bdcfa9cc3f72be7acb20de65bed8983094471083dee01fc5a46d923e7506
dce_ast: 0fd6329efebd5d284865f633a0459df53b14e8cee46ba18004ac90038c79b856
bytecode: c4131bb0900a47f3b000722e7218a8b030927e34f2952bed289bc5fe6437a995

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 5a33864a3f91c0d4a63171ed36ef709b7e75593a3181b4ed3f11be873ce2b9a2
flattened_ast: 8a13f93c69d995ea32ab518a4287d77dd9e37e4e1f15fd257361c58a0f853e7b
inlined_ast: 8a13f93c69d995ea32ab518a4287d77dd9e37e4e1f15fd257361c58a0f853e7b
bytecode: e893a23da89b538d6d95e87e9a97340f63c798fda07cf50166d09e8c4e07932b
dce_ast: dd061aec3f3a5e3ae3ee930dcdf543adc041f27d5c9d3004f43deff18c3e68ee
bytecode: 39222c7508c1ea4a59a42f8a65904f2ec657bbb2d3e8d750a7a475816a2bc2b6

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ef60c984ccfa580d1285dbbfe0d43553f1fd22b2d3a23f677e41a6d9943135ba
flattened_ast: e2383f7bb4b70472e366c8285f017807b15eb2bffb747ff31cfcf4078318f186
inlined_ast: e2383f7bb4b70472e366c8285f017807b15eb2bffb747ff31cfcf4078318f186
bytecode: b82322298b5a498c7a2a308c597a5e5d546becd9ff6d05d0c571247e09f1cb7d
dce_ast: d48a8f76789c725ba2b15efce543d5a575f24866642ac722b31c759def6040e9
bytecode: ec61486b3488918a8a8db406b9d6c8a4fd73b865c7add4cd2646b6ed4738c648

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: c1b75e3e3caf0094fc3a3a955dfbfbd844d86a9da4ffbad5646cf2d079c8fc49
flattened_ast: 42ab17eace07ba9fa174e1dd7f509045476ae4e3dab1393fe302973880bc4da8
inlined_ast: 42ab17eace07ba9fa174e1dd7f509045476ae4e3dab1393fe302973880bc4da8
bytecode: 849a917a861f86e0a277f0a92a018a81f6f6d69762816e29e585452dd805a1c1
dce_ast: c29e475b3798613746f0aca803383facd5f988c0fe619ab155ae55baed2fd400
bytecode: 36b4ead8db1862fcd7831096b07f40256c01e8039c41be29c007a334cd2343f9

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 95bf4aa7a18c4e152ae24292bcba2cef5c3fc2c7bea6cdc80d146f3e31ebe984
flattened_ast: a698ca5479fd0b3b6e7a4d55f9f0c06c1390f920145357a2e3e46e8b453f5ad5
inlined_ast: a698ca5479fd0b3b6e7a4d55f9f0c06c1390f920145357a2e3e46e8b453f5ad5
bytecode: 8d921ede85807f033431e06b604875bb1f6712fb96957faa5a805fe02fe24245
dce_ast: b2cbcf19bf6f16d14311ac2c98820ca4ac8d34c2a14bf69784ab5f15114e297f
bytecode: 7353ae74ad6fd49fadd68e4f452d31569c2c09189cf5840ff49af032a7aab3cd

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: a24e603330c02f87b70ed3e3f6467fc471d6d9d032f17eb023f37df005ceff85
flattened_ast: bc4a52e6fb7998c2a8a454306e75598177546db8f32a5a79e95ead68abc72880
inlined_ast: bc4a52e6fb7998c2a8a454306e75598177546db8f32a5a79e95ead68abc72880
dce_ast: bc4a52e6fb7998c2a8a454306e75598177546db8f32a5a79e95ead68abc72880
bytecode: 9a1e5bb7b8d932d4afd347a856bfb38db144771f49a0d9589ef14236338e3dcf

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 499f15e97d7e5d5dcc0be12e85176e6f160cc2b65d66b0667f640a3d0e64f369
flattened_ast: 9c98dfcdcb403983efb0b1078246ca9e3c3e8fe913f6ceabbd9a87b63f3fc3a4
inlined_ast: 9c98dfcdcb403983efb0b1078246ca9e3c3e8fe913f6ceabbd9a87b63f3fc3a4
dce_ast: 9c98dfcdcb403983efb0b1078246ca9e3c3e8fe913f6ceabbd9a87b63f3fc3a4
bytecode: 230d4f2bda3933eb4fafc4dda4ce0087e74e4cbd9c65349746da561cbb3f99da

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: d451c529bc4b3207205083e58d6521f0ea5526d63d1f77c42b40854f917316cf
flattened_ast: 0840cf638ec3532c7702d10bbbfcf2fbfc8c8f7c54e532acb4ac46cbb7c8ed61
inlined_ast: 0840cf638ec3532c7702d10bbbfcf2fbfc8c8f7c54e532acb4ac46cbb7c8ed61
dce_ast: 0840cf638ec3532c7702d10bbbfcf2fbfc8c8f7c54e532acb4ac46cbb7c8ed61
bytecode: fa960590c979aea4bdfe07b7d37060bb593f73f745974241e2db578bd7ba2ced

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: df4cad7af230e0feb2036b920bde4aa81ed297a9ee8269aa95ded280610bde49
flattened_ast: f1d531bbe1b2e0bf0f30a1f7e86cce88c834fee9eb4d06548508907ad5f2dd24
inlined_ast: f1d531bbe1b2e0bf0f30a1f7e86cce88c834fee9eb4d06548508907ad5f2dd24
dce_ast: f1d531bbe1b2e0bf0f30a1f7e86cce88c834fee9eb4d06548508907ad5f2dd24
bytecode: e8cc0536d26ff27b9fe9ff3ad45b575185b9f60c9d3910481ab66843af0f2171

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: c6231cc87d5244b147045a8958342a3f9aae2a7108215b265c517fccab0ae697
flattened_ast: eb4b8640cee5f68e7a358638a4f2dd80fa9f5e12df485cb41af7f041042c4495
inlined_ast: eb4b8640cee5f68e7a358638a4f2dd80fa9f5e12df485cb41af7f041042c4495
dce_ast: eb4b8640cee5f68e7a358638a4f2dd80fa9f5e12df485cb41af7f041042c4495
bytecode: eeb44a4faf22686de577f93db551bd83246583158dcecb35d2dc454e0693e419

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 610db9a9ab1fe344961c36a0fe5170902b9ca4cf036094b0a5f6fc9d8cfa7b72
flattened_ast: 384e746fcbe1428be942f6ee12041562e0c1ae98b398c26da1d62fdb57181343
inlined_ast: 384e746fcbe1428be942f6ee12041562e0c1ae98b398c26da1d62fdb57181343
dce_ast: 384e746fcbe1428be942f6ee12041562e0c1ae98b398c26da1d62fdb57181343
bytecode: 90662aea378f911f2798c1ece956f7a2566fd99d99a87d8285f1476edf468e43

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ebba08995e71307851655254c51deb67364ee12aa4320f9efa32c16668d26cf6
flattened_ast: 7111dab311b76ad61366abb7a6e40586f44e17da7f8784eb6f8431dd0c41bd42
inlined_ast: 7111dab311b76ad61366abb7a6e40586f44e17da7f8784eb6f8431dd0c41bd42
dce_ast: 7111dab311b76ad61366abb7a6e40586f44e17da7f8784eb6f8431dd0c41bd42
bytecode: 57bdcce5ea2ea7890a6a4786e4795f5c458da4b6b29f6295f86e15f11479f3e6

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 842449a3e29d8cd788deae538a1642bc89e326ed45768ee5121095e4293f553f
flattened_ast: c48dab53c83532533096307cda1460de12397de310e2b6622f644dcace4f4391
inlined_ast: c48dab53c83532533096307cda1460de12397de310e2b6622f644dcace4f4391
bytecode: 1bfceea51d0a0df233268cc281d300a3c15c291de63528a723a763eba97e9b93
dce_ast: c5d03ece7d274dc56be11aa850f15744fa5a84399ed4d5fc7dfde1cf6af2268e
bytecode: f6b06c8195fece8a8c55a0c4684f0135bbaadda789d192091b60afd9aa6c8874

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: e2884225fe46a4d894ee2561635254b1079c889b26dc382128a590a40f3fe5d6
flattened_ast: e36bb3f053c14fea5b6be293c43d32da60b06324b6cfe29a84ea2c1ce0d10015
inlined_ast: e36bb3f053c14fea5b6be293c43d32da60b06324b6cfe29a84ea2c1ce0d10015
dce_ast: e36bb3f053c14fea5b6be293c43d32da60b06324b6cfe29a84ea2c1ce0d10015
bytecode: 7540a269502febfe91bebfc15030891bde7667f921d5d8d9d22efbcf16410543

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: b893aa52ba3b0404bcfdcd8f9708df62cb91b70ba5e9417e1455fc7710c6ceb6
flattened_ast: bbf216c1e754d2012edb4ef4896499255d956bf4f39c0b9852ee45f75d914a0b
inlined_ast: bbf216c1e754d2012edb4ef4896499255d956bf4f39c0b9852ee45f75d914a0b
dce_ast: bbf216c1e754d2012edb4ef4896499255d956bf4f39c0b9852ee45f75d914a0b
bytecode: ef0f05392652587de58875f041bb805a5a1172a153d96973638342d143798863

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: dd0df684331375510fdd96af15bd2aadb8932f3eff2fabb9d1b8dba199728b48
flattened_ast: 60cf4f7e83d3ffc10b362b701749b0d5afcf8307e099bc5c7908c9ccb4df3efc
inlined_ast: 60cf4f7e83d3ffc10b362b701749b0d5afcf8307e099bc5c7908c9ccb4df3efc
dce_ast: 60cf4f7e83d3ffc10b362b701749b0d5afcf8307e099bc5c7908c9ccb4df3efc
bytecode: b65dba415908458745a14bfc52abda70a0899732f807ba22f56776ab3fcbf589

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 6fa465e63f2b8e880d621cb1758b3d1c0edfa9ce09e6d4f0f28bbe6c2ca2b955
flattened_ast: 4b8969d1adf68074bc7a8458a9146e128041bf929f2f6a4e76a16ad2769b81b1
inlined_ast: 4b8969d1adf68074bc7a8458a9146e128041bf929f2f6a4e76a16ad2769b81b1
dce_ast: 4b8969d1adf68074bc7a8458a9146e128041bf929f2f6a4e76a16ad2769b81b1
bytecode: 39aa8516297ece27331b633a72466d2ff0122d36beca663a48bc07589e2d3e15

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 9ea8f3743b9bcf1584319472ca0a80707f117616d687d4c401b34fb10b44703a
flattened_ast: a4eca8b80af9863d59ebfb837fa5dae061fca7d52315d3a9f5778e6dc4b75716
inlined_ast: a4eca8b80af9863d59ebfb837fa5dae061fca7d52315d3a9f5778e6dc4b75716
dce_ast: a4eca8b80af9863d59ebfb837fa5dae061fca7d52315d3a9f5778e6dc4b75716
bytecode: 6db857dc2b80ea257d141b3980404e050024771f95c5f9b74f899145b2001432

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: efeab621ea3b6113ae3ef1f326cbd75668ce034b81a1bb09a55c9a671f62c127
flattened_ast: 06fea09c85a281be025d66565aa362f80f2036c88c284fbfb5f9b874a605916b
inlined_ast: 06fea09c85a281be025d66565aa362f80f2036c88c284fbfb5f9b874a605916b
dce_ast: 06fea09c85a281be025d66565aa362f80f2036c88c284fbfb5f9b874a605916b
bytecode: 9f1144202f6b114409c379f7ecc4b480dd81daaf0f6f8b244efd20c520f7b76c

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 19378936c22e4e747e16e132bbc727115598dfbd17068349cb300525cde35556
flattened_ast: c55a0edeb6a52dd728e5500ff5b1d387186321c8a3d68f2d0638628bbb05696e
inlined_ast: c55a0edeb6a52dd728e5500ff5b1d387186321c8a3d68f2d0638628bbb05696e
dce_ast: c55a0edeb6a52dd728e5500ff5b1d387186321c8a3d68f2d0638628bbb05696e
bytecode: 49afa4d378578bc680308083733b31b8272f9c952fe8dbc133398676e3f0d2ba

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: b86f0471ac1a09039a4ce147e87b0c41b9c3378dba0cb560b4a2fe41533781c2
flattened_ast: 52f744a6cf805739c77995f73c2f626ad2403301c5dc6e007b9c2092869f5224
inlined_ast: b7ef966c924c7fd055476fd974079af70e235aed43d8cbff30c7eadad8e342c7
dce_ast: b7ef966c924c7fd055476fd974079af70e235aed43d8cbff30c7eadad8e342c7
bytecode: cc321ba26e486e2c153e774573e880a340d698f08c7d24602f883aef1c900b73

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 4c6468604104edfe6a6d2a5f4d80c557b001bc60b1e4098f80eda119afdbb292
flattened_ast: bb26f3622ed2fa2f301ac07069ae281a5e5bea1d52fec8cdb03b03131ad0b4f6
inlined_ast: bb26f3622ed2fa2f301ac07069ae281a5e5bea1d52fec8cdb03b03131ad0b4f6
dce_ast: bb26f3622ed2fa2f301ac07069ae281a5e5bea1d52fec8cdb03b03131ad0b4f6
bytecode: 1da5a78fcb6f77bd197de7dce1e7e94e7a9d30a6ec26703a645b25ab7c65cc08

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 9e151de216e44ca801adec05a7b534cbe347c3a64f31d570a9f33591a90af191
flattened_ast: 9f1b62847c7b725e934fd72fb9a6ab076a6d1c778957bb93e6d2e4c7c0910c58
inlined_ast: 9f1b62847c7b725e934fd72fb9a6ab076a6d1c778957bb93e6d2e4c7c0910c58
dce_ast: 9f1b62847c7b725e934fd72fb9a6ab076a6d1c778957bb93e6d2e4c7c0910c58
bytecode: 434d585ff5cbe799cf645514abda7bc7ad069563501ded68fc716e583390fefa

View File

@ -0,0 +1,11 @@
---
namespace: Compile
expectation: Pass
outputs:
- initial_ast: d7414ef76b5d83ba8daed6e65487425048596937d5a6f783a313d3264d5db267
unrolled_ast: d7414ef76b5d83ba8daed6e65487425048596937d5a6f783a313d3264d5db267
ssa_ast: 6722ef50ccdf19eaaa57f68a249a6eb01ba78ec8ec60da0d8d664613324287aa
flattened_ast: 58ed29011b87aad89fe50f62402f441c9aa53fc2e18c3a188d94d0a88734236d
inlined_ast: 1c57a7047a0523c5f576e5df33fa9b70cf2baedfb8149266686837ba2827c44e
dce_ast: 48e52aa4ba7d5f4c5126ec93a14ec29772f80c73cc2d6ab5c77001f920b4c65b
bytecode: bc387336869a1d12a90c9fb923466f737bad08d04a165a8b611256868f960201

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 478e60c54d2fcb05625042228bb467278257e7392d846fd49ccd5c43fcbcbd5e
flattened_ast: 12157cdc9233e60a00d749cc033465d3aeafa625fb769223717e0e87c5cdf9d6
inlined_ast: 11c63116821757047efeec64483fbc8b22edff09ddc745d80670bf02895dd62e
bytecode: 893b143c0f573e705b3908e5d92aafd32a2b309ee02ecb0d55d3264a3b8ade2d
dce_ast: d531e3256e104e13c05125353b768cf9aa2bc3913f3ba0edb4f04b25ae8dd18c
bytecode: f0b23d05369e0db4f6f4cf1b10923caea289d78e911ed7250c13b828b2ae68d5

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 4b0d37e1a94183ddfd5ed2fc4e299319dfa92833a6fe44e4c3072f138fbdcb89
flattened_ast: 86ba35dae4811e723d31c96db49d7bd74d7b412d131045fde4c69aa29775a0a8
inlined_ast: 86ba35dae4811e723d31c96db49d7bd74d7b412d131045fde4c69aa29775a0a8
dce_ast: 86ba35dae4811e723d31c96db49d7bd74d7b412d131045fde4c69aa29775a0a8
bytecode: 2a939858f2f71f1bbe25bd039899cdb71254e56acc203eb6d60dbb5c191a4224

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: fcb491ed70f47943f57a15be8c8c2b8750b4ca5408dee5d3e0ce57cc4ef5879e
flattened_ast: 812e7afbfb2c8ca1d31815b42a59337fc6e6eeb98acebf794fe7539013ad1fb9
inlined_ast: 812e7afbfb2c8ca1d31815b42a59337fc6e6eeb98acebf794fe7539013ad1fb9
dce_ast: 812e7afbfb2c8ca1d31815b42a59337fc6e6eeb98acebf794fe7539013ad1fb9
bytecode: 27556a268723e0d8ffc4210290babab1ad098d9c8a77ad2dc84195d98059deac

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: e5afe402b1d3eeb7f1465a197952931597c2a8147aa624a15c985cad460479ce
flattened_ast: 8583c9afe3f11178c11fd4ff9e7babd3ed3a74719484084d1af353b7844dddc8
inlined_ast: 303725110ce5af01a45222f852d1096172a8aba363ef3b192bc026d2144fdf7c
dce_ast: 303725110ce5af01a45222f852d1096172a8aba363ef3b192bc026d2144fdf7c
bytecode: 713ce56eafa3f358be317894fd3ddf287a03422f855a304ee64becfcbd1f8590

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 4b33649beef6673aafce25c35c16c034fb41ec33fdf562751b7e51d712caf309
flattened_ast: e2ee2ee7c6e1c187de5977f44b0a39e11d946243990eb48df92b3a3e939b3906
inlined_ast: aae0684cc29719b75d1af553fae21f9cafd04d15fd211eeb4d8cebbf913bcd6c
dce_ast: aae0684cc29719b75d1af553fae21f9cafd04d15fd211eeb4d8cebbf913bcd6c
bytecode: 6c18f3614147617dbd01fb1404fc8c75c0a788872cec905ad5566a443f7f2e91

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: f67f11e78a102b6eba419bb394cdf10b6bf8b1f2245c2fd022aa03db7750535a
flattened_ast: eddea7cbfc19bcdd6880741cc2446dd88b2d070c334dcf7e3780e71061c803f4
inlined_ast: 9220160485ed7aa28cd86b329b9805a7da3e1fb03d9526881ea356c9bc4f3f03
dce_ast: 9220160485ed7aa28cd86b329b9805a7da3e1fb03d9526881ea356c9bc4f3f03
bytecode: a190851c7a73c1068c1c5819c3e064535d56273dffbc007874376c094399cd9e

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 1a3a76269ca94c73013e99da1a17e64a0d8a04b1c7b166c1807f867a4a5af7f2
flattened_ast: 59b5dbde723c99720b27b663fbe81a7e01804ded9cc1b8a7defe220315360b9a
inlined_ast: 59b5dbde723c99720b27b663fbe81a7e01804ded9cc1b8a7defe220315360b9a
dce_ast: 59b5dbde723c99720b27b663fbe81a7e01804ded9cc1b8a7defe220315360b9a
bytecode: 56875e297f05e4c60762445a3ac97b57e4a0f12d69180bb7207ef62f950b0b25

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 7ae7272d7babd64cc7845463755decb6073b095b04ae52e76197c68bc081cdf6
flattened_ast: c39c24be2f2e4792f87bf1e8dcd123064e1a9f31fec6923f8daf7800e6b9cd2a
inlined_ast: c39c24be2f2e4792f87bf1e8dcd123064e1a9f31fec6923f8daf7800e6b9cd2a
dce_ast: c39c24be2f2e4792f87bf1e8dcd123064e1a9f31fec6923f8daf7800e6b9cd2a
bytecode: 6d5fea51d9eec1cf3a5037b123147f9d532855197e3891ff870fbe700dd08d3f

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 4d554be19b3abc0c13bccd5225bc75011e8a77ec764de362788b9d221bae09c4
flattened_ast: faf9aeb6811760108ec7fd83ddf1d08314719c707e9818bebd9cf9b7e0adbff2
inlined_ast: faf9aeb6811760108ec7fd83ddf1d08314719c707e9818bebd9cf9b7e0adbff2
dce_ast: faf9aeb6811760108ec7fd83ddf1d08314719c707e9818bebd9cf9b7e0adbff2
bytecode: 76a90286cb4903577bb9b0d219abe140fd8e2ef8a74df48a82d986e8efc4235d

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 6a343455b83835e5e2bc4760238b988d508dbf8a73b078f95bbd92c825f931bc
flattened_ast: 6a343455b83835e5e2bc4760238b988d508dbf8a73b078f95bbd92c825f931bc
inlined_ast: 6a343455b83835e5e2bc4760238b988d508dbf8a73b078f95bbd92c825f931bc
dce_ast: 6a343455b83835e5e2bc4760238b988d508dbf8a73b078f95bbd92c825f931bc
bytecode: a26eca302425b77f7d017763631062a040d57f8557dd53a31bfe4d17584ab0e2

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 46c8f1a9f3ac3b544211d70cbf18eb2c30e659096e36309b268ecebfb8901047
flattened_ast: 46c8f1a9f3ac3b544211d70cbf18eb2c30e659096e36309b268ecebfb8901047
inlined_ast: 46c8f1a9f3ac3b544211d70cbf18eb2c30e659096e36309b268ecebfb8901047
dce_ast: 46c8f1a9f3ac3b544211d70cbf18eb2c30e659096e36309b268ecebfb8901047
bytecode: 8f6238b1942bb3cf2eb7d0eed9745dffaf088c884c423992f0d23b989f3954ff

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 52bc08100046182123c83e77a8f89b24a92f6c5dedb09115361d500e08f92443
flattened_ast: a1af6ce731eb84ce6f493bfffa4c34d682203f41f036a54613bc22b74e135d7a
inlined_ast: a1af6ce731eb84ce6f493bfffa4c34d682203f41f036a54613bc22b74e135d7a
dce_ast: a1af6ce731eb84ce6f493bfffa4c34d682203f41f036a54613bc22b74e135d7a
bytecode: 70d3806e31f660faa4eff783ad05a73cf249a0a1ac7c29046fd8f1b2cec656b1

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 70eeac70fcfbbda44e87ab2ddcf47e3fac9ed9cfab8c1873b1873c4bd4ab502d
flattened_ast: 34f60217fff78d0c47fdc7ac7c64994fd0c0234193cb5ff71a28bdf6ed645ab2
inlined_ast: 34f60217fff78d0c47fdc7ac7c64994fd0c0234193cb5ff71a28bdf6ed645ab2
dce_ast: 34f60217fff78d0c47fdc7ac7c64994fd0c0234193cb5ff71a28bdf6ed645ab2
bytecode: f5572172f6812e0eb6e906c230138c76d1344fd15522b8b2ee98156d6c92ca0a

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 028b589972bfceff9fb375e832f0595848ec7b7ec7a791995c7d360f0397e68a
flattened_ast: ef3ca55705d6cf89c60d2f7b62a11bb6aef71a03dc92f86ddd7ea61ff8faca72
inlined_ast: ef3ca55705d6cf89c60d2f7b62a11bb6aef71a03dc92f86ddd7ea61ff8faca72
dce_ast: ef3ca55705d6cf89c60d2f7b62a11bb6aef71a03dc92f86ddd7ea61ff8faca72
bytecode: e62ba6ed16c820d4f4a8c2569bf96add46e3b8ce999e5fc77fa99c1769ca2dbd

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 93527404a2273693c87ef75e9b4598a512e27de7d682be813baf7abe536755d8
flattened_ast: fb8eb972c5e55fb0850d3515770b9dc207fd2ede668ef8fa4da72269a7d5a043
inlined_ast: fb8eb972c5e55fb0850d3515770b9dc207fd2ede668ef8fa4da72269a7d5a043
dce_ast: fb8eb972c5e55fb0850d3515770b9dc207fd2ede668ef8fa4da72269a7d5a043
bytecode: 12e9627877abc9f4f519aeb445a200162f2c962b8ec7ecf49564c35abf14caa4

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ae9e7dbaa1df8397ba6bf8c0b76d51efcf363f75cb7e22c2fa3bea29cb0e895d
flattened_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
inlined_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
dce_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
bytecode: ec93d62ff5b281dc94a2adea7451851a6101494b2539a653869f8cf5dc8d64b7

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ae9e7dbaa1df8397ba6bf8c0b76d51efcf363f75cb7e22c2fa3bea29cb0e895d
flattened_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
inlined_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
dce_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
bytecode: ec93d62ff5b281dc94a2adea7451851a6101494b2539a653869f8cf5dc8d64b7

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ea25750a75ae1aad0c436fd1c4af381f3b1ff1f389bbc07344f8d8dae74eef91
flattened_ast: 10a306c6d15ca0748be2fa6240161fefa8e8918911ee4d19534d00eba3e71b9e
inlined_ast: 10a306c6d15ca0748be2fa6240161fefa8e8918911ee4d19534d00eba3e71b9e
bytecode: 734e21460ab7e6ae2f2f66f0dbb45e31b82e8e154807c69aa36a9332c31c9b6a
dce_ast: e30460693f49873aed22a929ff3649ec4374083e0e3ec53be38cca118e072a72
bytecode: f4e3e6e24725b59bf53b5513c9a4cb9311fce35216e95ddb0b8192c9bdddbd60

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: ae9e7dbaa1df8397ba6bf8c0b76d51efcf363f75cb7e22c2fa3bea29cb0e895d
flattened_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
inlined_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
dce_ast: 6a94a55b67bf6e0a76416d5f200029415ea0968b89d79a4f22bedc92ae54ff12
bytecode: ec93d62ff5b281dc94a2adea7451851a6101494b2539a653869f8cf5dc8d64b7

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: e86a8817d2bbcbf9bcf1fa4e6b3491d07691532c8371e8c06ea597c916683dce
flattened_ast: fea850a724c312c42466e22afa2b21380f9637174fd275237cbdf593b8b0c9dd
inlined_ast: fea850a724c312c42466e22afa2b21380f9637174fd275237cbdf593b8b0c9dd
dce_ast: fea850a724c312c42466e22afa2b21380f9637174fd275237cbdf593b8b0c9dd
bytecode: 9dd44babd234f3b33af51d04ffd422308692b59caa5f1d6c3b765d0d8e795644

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: e131305123f3f30fd02823739a124336f59950def015a2e16f6ae0d7da276214
flattened_ast: 2369a4344b21218b00ff06f027f54e81240ee05e02297c039822ebdddc9b6282
inlined_ast: 2369a4344b21218b00ff06f027f54e81240ee05e02297c039822ebdddc9b6282
dce_ast: 2369a4344b21218b00ff06f027f54e81240ee05e02297c039822ebdddc9b6282
bytecode: b3cef3c4dcd879fc92c9a2082e4820b102bf0ce47335b5e432b17a5c1b55da81

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 41032ad876b2160b388f01d716655ddd073b8cd7d185faa01002eeac19840597
flattened_ast: 98d83fec655c25d2889cb6405068c46de336976f1468efb7e9bc30d434a5cb56
inlined_ast: 98d83fec655c25d2889cb6405068c46de336976f1468efb7e9bc30d434a5cb56
dce_ast: 98d83fec655c25d2889cb6405068c46de336976f1468efb7e9bc30d434a5cb56
bytecode: 96c9838c6cd113e26c1cb3abcb9aebb52e622fec38cab2a13ebaad1683a1c15d

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 084403de451d50b3941abf9a007cc223e8ec038cc04e2204bb2483d92b861fb6
flattened_ast: ec3eec8f9dd98b80fe3621ab58494a4a0b3ff0e60edbec554ddc2a4138dd4fc9
inlined_ast: ec3eec8f9dd98b80fe3621ab58494a4a0b3ff0e60edbec554ddc2a4138dd4fc9
bytecode: 3e00010d213e17baaa50b9dd4f0a2b77264d697e851e4c64b6f33eaa15c16ed8
dce_ast: 8f4373695fb9563b015f6a125615b320fd1cfae3e968ea36788c23b7895f2c95
bytecode: b84dd86ea59ed7d470a54bb67005b019859cd5c9377923b37a49f1f44e87fa36

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: bb05e4f93c78ac321b3dc25afdcf2fac45dc1db9a4c01e139a576594deda8b2b
flattened_ast: 5230f944fffccae1af7e94f6e46f49b69b4f9ac21c32e2c0e7026a2d6e6071d2
inlined_ast: 5230f944fffccae1af7e94f6e46f49b69b4f9ac21c32e2c0e7026a2d6e6071d2
dce_ast: 5230f944fffccae1af7e94f6e46f49b69b4f9ac21c32e2c0e7026a2d6e6071d2
bytecode: ab93704b9e34e4588d4b5e1ae347f661a182ce16fac8a45c1d95232b38564d23

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: c7ef2a2666b54099f49f96b949ecb811c4fb87fd008cfce40c1d3cf4698b2b90
flattened_ast: a682efda5ec163a12aa62f6a300ed5dd1d26a3195b10fb5ed9b955bee472e69a
inlined_ast: a682efda5ec163a12aa62f6a300ed5dd1d26a3195b10fb5ed9b955bee472e69a
dce_ast: a682efda5ec163a12aa62f6a300ed5dd1d26a3195b10fb5ed9b955bee472e69a
bytecode: 8389291206b5fde26edad53fd7cbfa30f4594fe5818a2cbb1a02b193a0382693

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 06f768499bd95e8a28d39bff5a586be2d3518f2440a12e81694c9330aeeda753
flattened_ast: e7bb6ed0aa06551efb54e4bfd79adca38b28d5d2ea71f670f7467f6ef4e2de98
inlined_ast: e7bb6ed0aa06551efb54e4bfd79adca38b28d5d2ea71f670f7467f6ef4e2de98
dce_ast: e7bb6ed0aa06551efb54e4bfd79adca38b28d5d2ea71f670f7467f6ef4e2de98
bytecode: cdbe7fcbbe006b5e22012279653209cfb5ba4db73631553c0eddd44a59e4a581

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: b3624f2d15152428a37fae2e9bb6bb0bc72384b153bd57246379d6261ceeb9cb
flattened_ast: 02643666dc4ebb26b5d599c20472a82e10947e8ed6779e340e503b05db694198
inlined_ast: 02643666dc4ebb26b5d599c20472a82e10947e8ed6779e340e503b05db694198
dce_ast: 02643666dc4ebb26b5d599c20472a82e10947e8ed6779e340e503b05db694198
bytecode: e96081d4904a9d73c7ce8bb9cd6357c90051b37b97961e254aff910cb2d73827

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: f78b3c57cfa8409ba3b603ee42373705efaff4a625fcd29597abd90d63db8316
flattened_ast: 4571065f061a5059794566a2c12ba08b726d97932b7bf756cea7a934f8e0e022
inlined_ast: 4571065f061a5059794566a2c12ba08b726d97932b7bf756cea7a934f8e0e022
dce_ast: 4571065f061a5059794566a2c12ba08b726d97932b7bf756cea7a934f8e0e022
bytecode: e96081d4904a9d73c7ce8bb9cd6357c90051b37b97961e254aff910cb2d73827

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 2b8f96c04fcd1d1be970ec1c688fbc2a9c29f949cab7afac3770399940d4c6e4
flattened_ast: 89d0593675ffaa7570e879c725925a7d581dc39a2768679872e9f861bfacc882
inlined_ast: 89d0593675ffaa7570e879c725925a7d581dc39a2768679872e9f861bfacc882
dce_ast: 89d0593675ffaa7570e879c725925a7d581dc39a2768679872e9f861bfacc882
bytecode: e96081d4904a9d73c7ce8bb9cd6357c90051b37b97961e254aff910cb2d73827

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: e729b830c6d0231f85e8a78630c296cfcbd98133b4b6d2559719d39af7af6f14
flattened_ast: f1333af91e0503c15ec6db132e8b8994b28cb07e06961044108563ec435b5288
inlined_ast: f1333af91e0503c15ec6db132e8b8994b28cb07e06961044108563ec435b5288
dce_ast: f1333af91e0503c15ec6db132e8b8994b28cb07e06961044108563ec435b5288
bytecode: e96081d4904a9d73c7ce8bb9cd6357c90051b37b97961e254aff910cb2d73827

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 43ce028a30c30e2d672fb95b2694fa54803eba972b996466dbd392780b3baf74
flattened_ast: 8e4057902e9231d5a558ee8f9d24a0019389f9d93d786ae99c7ed1aa989f29c5
inlined_ast: 8e4057902e9231d5a558ee8f9d24a0019389f9d93d786ae99c7ed1aa989f29c5
dce_ast: 8e4057902e9231d5a558ee8f9d24a0019389f9d93d786ae99c7ed1aa989f29c5
bytecode: a94d1d8f79e69b746fcaf829916aae3f08c540aff13fd5d5a828addaded23621

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 3187bd21eb4e27414cee29208aabe782444c2bc3228b372c90a852a632bae9d9
flattened_ast: 9a1fd8fbc9feaabe3fba14d803512de5dffd9f92f96847a9295e2bdcec2b259a
inlined_ast: 9a1fd8fbc9feaabe3fba14d803512de5dffd9f92f96847a9295e2bdcec2b259a
dce_ast: 9a1fd8fbc9feaabe3fba14d803512de5dffd9f92f96847a9295e2bdcec2b259a
bytecode: 9a1e5bb7b8d932d4afd347a856bfb38db144771f49a0d9589ef14236338e3dcf

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 804feefc20b612249c7c44144033728c6e1354b152f196e262f135c652d2ecba
flattened_ast: a2f0d1256d3e08215e96cf625f61eea6f55c786e1f23f028d110252a40ad75c7
inlined_ast: a2f0d1256d3e08215e96cf625f61eea6f55c786e1f23f028d110252a40ad75c7
dce_ast: a2f0d1256d3e08215e96cf625f61eea6f55c786e1f23f028d110252a40ad75c7
bytecode: 33b0428205d23a2e03c265edac88f7b98fcfb7769b86ee0508128e68069b5b46

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 2f02ad7d8893241fe0701045abf0417e023fc9952e3def17623d4f24df34964b
flattened_ast: 3848bb69bf1487f5d678279b17a82d7d8996b0ab03c0aff50f18619d9b31a3d8
inlined_ast: 3848bb69bf1487f5d678279b17a82d7d8996b0ab03c0aff50f18619d9b31a3d8
dce_ast: 3848bb69bf1487f5d678279b17a82d7d8996b0ab03c0aff50f18619d9b31a3d8
bytecode: 6f3edf18242106629627faa1e59807276fabe9703a44c467ab0869035a916e59

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 480bc825f7733fbe9440be43fc32101d634c72cf63c22042865eeb8d54700454
flattened_ast: 6f04dd20f5e62b04236fcf7c47eba78eb6af0555d6278afc2fc347a691790dbd
inlined_ast: 6f04dd20f5e62b04236fcf7c47eba78eb6af0555d6278afc2fc347a691790dbd
dce_ast: 6f04dd20f5e62b04236fcf7c47eba78eb6af0555d6278afc2fc347a691790dbd
bytecode: d3d6361fcc04fcc6102c91ec93ca087f2248b8868883a216282223937942b9ff

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 20e0b2fb427dcf7c1c7ed9a4e3c2f22f3980b4402fe8b8415c618baa4676aa34
flattened_ast: d7ea40e2c1f9478f7c14c6a29d1c4cb6616aa820a00609531f29444be505c258
inlined_ast: d7ea40e2c1f9478f7c14c6a29d1c4cb6616aa820a00609531f29444be505c258
dce_ast: d7ea40e2c1f9478f7c14c6a29d1c4cb6616aa820a00609531f29444be505c258
bytecode: d865e47d55dd534c79a7f0abc2a97c569a9195a3579412a415379b6131003628

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 5d2245475f2786417fbd3f2bfb1fb8c04bbdd4f5604c1e199057c7005cd528a3
flattened_ast: 7c6e8b9ac6e3cbfe263e20973e0bae98348b6713c4d5daf9359448412284152d
inlined_ast: 7c6e8b9ac6e3cbfe263e20973e0bae98348b6713c4d5daf9359448412284152d
dce_ast: 7c6e8b9ac6e3cbfe263e20973e0bae98348b6713c4d5daf9359448412284152d
bytecode: 6a831f79614e36f29287d0c38c39352d1563a85cfd3d1ffcda037ce3dd6f32bd

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: bba57260a95706f4f05130a3faa698016f3d2bf3c6e9dabb2741c205d0600f5f
flattened_ast: 75ef9e42f15a6816413b79c45cde5032579254e797d83831a11dcf91926ac180
inlined_ast: 75ef9e42f15a6816413b79c45cde5032579254e797d83831a11dcf91926ac180
dce_ast: 75ef9e42f15a6816413b79c45cde5032579254e797d83831a11dcf91926ac180
bytecode: 0497ce2fbdcd7212261295b10194407589572843d8ab24596f194c486ca2ea8a

View File

@ -7,4 +7,5 @@ outputs:
ssa_ast: 53e214ec2ba7534cc6379668320cb4a1034467a36d099085b5ac8f36b2827654
flattened_ast: a6454ab1c865e41906eaabe02ad435c8ab450be97f5673fb98fb1f7c49344ffa
inlined_ast: a6454ab1c865e41906eaabe02ad435c8ab450be97f5673fb98fb1f7c49344ffa
dce_ast: a6454ab1c865e41906eaabe02ad435c8ab450be97f5673fb98fb1f7c49344ffa
bytecode: 305c7f46ca9ad5640019699025196349bbc986ebc1532a17600e41d048df3d97

Some files were not shown because too many files have changed in this diff Show More