Fix regression after D150436
authorWang, Xin10 <xin10.wang@intel.com>
Tue, 16 May 2023 12:04:35 +0000 (13:04 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 16 May 2023 12:04:44 +0000 (13:04 +0100)
llvm-clang-x86_64-expensive-checks-debian will fail after D150436 merged.
The fail occurred in X86, I changed the sort rule in AsmMatcher in Patch D150436, so x86 code will arrive line 633 first(will not affect other targets).
The logic here want to use the order record written in source file to make AsmMatcher to first use AVX instructions, it used field HasPositionOrder.
But the condition here just makes sure one of the compared record is subclass of Instruction and has field HasPositionOrder true, and didn't check another.

(Committing on behalf of @XinWang10 to unblock broken expensive-cjhecks builds)

Differential Revision: https://reviews.llvm.org/D150651

llvm/utils/TableGen/AsmMatcherEmitter.cpp

index e9e2571..f6ef5ee 100644 (file)
@@ -636,7 +636,9 @@ struct MatchableInfo {
     // We use the ID to sort AVX instruction before AVX512 instruction in
     // matching table.
     if (TheDef->isSubClassOf("Instruction") &&
-        TheDef->getValueAsBit("HasPositionOrder"))
+        TheDef->getValueAsBit("HasPositionOrder") &&
+        RHS.TheDef->isSubClassOf("Instruction") &&
+        RHS.TheDef->getValueAsBit("HasPositionOrder"))
       return TheDef->getID() < RHS.TheDef->getID();
 
     // Give matches that require more features higher precedence. This is useful