[llvm] [X86][GlobalISel] Enable G_BUILD_VECTOR and G_CONSTANT_POOL (PR #92844)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon May 20 22:41:42 PDT 2024
================
@@ -552,6 +579,73 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
verify(*STI.getInstrInfo());
}
+bool X86LegalizerInfo::legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI,
+ LostDebugLocObserver &LocObserver) const {
+ MachineIRBuilder &MIRBuilder = Helper.MIRBuilder;
+ MachineRegisterInfo &MRI = *MIRBuilder.getMRI();
+ switch (MI.getOpcode()) {
+ default:
+ // No idea what to do.
+ return false;
+ case TargetOpcode::G_BUILD_VECTOR:
+ return legalizeBuildVector(MI, MRI, Helper);
+ }
+ llvm_unreachable("expected switch to return");
+}
+
+bool X86LegalizerInfo::legalizeBuildVector(MachineInstr &MI,
+ MachineRegisterInfo &MRI,
+ LegalizerHelper &Helper) const {
+ MachineIRBuilder &MIRBuilder = Helper.MIRBuilder;
+ const auto &BuildVector = cast<GBuildVector>(MI);
+ Register Dst = BuildVector.getReg(0);
+ LLT DstTy = MRI.getType(Dst);
+ if (!isConstantOrConstantVector(MI, MRI, /* AllowFP */ true)) {
----------------
arsenm wrote:
If you're just going to parse through the elements, might as well just do that once below instead of pre-checking it here
https://github.com/llvm/llvm-project/pull/92844
More information about the llvm-commits
mailing list