Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 llvm-svn: 364364
- Loading branch information
Erich Keane
committed
Jun 26, 2019
1 parent
ae9e42f
commit ad28bef
Showing
2 changed files
with
56 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters