diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-12 11:23:09 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-12 11:23:31 -0700 |
commit | def22b8d534168bef164f958028bcb17d3ad23aa (patch) | |
tree | cec9561e777fda5bec428637b99a247b2e001128 | |
parent | 846fb98f0ac29dc556c80b606ce7e6e9c1c8afae (diff) |
legalize add etc. of < 32-bit illegal values properly; fixes #1505
-rw-r--r-- | src/analyzer.js | 10 | ||||
-rw-r--r-- | tests/cases/phi24_ta2.ll | 3 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index 1a752305..931ce421 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -765,7 +765,15 @@ function analyzer(data, sidePass) { } break; } - case 'add': case 'sub': case 'sdiv': case 'udiv': case 'mul': case 'urem': case 'srem': + case 'add': case 'sub': case 'sdiv': case 'udiv': case 'mul': case 'urem': case 'srem': { + if (sourceBits < 32) { + // when we add illegal types like i24, we must work on the singleton chunks + item.assignTo += '$0'; + item.params[0].ident += '$0'; + item.params[1].ident += '$0'; + } + // fall through + } case 'uitofp': case 'sitofp': case 'fptosi': case 'fptoui': { // We cannot do these in parallel chunks of 32-bit operations. We will handle these in processMathop i++; diff --git a/tests/cases/phi24_ta2.ll b/tests/cases/phi24_ta2.ll index b5b0664b..4894d5e6 100644 --- a/tests/cases/phi24_ta2.ll +++ b/tests/cases/phi24_ta2.ll @@ -549,7 +549,8 @@ safe_mod_func_uint32_t_u_u.exit.i.i: ; preds = %189, %.preheader..p %p_5.sroa.0.0.extract.trunc2674116.i.i = phi i8 [ %p_5.sroa.0.0.extract.trunc2670.i.i, %189 ], [ -1, %.preheader..preheader.split_crit_edge.i.i ] %p_5.sroa.1.sroa.0.0.load6982115.i.i = phi i24 [ %p_5.sroa.1.sroa.0.0.load6978.i.i, %189 ], [ -1, %.preheader..preheader.split_crit_edge.i.i ] store i16 0, i16* @g_84, align 2 - %p_5.sroa.1.1.insert.ext36.i.i = trunc i24 %p_5.sroa.1.sroa.0.0.load6982115.i.i to i16 + %adddd = add i24 %p_5.sroa.1.sroa.0.0.load6982115.i.i, 1 ; test i24 add + %p_5.sroa.1.1.insert.ext36.i.i = trunc i24 %adddd to i16 %p_5.sroa.1.1.insert.shift37.i.i = shl i16 %p_5.sroa.1.1.insert.ext36.i.i, 8 %p_5.sroa.0.0.insert.ext10.i.i = zext i8 %p_5.sroa.0.0.extract.trunc2674116.i.i to i16 %p_5.sroa.0.0.insert.insert12.i.i = or i16 %p_5.sroa.1.1.insert.shift37.i.i, %p_5.sroa.0.0.insert.ext10.i.i |