[EDSC] Cleanup declarative builder insertion point with blocks
authorNicolas Vasilache <ntv@google.com>
Sat, 9 Mar 2019 19:27:59 +0000 (11:27 -0800)
committerjpienaar <jpienaar@google.com>
Sat, 30 Mar 2019 00:09:51 +0000 (17:09 -0700)
commit861eb8747185ae32fba5fa62bc73b15571cb82b5
treef38144e2d39784360a23d9299777a2e7487da47d
parent497d645337a1265d06820360a6e6078ec79e6fd7
[EDSC] Cleanup declarative builder insertion point with blocks

Declarative builders want to provide the same nesting interface for blocks and loops. MLIR on the other hand has different behaviors:
1. when an AffineForOp is created the insertion point does not enter the loop body;
2. when a Block is created, the insertion point does enter the block body.

Guard against the second behavior in EDSC to make the interface unsurprising.
This also surfaces two places in the eager branch API where I was guarding against this behavior indirectly by creating a new ScopedContext.

Instead, uniformize everything to properly reset the insertion point in the unique place that builds the mlir::Block*.

PiperOrigin-RevId: 237619513
mlir/lib/EDSC/Builders.cpp
mlir/lib/EDSC/Intrinsics.cpp
mlir/test/EDSC/builder-api-test.cpp