[Beignet] [PATCH V2] GBE: add legalize pass to handle wide integers
Zhigang Gong
zhigang.gong at linux.intel.com
Fri Oct 10 23:01:57 PDT 2014
On Sat, Oct 11, 2014 at 02:09:37PM +0800, Ruiling Song wrote:
> This legalize pass will break wider integers like i128/i256/... into shorter ones.
> The problem is how to choose the shorter type? From my observation,
> wide integer type always comes from shorter ones through 'zext' on small type
> or 'bitcast' on vectors, so we simply choose the type where it comes from.
> Then we can split wide integer operations into operations on shorter interger.
>
> v2:
> add an assert on the wide integer bit-width, should be power of 2.
> use rpo_iterator to make sure traverse Value def before its use.
>
> Signed-off-by: Ruiling Song <ruiling.song at intel.com>
> ---
> backend/src/CMakeLists.txt | 1 +
> backend/src/llvm/llvm_gen_backend.hpp | 3 +
> backend/src/llvm/llvm_legalize.cpp | 565 +++++++++++++++++++++++++++++++++
> backend/src/llvm/llvm_to_gen.cpp | 1 +
> 4 files changed, 570 insertions(+)
> create mode 100644 backend/src/llvm/llvm_legalize.cpp
>
> +
> + for (Value *v : processed) {
> + if (isa<Instruction>(v)) {
> + dyn_cast<Instruction>(v)->eraseFromParent();
segfault at the above line when run utest builtin_ilogb_float16:
builtin_ilogb_float16()While deleting: i512 %uret.sroa.0.44.insert.ext.i
Use still stuck around after Def is destroyed: %uret.sroa.0.44.insert.ext.i = zext i32 %conv.i.i40.i to i512
The root cause should be that the instructions in processed set may use valuses in the same
set. When erase the def before the use, it trigger this assert.
> + }
> + }
> +
> + processed.clear();
> + valueMap.clear();
> + return changed;
> + }
> +
More information about the Beignet
mailing list