Index: src/IceTargetLoweringMIPS32.cpp |
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp |
index 6d6c6b9316f43f8e48f4e759d7493ea7a7eea595..e8ab8aa673e08dd3af60bc8edbe561823b952b68 100644 |
--- a/src/IceTargetLoweringMIPS32.cpp |
+++ b/src/IceTargetLoweringMIPS32.cpp |
@@ -2809,7 +2809,18 @@ void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
return; |
} |
case Intrinsics::Ctlz: { |
- UnimplementedLoweringError(this, Instr); |
+ auto *Src = Instr->getArg(0); |
+ Type SrcTy = Src->getType(); |
Jim Stichnoth
2016/09/22 13:48:27
const Type
obucinac
2016/09/22 15:42:07
Done.
|
+ if (isScalarIntegerType(SrcTy)) { |
Jim Stichnoth
2016/09/22 13:48:27
This code seems a bit unbalanced - it appears to d
obucinac
2016/09/22 15:42:07
Done.
|
+ if (SrcTy == IceType_i64) { |
+ UnimplementedLoweringError(this, Instr); |
+ } else { |
+ auto *DestR = legalizeToReg(Dest); |
Jim Stichnoth
2016/09/22 13:48:27
This doesn't seem right to me. Dest shouldn't act
obucinac
2016/09/22 15:42:07
Done.
|
+ auto *SrcR = legalizeToReg(Src); |
+ _clz(DestR, SrcR); |
+ _mov(Dest, DestR); |
+ } |
+ } |
return; |
} |
case Intrinsics::Cttz: { |