From 8e2f134d2f3f947de4b60bebc5f6e4c3322a4dcf Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sat, 16 Sep 2017 23:18:48 +0000 Subject: [PATCH] [X86] Add NoAVX predicates to the patterns for the legacy encoded PCLMUL and AES instructions. Previously we were just relying on pattern order to define precedence. Which works, but isn't the best way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313471 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrFormats.td | 6 +++--- lib/Target/X86/X86InstrInfo.td | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Target/X86/X86InstrFormats.td b/lib/Target/X86/X86InstrFormats.td index bfcbf71d252..57f0c1944c9 100644 --- a/lib/Target/X86/X86InstrFormats.td +++ b/lib/Target/X86/X86InstrFormats.td @@ -839,18 +839,18 @@ class AVX512 o, Format F, dag outs, dag ins, string asm, class AES8I o, Format F, dag outs, dag ins, string asm, listpattern, InstrItinClass itin = IIC_AES> : I, T8PD, - Requires<[HasAES]>; + Requires<[NoAVX, HasAES]>; class AESAI o, Format F, dag outs, dag ins, string asm, list pattern, InstrItinClass itin = NoItinerary> : Ii8, TAPD, - Requires<[HasAES]>; + Requires<[NoAVX, HasAES]>; // PCLMUL Instruction Templates class PCLMULIi8 o, Format F, dag outs, dag ins, string asm, listpattern, InstrItinClass itin = NoItinerary> : Ii8, TAPD, - Requires<[HasPCLMUL]>; + Requires<[NoAVX, HasPCLMUL]>; class AVXPCLMULIi8 o, Format F, dag outs, dag ins, string asm, listpattern, InstrItinClass itin = NoItinerary> diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index e4353cda6a2..bcbd1273302 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -801,6 +801,7 @@ def UseSSE41 : Predicate<"Subtarget->hasSSE41() && !Subtarget->hasAVX()">; def HasSSE42 : Predicate<"Subtarget->hasSSE42()">; def UseSSE42 : Predicate<"Subtarget->hasSSE42() && !Subtarget->hasAVX()">; def HasSSE4A : Predicate<"Subtarget->hasSSE4A()">; +def NoAVX : Predicate<"!Subtarget->hasAVX()">; def HasAVX : Predicate<"Subtarget->hasAVX()">; def HasAVX2 : Predicate<"Subtarget->hasAVX2()">; def HasAVX1Only : Predicate<"Subtarget->hasAVX() && !Subtarget->hasAVX2()">; -- 2.40.0