forked from OSchip/llvm-project
[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:
parent
bc8fdaaf60
commit
8ee540c01a
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue