diff --git a/clang/include/clang/Basic/arm_mve.td b/clang/include/clang/Basic/arm_mve.td index 412ef9abac1bc..2e5e1d93be096 100644 --- a/clang/include/clang/Basic/arm_mve.td +++ b/clang/include/clang/Basic/arm_mve.td @@ -831,9 +831,8 @@ multiclass contiguous_load; def: Intrinsic>:$addr, Predicate:$pred), - (IRIntBase<"masked_load", [Vector, CPtr]> - (CPtr $addr), !srl(memtype.size,3), - $pred, (zeroinit Vector))>, + (masked_load Vector, (CPtr $addr), + !srl(memtype.size,3), $pred, (zeroinit Vector))>, NameOverride; } @@ -846,9 +845,8 @@ multiclass contiguous_load; def: Intrinsic>:$addr, Predicate:$pred), - (IRIntBase<"masked_load", [Vector, CPtr]> - (CPtr $addr), !srl(memtype.size,3), - $pred, (zeroinit Vector))>, + (masked_load Vector, (CPtr $addr), + !srl(memtype.size,3), $pred, (zeroinit Vector))>, NameOverride<"vld1q_z">; } @@ -863,9 +861,7 @@ multiclass contiguous_load; def: Intrinsic>:$addr, Predicate:$pred), - (extend (IRIntBase<"masked_load", - [NarrowedVecOf, - CPtr>]> + (extend (masked_load NarrowedVecOf, (CPtr> $addr), !srl(memtype.size,3), $pred, (zeroinit NarrowedVecOf)), @@ -890,8 +886,7 @@ multiclass contiguous_store; def: Intrinsic>:$addr, Vector:$value, Predicate:$pred), - (IRIntBase<"masked_store", [Vector, Ptr]> - $value, (Ptr $addr), + (masked_store $value, (Ptr $addr), !srl(memtype.size,3), $pred)>, NameOverride; } @@ -907,8 +902,7 @@ multiclass contiguous_store; def: Intrinsic>:$addr, Vector:$value, Predicate:$pred), - (IRIntBase<"masked_store", [Vector, Ptr]> - $value, (Ptr $addr), + (masked_store $value, (Ptr $addr), !srl(memtype.size,3), $pred)>, NameOverride<"vst1q_p">; } @@ -925,9 +919,7 @@ multiclass contiguous_store; def: Intrinsic>:$addr, Vector:$value, Predicate:$pred), - (IRIntBase<"masked_store", - [NarrowedVecOf, - Ptr>]> + (masked_store (trunc $value, NarrowedVecOf), (Ptr> $addr), !srl(memtype.size,3), $pred)>, diff --git a/clang/include/clang/Basic/arm_mve_defs.td b/clang/include/clang/Basic/arm_mve_defs.td index 083d03a396ba3..c1562a0c1f04c 100644 --- a/clang/include/clang/Basic/arm_mve_defs.td +++ b/clang/include/clang/Basic/arm_mve_defs.td @@ -134,6 +134,13 @@ def unzip: CGHelperFn<"VectorUnzip"> { } def zip: CGHelperFn<"VectorZip">; +def masked_load: IRBuilder<"CreateMaskedLoad"> { + let special_params = [IRBuilderIntParam<2, "Align">]; +} +def masked_store: IRBuilder<"CreateMaskedStore"> { + let special_params = [IRBuilderIntParam<2, "Align">]; +} + // Trivial 'codegen' function that just returns its argument. Useful // for wrapping up a variable name like $foo into a thing you can pass // around as type 'dag'. diff --git a/clang/utils/TableGen/MveEmitter.cpp b/clang/utils/TableGen/MveEmitter.cpp index a003b5e632d58..f55a5f54bd158 100644 --- a/clang/utils/TableGen/MveEmitter.cpp +++ b/clang/utils/TableGen/MveEmitter.cpp @@ -1684,7 +1684,8 @@ void EmitterBase::EmitBuiltinCG(raw_ostream &OS) { OS << " case ARM::BI__builtin_arm_" << OI.Int->builtinExtension() << "_" << OI.Name << ":\n"; for (size_t i = 0, e = MG.ParamTypes.size(); i < e; ++i) - OS << " Param" << utostr(i) << " = " << OI.ParamValues[i] << ";\n"; + OS << " Param" << utostr(i) << " = static_cast<" + << MG.ParamTypes[i] << ">(" << OI.ParamValues[i] << ");\n"; OS << " break;\n"; } OS << " }\n";