Skip to content

Commit ac40b78

Browse files
authored
[Clang][MVE] Use IRBuilder methods to emit masked load/store (NFC) (#163790)
In preparation for an upcoming change which will convert the alignment argument to an alignment attribute, switch MVE builtin codegen to use the IRBuilder methods (which will handle this transparently) instead of explicitly emitting the intrinsic.
1 parent 6fa5513 commit ac40b78

File tree

3 files changed

+17
-17
lines changed

3 files changed

+17
-17
lines changed

clang/include/clang/Basic/arm_mve.td

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,8 @@ multiclass contiguous_load<string mnemonic, PrimitiveType memtype,
831831
NameOverride<mnemonic>;
832832
def: Intrinsic<Vector, (args CPtr<CopyKind<same_size[0], Scalar>>:$addr,
833833
Predicate:$pred),
834-
(IRIntBase<"masked_load", [Vector, CPtr<Vector>]>
835-
(CPtr<Vector> $addr), !srl(memtype.size,3),
836-
$pred, (zeroinit Vector))>,
834+
(masked_load Vector, (CPtr<Vector> $addr),
835+
!srl(memtype.size,3), $pred, (zeroinit Vector))>,
837836
NameOverride<mnemonic # "_z">;
838837
}
839838

@@ -846,9 +845,8 @@ multiclass contiguous_load<string mnemonic, PrimitiveType memtype,
846845
NameOverride<"vld1q">;
847846
def: Intrinsic<Vector, (args CPtr<CopyKind<same_size[0], Scalar>>:$addr,
848847
Predicate:$pred),
849-
(IRIntBase<"masked_load", [Vector, CPtr<Vector>]>
850-
(CPtr<Vector> $addr), !srl(memtype.size,3),
851-
$pred, (zeroinit Vector))>,
848+
(masked_load Vector, (CPtr<Vector> $addr),
849+
!srl(memtype.size,3), $pred, (zeroinit Vector))>,
852850
NameOverride<"vld1q_z">;
853851
}
854852

@@ -863,9 +861,7 @@ multiclass contiguous_load<string mnemonic, PrimitiveType memtype,
863861
NameOverride<mnemonic>;
864862
def: Intrinsic<Vector, (args CPtr<CopyKind<same_size[0], Scalar>>:$addr,
865863
Predicate:$pred),
866-
(extend (IRIntBase<"masked_load",
867-
[NarrowedVecOf<memtype,Vector>,
868-
CPtr<NarrowedVecOf<memtype,Vector>>]>
864+
(extend (masked_load NarrowedVecOf<memtype,Vector>,
869865
(CPtr<NarrowedVecOf<memtype,Vector>> $addr),
870866
!srl(memtype.size,3), $pred,
871867
(zeroinit NarrowedVecOf<memtype,Vector>)),
@@ -890,8 +886,7 @@ multiclass contiguous_store<string mnemonic, PrimitiveType memtype,
890886
NameOverride<mnemonic>;
891887
def: Intrinsic<Void, (args Ptr<CopyKind<same_size[0], Scalar>>:$addr,
892888
Vector:$value, Predicate:$pred),
893-
(IRIntBase<"masked_store", [Vector, Ptr<Vector>]>
894-
$value, (Ptr<Vector> $addr),
889+
(masked_store $value, (Ptr<Vector> $addr),
895890
!srl(memtype.size,3), $pred)>,
896891
NameOverride<mnemonic # "_p">;
897892
}
@@ -907,8 +902,7 @@ multiclass contiguous_store<string mnemonic, PrimitiveType memtype,
907902
NameOverride<"vst1q">;
908903
def: Intrinsic<Void, (args Ptr<CopyKind<same_size[0], Scalar>>:$addr,
909904
Vector:$value, Predicate:$pred),
910-
(IRIntBase<"masked_store", [Vector, Ptr<Vector>]>
911-
$value, (Ptr<Vector> $addr),
905+
(masked_store $value, (Ptr<Vector> $addr),
912906
!srl(memtype.size,3), $pred)>,
913907
NameOverride<"vst1q_p">;
914908
}
@@ -925,9 +919,7 @@ multiclass contiguous_store<string mnemonic, PrimitiveType memtype,
925919
NameOverride<mnemonic>;
926920
def: Intrinsic<Void, (args Ptr<CopyKind<same_size[0], Scalar>>:$addr,
927921
Vector:$value, Predicate:$pred),
928-
(IRIntBase<"masked_store",
929-
[NarrowedVecOf<memtype,Vector>,
930-
Ptr<NarrowedVecOf<memtype,Vector>>]>
922+
(masked_store
931923
(trunc $value, NarrowedVecOf<memtype,Vector>),
932924
(Ptr<NarrowedVecOf<memtype,Vector>> $addr),
933925
!srl(memtype.size,3), $pred)>,

clang/include/clang/Basic/arm_mve_defs.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,13 @@ def unzip: CGHelperFn<"VectorUnzip"> {
134134
}
135135
def zip: CGHelperFn<"VectorZip">;
136136

137+
def masked_load: IRBuilder<"CreateMaskedLoad"> {
138+
let special_params = [IRBuilderIntParam<2, "Align">];
139+
}
140+
def masked_store: IRBuilder<"CreateMaskedStore"> {
141+
let special_params = [IRBuilderIntParam<2, "Align">];
142+
}
143+
137144
// Trivial 'codegen' function that just returns its argument. Useful
138145
// for wrapping up a variable name like $foo into a thing you can pass
139146
// around as type 'dag'.

clang/utils/TableGen/MveEmitter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,8 @@ void EmitterBase::EmitBuiltinCG(raw_ostream &OS) {
16841684
OS << " case ARM::BI__builtin_arm_" << OI.Int->builtinExtension()
16851685
<< "_" << OI.Name << ":\n";
16861686
for (size_t i = 0, e = MG.ParamTypes.size(); i < e; ++i)
1687-
OS << " Param" << utostr(i) << " = " << OI.ParamValues[i] << ";\n";
1687+
OS << " Param" << utostr(i) << " = static_cast<"
1688+
<< MG.ParamTypes[i] << ">(" << OI.ParamValues[i] << ");\n";
16881689
OS << " break;\n";
16891690
}
16901691
OS << " }\n";

0 commit comments

Comments
 (0)