RyuJIT/x86: convert SBCG to NYI for multi-level expression trees
authorBruce Forstall <brucefo@microsoft.com>
Wed, 4 May 2016 16:41:57 +0000 (09:41 -0700)
committerBruce Forstall <brucefo@microsoft.com>
Wed, 4 May 2016 23:40:25 +0000 (16:40 -0700)
commitd1d7a46db4d75f9ef323fc4ae5b4a1efc661476b
treeba2917a3ce03a4d089e0a11127a82e91620b7086
parentaf1961073ba02f76c58a86f5528066e5813c2bb1
RyuJIT/x86: convert SBCG to NYI for multi-level expression trees

In general, we decompose longs by walking the tree bottom-up. So, e.g.,
we'll decompose 'add' as follows:

  + (gt_long(lo1, hi1), gt_long(lo2, hi2))
=>
  gt_long (+ (lo1, lo2), +Hi (hi1, hi2))

But what if lo1 is '+' and hi1 is '+Hi'? So,

  + (gt_long( + (lo3, lo4), +Hi (hi3, hi4) ), gt_long(lo2, hi2))
=>
  gt_long (+ ( + (lo3, lo4), lo2), +Hi ( +Hi (hi3, hi4), hi2))

But we can't put any instructions between '+ (lo3, lo4)' and '+Hi (hi3, hi4)'
or we'll lose the carry bit.

We need to model this differently, or introduce temps. Until this is
done, convert the silent bad codegen into NYI fallback.
src/jit/gentree.h
src/jit/lower.cpp
tests/issues.targets