[ARM GlobalISel] Fix G_(UN)MERGE_VALUES handling after r319524

r319524 has made more G_MERGE_VALUES/G_UNMERGE_VALUES pairs legal than
are supported by the rest of the pipeline. Restrict that to only the
cases that we can currently handle: packing 32-bit values into 64-bit
ones, when we have hardware FP.

llvm-svn: 320980
This commit is contained in:
Diana Picus 2017-12-18 13:22:28 +00:00
parent bc8fdaaf60
commit 8ee540c01a
1 changed files with 5 additions and 9 deletions

View File

@ -158,6 +158,11 @@ ARMLegalizerInfo::ARMLegalizerInfo(const ARMSubtarget &ST) {
setAction({G_FCMP, s1}, Legal);
setAction({G_FCMP, 1, s32}, Legal);
setAction({G_FCMP, 1, s64}, Legal);
setAction({G_MERGE_VALUES, s64}, Legal);
setAction({G_MERGE_VALUES, 1, s32}, Legal);
setAction({G_UNMERGE_VALUES, s32}, Legal);
setAction({G_UNMERGE_VALUES, 1, s64}, Legal);
} else {
for (unsigned BinOp : {G_FADD, G_FSUB, G_FMUL, G_FDIV})
for (auto Ty : {s32, s64})
@ -177,15 +182,6 @@ ARMLegalizerInfo::ARMLegalizerInfo(const ARMSubtarget &ST) {
for (auto Ty : {s32, s64})
setAction({Op, Ty}, Libcall);
// Merge/Unmerge
for (const auto &Ty : {s32, s64}) {
setAction({G_MERGE_VALUES, Ty}, Legal);
setAction({G_UNMERGE_VALUES, 1, Ty}, Legal);
}
for (const auto &Ty : {s16, s32}) {
setAction({G_MERGE_VALUES, 1, Ty}, Legal);
setAction({G_UNMERGE_VALUES, Ty}, Legal);
}
computeTables();
}