[llvm-dev] Q. about GlobalISel and order of instructions

via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 28 20:12:14 PST 2021


Hello Global ISel fans,

I am trying to patch up some unittests that accidentally weren't
actually running (https://reviews.llvm.org/D95257).  A number of
these look like all the right instructions are coming out, but
they aren't "in the right order."  That is, I see some tests
expect something along the lines of

    %2:_(s16) = G_TRUNC
    %3:_(s10) = G_TRUNC %2:_(s16)
    %4:_(s10) = G_SEXT_INREG %3:_(s10)
    %5:_(s16) = G_SEXT %4:_(s10)

That is, each instruction feeds nicely into the next one.
But what I'm actually seeing is reordered:

    %5:_(s16) = G_SEXT %4:_(s10)
    %2:_(s16) = G_TRUNC
    %4:_(s10) = G_SEXT_INREG %3:_(s10)
    %3:_(s10) = G_TRUNC %2:_(s16)

Now, I can certainly patch up the test to match the order I see,
but...  Is that actually correct?  Naively it looks like we have
uses preceding defs, which just looks weird.

If the order I'm seeing is wrong (and it's just a standard dump
of a MachineFunction) then can somebody fix it?  It will sure
make a lot less churn in the unittest.

Thanks,
--paulr




More information about the llvm-dev mailing list