mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-27 13:40:43 +00:00
Teach TableGen Intrin Emitter to handle LLVMPointerType<llvm_any_ty>
r363233 rewrote a bunch of the Intrin Emitter code, however the new function to update the arg codes did not properly consider a pointer to an any. This patch adds that logic. Differential Revision: https://reviews.llvm.org/D63507 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364364 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1c5d0ae75b
commit
8910947d9a
53
test/TableGen/intrinsic-pointer-to-any.td
Normal file
53
test/TableGen/intrinsic-pointer-to-any.td
Normal file
@ -0,0 +1,53 @@
|
||||
// RUN: llvm-tblgen -gen-intrinsic-impl %s | FileCheck %s
|
||||
|
||||
// This test is validating that it an Intrinsic with an LLVMPointerType to
|
||||
// llvm_any_ty still properly work after r363233. That patch rewrote the
|
||||
// substitution handling code in the Intrinsic Emitter, and didn't consider this
|
||||
// case, so TableGen would hit an assertion in EncodeFixedType that was checking
|
||||
// to ensure that the substitution being processed was correctly replaced.
|
||||
|
||||
class IntrinsicProperty;
|
||||
class SDNodeProperty;
|
||||
|
||||
class ValueType<int size, int value> {
|
||||
string Namespace = "MVT";
|
||||
int Size = size;
|
||||
int Value = value;
|
||||
}
|
||||
|
||||
def iPTR : ValueType<0 , 254>;
|
||||
def Any : ValueType<0 , 255>;
|
||||
|
||||
class LLVMType<ValueType vt> {
|
||||
ValueType VT = vt;
|
||||
int isAny = 0;
|
||||
}
|
||||
|
||||
|
||||
class Intrinsic<list<LLVMType> ret_types> {
|
||||
string LLVMName = "";
|
||||
string TargetPrefix = ""; // Set to a prefix for target-specific intrinsics.
|
||||
list<LLVMType> RetTypes = ret_types;
|
||||
list<LLVMType> ParamTypes = [];
|
||||
list<IntrinsicProperty> IntrProperties = [];
|
||||
list<SDNodeProperty> Properties = [];
|
||||
bit isTarget = 0;
|
||||
}
|
||||
|
||||
class LLVMQualPointerType<LLVMType elty>
|
||||
: LLVMType<iPTR>{
|
||||
LLVMType ElTy = elty;
|
||||
int AddrSpace = 0;
|
||||
}
|
||||
|
||||
class LLVMPointerType<LLVMType elty>
|
||||
: LLVMQualPointerType<elty>;
|
||||
|
||||
let isAny = 1 in {
|
||||
def llvm_any_ty : LLVMType<Any>;
|
||||
}
|
||||
def i8 : ValueType<8, 3>;
|
||||
def llvm_i8_ty : LLVMType<i8>;
|
||||
|
||||
def int_has_ptr_to_any : Intrinsic<[LLVMPointerType<llvm_any_ty>, llvm_i8_ty]>;
|
||||
// CHECK: /* 0 */ 21, 14, 15, 0, 2, 0
|
@ -372,6 +372,9 @@ static void UpdateArgCodes(Record *R, std::vector<unsigned char> &ArgCodes,
|
||||
unsigned Tmp = 0;
|
||||
switch (getValueType(R->getValueAsDef("VT"))) {
|
||||
default: break;
|
||||
case MVT::iPTR:
|
||||
UpdateArgCodes(R->getValueAsDef("ElTy"), ArgCodes, NumInserted, Mapping);
|
||||
break;
|
||||
case MVT::iPTRAny:
|
||||
++Tmp;
|
||||
LLVM_FALLTHROUGH;
|
||||
|
Loading…
Reference in New Issue
Block a user