| Index: src/IceTargetLoweringMIPS32.cpp
|
| diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp
|
| index 32656ce4ee9ba008bee7b1f7482b627942c6a49c..f61ba8a862993c3098ebd14d8e0e8447e8a9432c 100644
|
| --- a/src/IceTargetLoweringMIPS32.cpp
|
| +++ b/src/IceTargetLoweringMIPS32.cpp
|
| @@ -2846,8 +2846,25 @@ void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) {
|
| return;
|
| }
|
| case Intrinsics::Ctlz: {
|
| - UnimplementedLoweringError(this, Instr);
|
| - return;
|
| + auto *Src = Instr->getArg(0);
|
| + const Type SrcTy = Src->getType();
|
| + assert(SrcTy == IceType_i32 || SrcTy == IceType_i64);
|
| + switch (SrcTy) {
|
| + case IceType_i32: {
|
| + auto *T = I32Reg();
|
| + auto *SrcR = legalizeToReg(Src);
|
| + _clz(T, SrcR);
|
| + _mov(Dest, T);
|
| + break;
|
| + }
|
| + case IceType_i64: {
|
| + UnimplementedLoweringError(this, Instr);
|
| + break;
|
| + }
|
| + default:
|
| + llvm::report_fatal_error("Control flow should never have reached here.");
|
| + }
|
| + break;
|
| }
|
| case Intrinsics::Cttz: {
|
| UnimplementedLoweringError(this, Instr);
|
|
|