- It provides a unified style to express graph and kernel for user.
- It provides a unified IR to represent graph and kernel for developer.
- It breaks the boundary between graph and kernel.
- It provides more opportunities to do compile optimization.
* add infer_value for common math ops
* convert constant bool tensor to bool value
* do not infer value when encounter 0 as division
for while condition, do not unrool if condition is a tensor
modify infer to get abstract value and attr value map together
support get attr in specialize
clone primitive when specialize if attribute is not the same with
infered attribute
To handle 'break' and 'continue' statement, a loop context is pushed
to a stack before we parse the loop body, and pop it after body parsed.
When a 'break', 'continue' statement is encountered, we retrieve current
loop contex from the stack, and let the current block jump to the end
block or header block;
For 'break' statement, we added an extra 'end_block' follow the 'after_block',
because 'after_block' is called from a ContionalJump in 'header_block', it can
not be set as jump target from other place. to support 'break', we let loop
body jump to the 'end_block' at the 'break' point. and 'after_block'
maybe a good place to handle loop 'else' clause in the future.
Handle 'pass' is simple, just bypass it when doing parse.