diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 5877807..ef5818d 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -76,6 +76,12 @@
 
 static RTLIB::Libcall getRTLibDesc(unsigned Opcode, unsigned Size) {
   switch (Opcode) {
+  case TargetOpcode::G_SDIV:
+    assert(Size == 32 && "Unsupported size");
+    return RTLIB::SDIV_I32;
+  case TargetOpcode::G_UDIV:
+    assert(Size == 32 && "Unsupported size");
+    return RTLIB::UDIV_I32;
   case TargetOpcode::G_FADD:
     assert((Size == 32 || Size == 64) && "Unsupported size");
     return Size == 64 ? RTLIB::ADD_F64 : RTLIB::ADD_F32;
@@ -87,31 +93,43 @@
   llvm_unreachable("Unknown libcall function");
 }
 
+static LegalizerHelper::LegalizeResult
+simpleLibcall(MachineInstr &MI, MachineIRBuilder &MIRBuilder, unsigned Size,
+              Type *OpType) {
+  auto &CLI = *MIRBuilder.getMF().getSubtarget().getCallLowering();
+  auto &TLI = *MIRBuilder.getMF().getSubtarget().getTargetLowering();
+  auto Libcall = getRTLibDesc(MI.getOpcode(), Size);
+  const char *Name = TLI.getLibcallName(Libcall);
+  MIRBuilder.getMF().getFrameInfo().setHasCalls(true);
+  CLI.lowerCall(MIRBuilder, TLI.getLibcallCallingConv(Libcall),
+                MachineOperand::CreateES(Name),
+                {MI.getOperand(0).getReg(), OpType},
+                {{MI.getOperand(1).getReg(), OpType},
+                 {MI.getOperand(2).getReg(), OpType}});
+  MI.eraseFromParent();
+  return LegalizerHelper::Legalized;
+}
+
 LegalizerHelper::LegalizeResult
 LegalizerHelper::libcall(MachineInstr &MI) {
   LLT Ty = MRI.getType(MI.getOperand(0).getReg());
   unsigned Size = Ty.getSizeInBits();
+  auto &Ctx = MIRBuilder.getMF().getFunction()->getContext();
   MIRBuilder.setInstr(MI);
 
   switch (MI.getOpcode()) {
   default:
     return UnableToLegalize;
+  case TargetOpcode::G_SDIV:
+  case TargetOpcode::G_UDIV: {
+    Type *Ty = Type::getInt32Ty(Ctx);
+    return simpleLibcall(MI, MIRBuilder, Size, Ty);
+  }
   case TargetOpcode::G_FADD:
   case TargetOpcode::G_FPOW:
   case TargetOpcode::G_FREM: {
-    auto &Ctx = MIRBuilder.getMF().getFunction()->getContext();
     Type *Ty = Size == 64 ? Type::getDoubleTy(Ctx) : Type::getFloatTy(Ctx);
-    auto &CLI = *MIRBuilder.getMF().getSubtarget().getCallLowering();
-    auto &TLI = *MIRBuilder.getMF().getSubtarget().getTargetLowering();
-    auto Libcall = getRTLibDesc(MI.getOpcode(), Size);
-    const char *Name = TLI.getLibcallName(Libcall);
-    MIRBuilder.getMF().getFrameInfo().setHasCalls(true);
-    CLI.lowerCall(
-        MIRBuilder, TLI.getLibcallCallingConv(Libcall),
-        MachineOperand::CreateES(Name), {MI.getOperand(0).getReg(), Ty},
-        {{MI.getOperand(1).getReg(), Ty}, {MI.getOperand(2).getReg(), Ty}});
-    MI.eraseFromParent();
-    return Legalized;
+    return simpleLibcall(MI, MIRBuilder, Size, Ty);
   }
   }
 }
