mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
For PR1297:
Implement code generation for overloaded intrinsic functions. The basic difference is that "actual" argument types must be provided when constructing intrinsic names and types. Also, for recognition, only the prefix is examined. If it matches, the suffix is assumed to match. The suffix is checked by the Verifier, however. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -43,6 +43,7 @@ std::string llvm::getName(MVT::ValueType T) {
|
||||
case MVT::i32: return "MVT::i32";
|
||||
case MVT::i64: return "MVT::i64";
|
||||
case MVT::i128: return "MVT::i128";
|
||||
case MVT::iAny: return "MVT::iAny";
|
||||
case MVT::f32: return "MVT::f32";
|
||||
case MVT::f64: return "MVT::f64";
|
||||
case MVT::f80: return "MVT::f80";
|
||||
@@ -74,6 +75,7 @@ std::string llvm::getEnumName(MVT::ValueType T) {
|
||||
case MVT::i32: return "MVT::i32";
|
||||
case MVT::i64: return "MVT::i64";
|
||||
case MVT::i128: return "MVT::i128";
|
||||
case MVT::iAny: return "MVT::iAny";
|
||||
case MVT::f32: return "MVT::f32";
|
||||
case MVT::f64: return "MVT::f64";
|
||||
case MVT::f80: return "MVT::f80";
|
||||
@@ -570,6 +572,7 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R, CodeGenTarget *CGT) {
|
||||
TheDef = R;
|
||||
std::string DefName = R->getName();
|
||||
ModRef = WriteMem;
|
||||
isOverloaded = false;
|
||||
|
||||
if (DefName.size() <= 4 ||
|
||||
std::string(DefName.begin(), DefName.begin()+4) != "int_")
|
||||
@@ -610,13 +613,14 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R, CodeGenTarget *CGT) {
|
||||
Record *TyEl = TypeList->getElementAsRecord(i);
|
||||
assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!");
|
||||
ArgTypes.push_back(TyEl->getValueAsString("TypeVal"));
|
||||
|
||||
if (CGT)
|
||||
ArgVTs.push_back(getValueType(TyEl->getValueAsDef("VT"), CGT));
|
||||
MVT::ValueType VT = getValueType(TyEl->getValueAsDef("VT"), CGT);
|
||||
isOverloaded |= VT == MVT::iAny;
|
||||
ArgVTs.push_back(VT);
|
||||
ArgTypeDefs.push_back(TyEl);
|
||||
}
|
||||
if (ArgTypes.size() == 0)
|
||||
throw "Intrinsic '"+DefName+"' needs at least a type for the ret value!";
|
||||
|
||||
|
||||
// Parse the intrinsic properties.
|
||||
ListInit *PropList = R->getValueAsListInit("Properties");
|
||||
|
Reference in New Issue
Block a user