Use bool type in conditional simplifier and for loop condition into body.

This commit is contained in:
chriseth 2020-02-19 16:39:59 +01:00
parent a52c9af5b9
commit a52305d3bd
9 changed files with 47 additions and 16 deletions

View File

@ -77,12 +77,7 @@ void ConditionalSimplifier::operator()(Block& _block)
Assignment{
location,
{Identifier{location, condition}},
make_unique<Expression>(Literal{
location,
LiteralKind::Number,
"0"_yulstring,
{}
})
make_unique<Expression>(m_dialect.zeroLiteralForType(m_dialect.boolType))
}
);
}

View File

@ -56,9 +56,9 @@ void ForLoopConditionIntoBody::operator()(ForLoop& _forLoop)
_forLoop.condition = make_unique<Expression>(
Literal {
loc,
LiteralKind::Number,
"1"_yulstring,
{}
LiteralKind::Boolean,
"true"_yulstring,
m_dialect.boolType
}
);
}

View File

@ -0,0 +1,18 @@
{
let y:bool := false
for {} true { } {
if y { break }
}
}
// ====
// dialect: yul
// step: conditionalSimplifier
// ----
// {
// let y:bool := false
// for { } true { }
// {
// if y { break }
// y := false
// }
// }

View File

@ -0,0 +1,18 @@
{
let y:i32 := 0:i32
for {} true { } {
if y { break }
}
}
// ====
// dialect: ewasm
// step: conditionalSimplifier
// ----
// {
// let y:i32 := 0:i32
// for { } true { }
// {
// if y { break }
// y := false
// }
// }

View File

@ -19,7 +19,7 @@
// { }
// for { } a { }
// { }
// for { } 1 { }
// for { } true { }
// {
// if iszero(add(a, a)) { break }
// }

View File

@ -5,7 +5,7 @@
// step: forLoopConditionIntoBody
// ----
// {
// for { let a := 1 } 1 { a := add(a, 1) }
// for { let a := 1 } true { a := add(a, 1) }
// {
// if iszero(iszero(eq(a, 10))) { break }
// }

View File

@ -19,16 +19,16 @@
// {
// let random := 42
// for {
// for { let a := 1 } 1 { }
// for { let a := 1 } true { }
// {
// if iszero(iszero(eq(a, 10))) { break }
// a := add(a, 1)
// }
// let b := 1
// }
// 1
// true
// {
// for { let c := 1 } 1 { c := add(c, 1) }
// for { let c := 1 } true { c := add(c, 1) }
// {
// if iszero(iszero(eq(c, 2))) { break }
// b := add(b, 1)

View File

@ -9,7 +9,7 @@
// ----
// {
// let random := 42
// for { let a := 1 } 1 { a := add(a, 1) }
// for { let a := 1 } true { a := add(a, 1) }
// {
// if iszero(iszero(eq(a, 10))) { break }
// a := add(a, 1)

View File

@ -14,7 +14,7 @@
// {
// let _1 := iszero(caller())
// for { }
// 1
// true
// {
// for { } iszero(_1) { }
// { }