diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/X86/X86LegalizerInfo.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Target/X86/X86LegalizerInfo.cpp | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/X86/X86LegalizerInfo.cpp b/contrib/llvm-project/llvm/lib/Target/X86/X86LegalizerInfo.cpp index 84f560f2f9ee..1b371ac2a108 100644 --- a/contrib/llvm-project/llvm/lib/Target/X86/X86LegalizerInfo.cpp +++ b/contrib/llvm-project/llvm/lib/Target/X86/X86LegalizerInfo.cpp @@ -70,6 +70,11 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI, setLegalizerInfoAVX512DQ(); setLegalizerInfoAVX512BW(); + getActionDefinitionsBuilder(G_INTRINSIC_ROUNDEVEN) + .scalarize(0) + .minScalar(0, LLT::scalar(32)) + .libcall(); + setLegalizeScalarToDifferentSizeStrategy(G_PHI, 0, widen_1); for (unsigned BinOp : {G_SUB, G_MUL, G_AND, G_OR, G_XOR}) setLegalizeScalarToDifferentSizeStrategy(BinOp, 0, widen_1); @@ -81,25 +86,14 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI, setLegalizeScalarToDifferentSizeStrategy( G_CONSTANT, 0, widenToLargerTypesAndNarrowToLargest); + getActionDefinitionsBuilder({G_MEMCPY, G_MEMMOVE, G_MEMSET}).libcall(); + computeTables(); verify(*STI.getInstrInfo()); } bool X86LegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper, MachineInstr &MI) const { - MachineIRBuilder &MIRBuilder = Helper.MIRBuilder; - switch (MI.getIntrinsicID()) { - case Intrinsic::memcpy: - case Intrinsic::memset: - case Intrinsic::memmove: - if (createMemLibcall(MIRBuilder, *MIRBuilder.getMRI(), MI) == - LegalizerHelper::UnableToLegalize) - return false; - MI.eraseFromParent(); - return true; - default: - break; - } return true; } @@ -161,6 +155,11 @@ void X86LegalizerInfo::setLegalizerInfo32bit() { .legalFor({{s8, s8}, {s16, s8}, {s32, s8}}) .clampScalar(0, s8, s32) .clampScalar(1, s8, s8); + + // Comparison + getActionDefinitionsBuilder(G_ICMP) + .legalForCartesianProduct({s8}, {s8, s16, s32, p0}) + .clampScalar(0, s8, s8); } // Control-flow @@ -179,12 +178,6 @@ void X86LegalizerInfo::setLegalizerInfo32bit() { setAction({G_ANYEXT, s128}, Legal); getActionDefinitionsBuilder(G_SEXT_INREG).lower(); - // Comparison - setAction({G_ICMP, s1}, Legal); - - for (auto Ty : {s8, s16, s32, p0}) - setAction({G_ICMP, 1, Ty}, Legal); - // Merge/Unmerge for (const auto &Ty : {s16, s32, s64}) { setAction({G_MERGE_VALUES, Ty}, Legal); @@ -253,7 +246,9 @@ void X86LegalizerInfo::setLegalizerInfo64bit() { .widenScalarToNextPow2(1); // Comparison - setAction({G_ICMP, 1, s64}, Legal); + getActionDefinitionsBuilder(G_ICMP) + .legalForCartesianProduct({s8}, {s8, s16, s32, s64, p0}) + .clampScalar(0, s8, s8); getActionDefinitionsBuilder(G_FCMP) .legalForCartesianProduct({s8}, {s32, s64}) |