/// parameter values of an intrinsic. If the number of return values is > 1,
/// then the intrinsic implicitly returns a first-class aggregate. The
/// numbering of the types starts at 0 with the first return value and
- /// continues from there throug the parameter list. This is useful for
+ /// continues from there through the parameter list. This is useful for
/// "matching" types.
struct IntrinsicSignature {
/// RetVTs - The MVT::SimpleValueType for each return type. Note that this
// Memory mod/ref behavior of this intrinsic.
enum {
- NoMem, ReadArgMem, ReadMem, WriteArgMem, WriteMem
+ NoMem, ReadArgMem, ReadMem, ReadWriteArgMem, ReadWriteMem
} ModRef;
- // This is set to true if the intrinsic is overloaded by its argument
- // types.
+ /// This is set to true if the intrinsic is overloaded by its argument
+ /// types.
bool isOverloaded;
- // isCommutative - True if the intrinsic is commutative.
- //
+ /// isCommutative - True if the intrinsic is commutative.
bool isCommutative;
+ /// canThrow - True if the intrinsic can throw.
+ bool canThrow;
+
+ enum ArgAttribute {
+ NoCapture
+ };
+ std::vector<std::pair<unsigned, ArgAttribute> > ArgumentAttributes;
+
CodeGenIntrinsic(Record *R);
};
/// LoadIntrinsics - Read all of the intrinsics defined in the specified
/// .td file.
- std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper &RC);
+ std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper &RC,
+ bool TargetOnly);
}
#endif