[AArch64][GlobalISel] Correct function evaluation order in applyINS

The order in which the nested calls to Builder.buildWhatever are
evaluated in differs between GCC and Clang.

This caused a bot failure because the MIR in the testcase was
coming out in a different order than expected.

Rather than using nested calls, pull them out in order to fix the
order of evaluation.
This commit is contained in:
Jessica Paquette 2021-02-23 16:12:56 -08:00
parent ef312951fd
commit daf7d7f0dc
1 changed files with 4 additions and 5 deletions

View File

@ -456,11 +456,10 @@ static bool applyINS(MachineInstr &MI, MachineRegisterInfo &MRI,
Register DstVec, SrcVec;
int DstLane, SrcLane;
std::tie(DstVec, DstLane, SrcVec, SrcLane) = MatchInfo;
Builder.buildInsertVectorElement(
Dst, DstVec,
Builder.buildExtractVectorElement(
ScalarTy, SrcVec, Builder.buildConstant(LLT::scalar(64), SrcLane)),
Builder.buildConstant(LLT::scalar(64), DstLane));
auto SrcCst = Builder.buildConstant(LLT::scalar(64), SrcLane);
auto Extract = Builder.buildExtractVectorElement(ScalarTy, SrcVec, SrcCst);
auto DstCst = Builder.buildConstant(LLT::scalar(64), DstLane);
Builder.buildInsertVectorElement(Dst, DstVec, Extract, DstCst);
MI.eraseFromParent();
return true;
}