From 563a9cf7ba3055921b7de9f05dd9223e82d20aba Mon Sep 17 00:00:00 2001 From: Justin Holewinski Date: Thu, 25 Jul 2013 12:32:00 +0000 Subject: Fix a bug in TableGen where the intrinsic function name recognizer could mis-identify names if one was a prefix substring of the other For two intrinsics 'llvm.nvvm.texsurf.handle' and 'llvm.nvvm.texsurf.handle.internal', TableGen was emitting matching code like: if (Name.startswith("llvm.nvvm.texsurf.handle")) ... if (Name.startswith("llvm.nvvm.texsurf.handle.internal")) ... We can never match "llvm.nvvm.texsurf.handle.internal" here because it will always be erroneously matched by the first condition. The fix is to sort the intrinsic names and emit them in reverse order. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187119 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/TableGen/intrinsic-order.td | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/TableGen/intrinsic-order.td (limited to 'test/TableGen') diff --git a/test/TableGen/intrinsic-order.td b/test/TableGen/intrinsic-order.td new file mode 100644 index 0000000..5eadf60 --- /dev/null +++ b/test/TableGen/intrinsic-order.td @@ -0,0 +1,35 @@ +// RUN: llvm-tblgen -gen-intrinsic %s | FileCheck %s + +class IntrinsicProperty; + +class ValueType { + string Namespace = "MVT"; + int Size = size; + int Value = value; +} + +class LLVMType { + ValueType VT = vt; +} + +class Intrinsic param_types = []> { + string LLVMName = name; + bit isTarget = 0; + string TargetPrefix = ""; + list RetTypes = []; + list ParamTypes = param_types; + list Properties = []; +} + +def iAny : ValueType<0, 254>; +def llvm_anyint_ty : LLVMType; + + +// Make sure an intrinsic name that is a prefix of another is checked after the +// other. + +// CHECK: if (NameR.startswith("oo.bar.")) return Intrinsic::foo_bar; +// CHECK: if (NameR.startswith("oo.")) return Intrinsic::foo; + +def int_foo : Intrinsic<"llvm.foo", [llvm_anyint_ty]>; +def int_foo_bar : Intrinsic<"llvm.foo.bar", [llvm_anyint_ty]>; -- cgit v1.1