AMDGPU/GlobalISel: Legalize G_[SU]DIVREM instructions
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D100726
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index e151111..734e157 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -2046,6 +2046,15 @@
Observer.changedInstr(MI);
return Legalized;
+ case TargetOpcode::G_SDIVREM:
+ Observer.changingInstr(MI);
+ widenScalarSrc(MI, WideTy, 2, TargetOpcode::G_SEXT);
+ widenScalarSrc(MI, WideTy, 3, TargetOpcode::G_SEXT);
+ widenScalarDst(MI, WideTy);
+ widenScalarDst(MI, WideTy, 1);
+ Observer.changedInstr(MI);
+ return Legalized;
+
case TargetOpcode::G_ASHR:
case TargetOpcode::G_LSHR:
Observer.changingInstr(MI);
@@ -2076,6 +2085,15 @@
Observer.changedInstr(MI);
return Legalized;
+ case TargetOpcode::G_UDIVREM:
+ Observer.changingInstr(MI);
+ widenScalarSrc(MI, WideTy, 2, TargetOpcode::G_ZEXT);
+ widenScalarSrc(MI, WideTy, 3, TargetOpcode::G_ZEXT);
+ widenScalarDst(MI, WideTy);
+ widenScalarDst(MI, WideTy, 1);
+ Observer.changedInstr(MI);
+ return Legalized;
+
case TargetOpcode::G_SELECT:
Observer.changingInstr(MI);
if (TypeIdx == 0) {
@@ -4142,6 +4160,8 @@
case G_UDIV:
case G_SREM:
case G_UREM:
+ case G_SDIVREM:
+ case G_UDIVREM:
case G_SMIN:
case G_SMAX:
case G_UMIN: