[SubZero] Fix code generation for vector type

The patch fixes legalizeToReg issues in vector code generation.
The patch also generates JALR for pointer to function and corrects encoding of FP conditional move instruction.

R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/2468133002 .

Patch from Jaydeep Patil <jaydeep.patil@imgtec.com>.
diff --git a/src/IceInstMIPS32.cpp b/src/IceInstMIPS32.cpp
index 8cf5593..b627a20 100644
--- a/src/IceInstMIPS32.cpp
+++ b/src/IceInstMIPS32.cpp
@@ -552,7 +552,7 @@
     CallTarget->emitWithoutPrefix(Func->getTarget());
   } else {
     Str << "\t"
-           "jal"
+           "jalr"
            "\t";
     getCallTarget()->emit(Func);
   }
@@ -561,11 +561,14 @@
 void InstMIPS32Call::emitIAS(const Cfg *Func) const {
   assert(getSrcSize() == 1);
   auto *Asm = Func->getAssembler<MIPS32::AssemblerMIPS32>();
-  if (const auto *CallTarget =
-          llvm::dyn_cast<ConstantRelocatable>(getCallTarget())) {
+  if (llvm::isa<ConstantInteger32>(getCallTarget())) {
+    llvm::report_fatal_error("MIPS32Call to ConstantInteger32");
+  } else if (const auto *CallTarget =
+                 llvm::dyn_cast<ConstantRelocatable>(getCallTarget())) {
     Asm->jal(CallTarget);
   } else {
-    llvm::report_fatal_error("MIPS32Call: Invalid operand");
+    const Operand *ImplicitRA = nullptr;
+    Asm->jalr(getCallTarget(), ImplicitRA);
   }
 }