[llvm] 7a07641 - [ARM] Replace hasNoSchedulingInfo with UnsupportedFeatures in the A57 schedule

David Green via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 27 02:14:22 PDT 2020


Author: David Green
Date: 2020-04-27T10:13:29+01:00
New Revision: 7a076418dd31dc1ed1d5e88357d9c3e2918c7973

URL: https://github.com/llvm/llvm-project/commit/7a076418dd31dc1ed1d5e88357d9c3e2918c7973
DIFF: https://github.com/llvm/llvm-project/commit/7a076418dd31dc1ed1d5e88357d9c3e2918c7973.diff

LOG: [ARM] Replace hasNoSchedulingInfo with UnsupportedFeatures in the A57 schedule

hasNoSchedulingInfo should be used for Pseudo's and other instructions
that are never expected to be scheduled. This removes the flag from new
ARM instructions, instead fixing the A57 schedule by marking the related
architecture features as unsupported.

Added: 
    

Modified: 
    llvm/lib/Target/ARM/ARMInstrNEON.td
    llvm/lib/Target/ARM/ARMScheduleA57.td

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/ARM/ARMInstrNEON.td b/llvm/lib/Target/ARM/ARMInstrNEON.td
index 7dbbd4796a03..7f4c6a6897b8 100644
--- a/llvm/lib/Target/ARM/ARMInstrNEON.td
+++ b/llvm/lib/Target/ARM/ARMInstrNEON.td
@@ -4838,15 +4838,6 @@ class VDOT<bit op6, bit op4, bit op23, RegisterClass RegTy, string Asm,
   let Constraints = "$dst = $Vd";
 }
 
-
-class VUSDOT<bit op6, bit op4, bit op23, RegisterClass RegTy, string Asm,
-           string AsmTy, ValueType AccumTy, ValueType InputTy,
-           SDPatternOperator OpNode> :
-      VDOT<op6, op4, op23, RegTy, Asm, AsmTy, AccumTy, InputTy, OpNode> {
-  let hasNoSchedulingInfo = 1;
-
-}
-
 def VUDOTD : VDOT<0, 1, 0, DPR, "vudot", "u8", v2i32, v8i8,  int_arm_neon_udot>;
 def VSDOTD : VDOT<0, 0, 0, DPR, "vsdot", "s8", v2i32, v8i8,  int_arm_neon_sdot>;
 def VUDOTQ : VDOT<1, 1, 0, QPR, "vudot", "u8", v4i32, v16i8, int_arm_neon_udot>;
@@ -4897,7 +4888,6 @@ let Predicates = [HasMatMulInt8] in {
                                                 (v16i8 QPR:$Vm)))]> {
     let DecoderNamespace = "VFPV8";
     let Constraints = "$dst = $Vd";
-    let hasNoSchedulingInfo = 1;
   }
 
   multiclass N3VMixedDotLane<bit Q, bit U, string Asm, string AsmTy, RegisterClass RegTy,
@@ -4908,7 +4898,6 @@ let Predicates = [HasMatMulInt8] in {
                 (ins RegTy:$Vd, RegTy:$Vn, DPR_VFP2:$Vm, VectorIndex32:$lane), N3RegFrm,
                  NoItinerary, Asm, AsmTy, []> {
       bit lane;
-      let hasNoSchedulingInfo = 1;
       let Inst{5} = lane;
       let AsmString = !strconcat(Asm, ".", AsmTy, "\t$Vd, $Vn, $Vm$lane");
       let DecoderNamespace = "VFPV8";
@@ -4939,8 +4928,8 @@ let Predicates = [HasMatMulInt8] in {
   def VSMMLA  : N3VMatMul<0, 0, "vsmmla",  "s8", int_arm_neon_smmla>;
   def VUMMLA  : N3VMatMul<0, 1, "vummla",  "u8", int_arm_neon_ummla>;
   def VUSMMLA : N3VMatMul<1, 0, "vusmmla", "s8", int_arm_neon_usmmla>;
-  def VUSDOTD : VUSDOT<0, 0, 1, DPR, "vusdot", "s8", v2i32, v8i8,  int_arm_neon_usdot>;
-  def VUSDOTQ : VUSDOT<1, 0, 1, QPR, "vusdot", "s8", v4i32, v16i8, int_arm_neon_usdot>;
+  def VUSDOTD : VDOT<0, 0, 1, DPR, "vusdot", "s8", v2i32, v8i8,  int_arm_neon_usdot>;
+  def VUSDOTQ : VDOT<1, 0, 1, QPR, "vusdot", "s8", v4i32, v16i8, int_arm_neon_usdot>;
 
   defm VUSDOTDI : N3VMixedDotLane<0, 0, "vusdot", "s8", DPR, v2i32, v8i8,
                                   int_arm_neon_usdot, (v2i32 DPR_VFP2:$Vm)>;
@@ -5295,7 +5284,6 @@ class VFMQ<string opc, string type, bits<2> S>
   let Inst{3} = idx{0};
 }
 
-let hasNoSchedulingInfo = 1 in {
 //                                                op1   op2   op3
 def VFMALD  : N3VCP8F16Q0<"vfmal", DPR, SPR, SPR, 0b00, 0b10, 1>;
 def VFMSLD  : N3VCP8F16Q0<"vfmsl", DPR, SPR, SPR, 0b01, 0b10, 1>;
@@ -5305,7 +5293,6 @@ def VFMALDI : VFMD<"vfmal", "f16", 0b00>;
 def VFMSLDI : VFMD<"vfmsl", "f16", 0b01>;
 def VFMALQI : VFMQ<"vfmal", "f16", 0b00>;
 def VFMSLQI : VFMQ<"vfmsl", "f16", 0b01>;
-}
 } // HasNEON, HasFP16FML
 
 
@@ -9001,7 +8988,6 @@ class BF16VDOT<bits<5> op27_23, bits<2> op21_20, bit op6,
                dag oops, dag iops>
    : N3Vnp<op27_23, op21_20, 0b1101, op6, 0, oops, iops,
            N3RegFrm, IIC_VDOTPROD, "", "", []> {
-    let hasNoSchedulingInfo = 1;
     let DecoderNamespace = "VFPV8";
 }
 
@@ -9042,7 +9028,6 @@ class BF16MM<bit Q, RegisterClass RegTy,
    let Constraints = "$dst = $Vd";
    let AsmString = !strconcat(opc, ".bf16", "\t$Vd, $Vn, $Vm");
    let DecoderNamespace = "VFPV8";
-   let hasNoSchedulingInfo = 1;
 }
 
 def VMMLA : BF16MM<1, QPR, "vmmla">;
@@ -9054,7 +9039,6 @@ class VBF16MALQ<bit T, string suffix>
               []> { // TODO: Add intrinsics
   let Constraints = "$dst = $Vd";
   let DecoderNamespace = "VFPV8";
-  let hasNoSchedulingInfo = 1;
 }
 
 def VBF16MALTQ: VBF16MALQ<1, "t">;
@@ -9069,7 +9053,6 @@ multiclass VBF16MALQI<bit T, string suffix> {
   let Inst{3} = idx{0};
   let Constraints = "$dst = $Vd";
   let DecoderNamespace = "VFPV8";
-  let hasNoSchedulingInfo = 1;
   }
 
 }
@@ -9077,10 +9060,8 @@ multiclass VBF16MALQI<bit T, string suffix> {
 defm VBF16MALTQI: VBF16MALQI<1, "t">;
 defm VBF16MALBQI: VBF16MALQI<0, "b">;
 
-let hasNoSchedulingInfo = 1 in {
 def BF16_VCVT :  N2V<0b11, 0b11, 0b01, 0b10, 0b01100, 1, 0,
                     (outs DPR:$Vd), (ins QPR:$Vm),
                     NoItinerary, "vcvt", "bf16.f32", "$Vd, $Vm", "", []>;
 }
-}
 // End of BFloat16 instructions

diff  --git a/llvm/lib/Target/ARM/ARMScheduleA57.td b/llvm/lib/Target/ARM/ARMScheduleA57.td
index a79f3348f338..d9a8d304c41f 100644
--- a/llvm/lib/Target/ARM/ARMScheduleA57.td
+++ b/llvm/lib/Target/ARM/ARMScheduleA57.td
@@ -96,7 +96,7 @@ def CortexA57Model : SchedMachineModel {
   let FullInstRWOverlapCheck = 0;
 
   let UnsupportedFeatures = [HasV8_1MMainline, HasMVEInt, HasMVEFloat,
-                             HasFPRegsV8_1M];
+                             HasFPRegsV8_1M, HasFP16FML, HasMatMulInt8, HasBF16];
 }
 
 //===----------------------------------------------------------------------===//


        


More information about the llvm-commits mailing list