Iterates over all intrinsic bodies, inlining the intrinsics in
This function operates on the AST level; meaning, it takes in a
building_blocks.ComputationBuildingBlock as an argument and
returns one as well.
replace_intrinsics_with_bodies is intended to be the
standard reduction function, which will reduce all currently implemented
intrinsics to their bodies.
Notice that the success of this function depends on the contract of
intrinsic_bodies.get_intrinsic_bodies, that the dict returned by that
function is ordered from more complex intrinsic to less complex intrinsics.
building_blocks.ComputationBuildingBlock in which we
wish to replace all intrinsics with their bodies.
building_blocks.ComputationBuildingBlock with all
the intrinsics from
intrinsic_bodies.py inlined with their bodies, along
with a Boolean indicating whether there was any inlining in fact done.
If the types don't match.