Chromium Code Reviews| Index: src/IceTargetLoweringMIPS32.cpp |
| diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp |
| index 32656ce4ee9ba008bee7b1f7482b627942c6a49c..37ebd8e7b304c9eabc2da14da696339963d60569 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(); |
|
Jim Stichnoth
2016/09/22 18:18:24
This gives an error in a MINIMAL build (make -f Ma
obucinac
2016/09/22 18:58:16
Maybe this would do...
|
| + assert(SrcTy == IceType_i32 || SrcTy == IceType_i64); |
| + switch (Src->getType()) { |
| + 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); |