Index: lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp =================================================================== --- lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp +++ lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp @@ -157,6 +157,8 @@ return MVT::f32; if (RC == &WebAssembly::F64RegClass) return MVT::f64; + if (RC == &WebAssembly::V128RegClass) + return MVT::v16i8; if (RC == &WebAssembly::EXCEPT_REFRegClass) return MVT::ExceptRef; llvm_unreachable("unrecognized register class"); Index: lib/Target/WebAssembly/WebAssemblyFastISel.cpp =================================================================== --- lib/Target/WebAssembly/WebAssemblyFastISel.cpp +++ lib/Target/WebAssembly/WebAssemblyFastISel.cpp @@ -1173,6 +1173,30 @@ Opc = WebAssembly::LOAD_F64; RC = &WebAssembly::F64RegClass; break; + case MVT::v16i8: + Opc = WebAssembly::LOAD_v16i8; + RC = &WebAssembly::V128RegClass; + break; + case MVT::v8i16: + Opc = WebAssembly::LOAD_v8i16; + RC = &WebAssembly::V128RegClass; + break; + case MVT::v4i32: + Opc = WebAssembly::LOAD_v4i32; + RC = &WebAssembly::V128RegClass; + break; + case MVT::v2i64: + Opc = WebAssembly::LOAD_v2i64; + RC = &WebAssembly::V128RegClass; + break; + case MVT::v4f32: + Opc = WebAssembly::LOAD_v4f32; + RC = &WebAssembly::V128RegClass; + break; + case MVT::v2f64: + Opc = WebAssembly::LOAD_v2f64; + RC = &WebAssembly::V128RegClass; + break; default: return false; } Index: lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp =================================================================== --- lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp +++ lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp @@ -70,6 +70,8 @@ CopyOpcode = WebAssembly::COPY_F32; else if (RC == &WebAssembly::F64RegClass) CopyOpcode = WebAssembly::COPY_F64; + else if (RC == &WebAssembly::V128RegClass) + CopyOpcode = WebAssembly::COPY_V128; else llvm_unreachable("Unexpected register class"); Index: lib/Target/WebAssembly/WebAssemblyRegStackify.cpp =================================================================== --- lib/Target/WebAssembly/WebAssemblyRegStackify.cpp +++ lib/Target/WebAssembly/WebAssemblyRegStackify.cpp @@ -117,6 +117,10 @@ ConstantFP *Val = cast(Constant::getNullValue( Type::getDoubleTy(MF.getFunction().getContext()))); MI->addOperand(MachineOperand::CreateFPImm(Val)); + } else if (RegClass == &WebAssembly::V128RegClass) { + MI->setDesc(TII->get(WebAssembly::CONST_V128_v2i64)); + MI->addOperand(MachineOperand::CreateImm(0)); + MI->addOperand(MachineOperand::CreateImm(0)); } else { llvm_unreachable("Unexpected reg class"); }