Revert "[mips] Fix the target specific instruction verifier"
authorSimon Dardis <simon.dardis@mips.com>
Mon, 18 Dec 2017 12:30:34 +0000 (12:30 +0000)
committerSimon Dardis <simon.dardis@mips.com>
Mon, 18 Dec 2017 12:30:34 +0000 (12:30 +0000)
This reverts commit r320974. The commit message lacked the Differential Revison: line.

llvm-svn: 320975

27 files changed:
llvm/lib/Target/Mips/MipsInstrInfo.cpp
llvm/test/CodeGen/Mips/fcopysign-f32-f64.ll
llvm/test/CodeGen/Mips/fcopysign.ll
llvm/test/CodeGen/Mips/instverify/dext-pos.mir
llvm/test/CodeGen/Mips/instverify/dext-size.mir
llvm/test/CodeGen/Mips/instverify/dextm-pos-size.mir
llvm/test/CodeGen/Mips/instverify/dextm-pos.mir
llvm/test/CodeGen/Mips/instverify/dextm-size.mir
llvm/test/CodeGen/Mips/instverify/dextu-pos-size.mir
llvm/test/CodeGen/Mips/instverify/dextu-pos.mir
llvm/test/CodeGen/Mips/instverify/dextu-size-valid.mir [deleted file]
llvm/test/CodeGen/Mips/instverify/dextu-size.mir
llvm/test/CodeGen/Mips/instverify/dins-pos-size.mir
llvm/test/CodeGen/Mips/instverify/dins-pos.mir
llvm/test/CodeGen/Mips/instverify/dins-size.mir
llvm/test/CodeGen/Mips/instverify/dinsm-pos-size.mir
llvm/test/CodeGen/Mips/instverify/dinsm-pos.mir
llvm/test/CodeGen/Mips/instverify/dinsm-size.mir
llvm/test/CodeGen/Mips/instverify/dinsu-pos-size.mir
llvm/test/CodeGen/Mips/instverify/dinsu-pos.mir
llvm/test/CodeGen/Mips/instverify/dinsu-size.mir
llvm/test/CodeGen/Mips/instverify/ext-pos-size.mir
llvm/test/CodeGen/Mips/instverify/ext-pos.mir
llvm/test/CodeGen/Mips/instverify/ext-size.mir
llvm/test/CodeGen/Mips/instverify/ins-pos-size.mir
llvm/test/CodeGen/Mips/instverify/ins-pos.mir
llvm/test/CodeGen/Mips/instverify/ins-size.mir

index 51ddc0d..1bfd21c 100644 (file)
@@ -538,19 +538,15 @@ bool MipsInstrInfo::findCommutedOpIndices(MachineInstr &MI, unsigned &SrcOpIdx1,
 }
 
 // ins, ext, dext*, dins have the following constraints:
-// X <= pos      <  Y
-// X <  size     <= Y
-// X <  pos+size <= Y
+// 0 <= pos      <  X
+// 0 <  size     <= X
+// 0 <  pos+size <= x
 //
-// dinsm and dinsu have the following constraints:
-// X <= pos      <  Y
-// X <= size     <= Y
-// X <  pos+size <= Y
-//
-// The callee of verifyInsExtInstruction however gives the bounds of
-// dins[um] like the other (d)ins (d)ext(um) instructions, so that this
-// function doesn't have to vary it's behaviour based on the instruction
-// being checked.
+// dinsm and dinsm have the following contraints:
+// 0 <= pos      <  X
+// 0 <= size     <= X
+// 0 <  pos+size <= x
+
 static bool verifyInsExtInstruction(const MachineInstr &MI, StringRef &ErrInfo,
                                     const int64_t PosLow, const int64_t PosHigh,
                                     const int64_t SizeLow,
@@ -599,18 +595,15 @@ bool MipsInstrInfo::verifyInstruction(const MachineInstr &MI,
     case Mips::DINS:
       return verifyInsExtInstruction(MI, ErrInfo, 0, 32, 0, 32, 0, 32);
     case Mips::DINSM:
-      // The ISA spec has a subtle difference difference between dinsm and dextm
-      // in that it says:
-      // 2 <= size <= 64 for 'dinsm' but 'dextm' has 32 < size <= 64.
-      // To make the bounds checks similar, the range 1 < size <= 64 is checked
-      // for 'dinsm'.
+      // The ISA spec has a subtle difference here in that it says:
+      //  2 <= size <= 64 for 'dinsm', so we change the bounds so that it
+      // is in line with the rest of instructions.
       return verifyInsExtInstruction(MI, ErrInfo, 0, 32, 1, 64, 32, 64);
     case Mips::DINSU:
-      // The ISA spec has a subtle difference between dinsu and dextu in that
-      // the size range of dinsu is specified as 1 <= size <= 32 whereas size
-      // for dextu is 0 < size <= 32. The range checked for dinsu here is
-      // 0 < size <= 32, which is equivalent and similar to dextu.
-      return verifyInsExtInstruction(MI, ErrInfo, 32, 64, 0, 32, 32, 64);
+      // The ISA spec has a subtle difference here in that it says:
+      //  2 <= size <= 64 for 'dinsm', so we change the bounds so that it
+      // is in line with the rest of instructions.
+      return verifyInsExtInstruction(MI, ErrInfo, 32, 64, 1, 32, 32, 64);
     case Mips::DEXT:
       return verifyInsExtInstruction(MI, ErrInfo, 0, 32, 0, 32, 0, 63);
     case Mips::DEXTM:
index 695431a..9ec2b8e 100644 (file)
@@ -1,9 +1,9 @@
-; RUN: llc  < %s -verify-machineinstrs -march=mips64el -mcpu=mips4 \
-; RUN:   -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64
-; RUN: llc  < %s -verify-machineinstrs -march=mips64el -mcpu=mips64 \
-; RUN:   -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64
-; RUN: llc  < %s -verify-machineinstrs -march=mips64el -mcpu=mips64r2 \
-; RUN:   -target-abi=n64 | FileCheck %s -check-prefixes=ALL,64R2
+; RUN: llc  < %s -march=mips64el -mcpu=mips4 -target-abi=n64 | \
+; RUN:    FileCheck %s -check-prefixes=ALL,64
+; RUN: llc  < %s -march=mips64el -mcpu=mips64 -target-abi=n64 | \
+; RUN:    FileCheck %s -check-prefixes=ALL,64
+; RUN: llc  < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 | \
+; RUN:    FileCheck %s -check-prefixes=ALL,64R2
 
 declare double @copysign(double, double) nounwind readnone
 
index 810d0f9..9be876f 100644 (file)
@@ -1,13 +1,8 @@
-; RUN: llc  < %s -verify-machineinstrs -march=mipsel -mcpu=mips32 \
-; RUN:   | FileCheck %s -check-prefix=32
-; RUN: llc  < %s -verify-machineinstrs -march=mipsel -mcpu=mips32r2 \
-; RUN:   | FileCheck %s -check-prefix=32R2
-; RUN: llc  < %s -verify-machineinstrs -march=mips64el -mcpu=mips4 -target-abi=n64 \
-; RUN:   | FileCheck %s -check-prefix=64
-; RUN: llc  < %s -verify-machineinstrs -march=mips64el -mcpu=mips64 -target-abi=n64 \
-; RUN:   | FileCheck %s -check-prefix=64
-; RUN: llc  < %s -verify-machineinstrs -march=mips64el -mcpu=mips64r2 -target-abi=n64 \
-; RUN:   | FileCheck %s -check-prefix=64R2
+; RUN: llc  < %s -march=mipsel -mcpu=mips32 | FileCheck %s -check-prefix=32
+; RUN: llc  < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefix=32R2
+; RUN: llc  < %s -march=mips64el -mcpu=mips4 -target-abi=n64 | FileCheck %s -check-prefix=64
+; RUN: llc  < %s -march=mips64el -mcpu=mips64 -target-abi=n64 | FileCheck %s -check-prefix=64
+; RUN: llc  < %s -march=mips64el -mcpu=mips64r2 -target-abi=n64 | FileCheck %s -check-prefix=64R2
 
 define double @func0(double %d0, double %d1) nounwind readnone {
 entry:
index 8e3b887..5b57564 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 0..31
+# Check that the machine verifier checks the position operand is in range 0..31
 ---
 name:            dext
 alignment:       3
index 968dd4e..d643610 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 1..32
+# Check that the machine verifier checks the size operand is in range 0..32
 ---
 name:            dext
 alignment:       3
index bdf82ec..eec459f 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 33..64
+# Check that the machine verifier checks the pos + size is in range 32..64
 ---
 name:            dextm
 alignment:       3
index 987a228..782d3fb 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 0..31
+# Check that the machine verifier checks the position operand is in range 0..31
 ---
 name:            dextm
 alignment:       3
index b1e367e..771abef 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 33..64
+# Check that the machine verifier checks the size operand is in range 32..64
 ---
 name:            dextm
 alignment:       3
index 9b6dac0..5356cf5 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 33..64
+# Check that the machine verifier checks the pos + size is in range 32..64
 ---
 name:            dextu
 alignment:       3
index 65e5bd0..11b94c3 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 32..63
+# Check that the machine verifier checks the position operand is in range 32..63
 ---
 name:            dextu
 alignment:       3
@@ -42,7 +42,7 @@ body:             |
     liveins: %a0_64
 
     %0 = COPY %a0_64
-    %1 = DEXTU %0, 64, 5
+    %1 = DEXTU %0, 65, 5
     %v0_64 = COPY %1
     RetRA implicit %v0_64
 
diff --git a/llvm/test/CodeGen/Mips/instverify/dextu-size-valid.mir b/llvm/test/CodeGen/Mips/instverify/dextu-size-valid.mir
deleted file mode 100644 (file)
index 8c548f1..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# RUN: llc -march=mips64 -mcpu=mips64r2 -start-after=expand-isel-pseudos -stop-after=expand-isel-pseudos \
-# RUN:     -verify-machineinstrs %s -o - 2>&1 | FileCheck %s
-
-# CHECK-NOT: Size operand is out of range!
-
-# Check that the machine verifier checks the size operand is in the range 1..32
----
-name:            dextu
-alignment:       3
-exposesReturnsTwice: false
-legalized:       false
-regBankSelected: false
-selected:        false
-tracksRegLiveness: true
-registers:
-  - { id: 0, class: gpr64, preferred-register: '' }
-  - { id: 1, class: gpr64, preferred-register: '' }
-liveins:
-  - { reg: '%a0_64', virtual-reg: '%0' }
-frameInfo:
-  isFrameAddressTaken: false
-  isReturnAddressTaken: false
-  hasStackMap:     false
-  hasPatchPoint:   false
-  stackSize:       0
-  offsetAdjustment: 0
-  maxAlignment:    1
-  adjustsStack:    false
-  hasCalls:        false
-  stackProtector:  ''
-  maxCallFrameSize: 4294967295
-  hasOpaqueSPAdjustment: false
-  hasVAStart:      false
-  hasMustTailInVarArgFunc: false
-  savePoint:       ''
-  restorePoint:    ''
-fixedStack:
-stack:
-constants:
-body:             |
-  bb.0.entry:
-    liveins: %a0_64
-
-    %0 = COPY %a0_64
-    %1 = DEXTU %0, 63, 1
-    %v0_64 = COPY %1
-    RetRA implicit %v0_64
-
-...
index 0511d1a..4efdd96 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 1..32
+# Check that the machine verifier checks the size operand is in range 0..32
 ---
 name:            dextu
 alignment:       3
index d1d1785..6276790 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 1..32
+# Check that the machine verifier checks the pos + size  is in range 0..32
 ---
 name:            dins
 alignment:       3
index 1602aa2..fe61dea 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 0..31
+# Check that the machine verifier checks the position operand is in range 0..31
 ---
 name:            dins
 alignment:       3
index bf713bf..9fa0bc7 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 1..32
+# Check that the machine verifier checks the size operand is in range 0..32
 ---
 name:            dins
 alignment:       3
index aa73e7f..450aa6a 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 33..64
+# Check that the machine verifier checks the pos + size is in range 32..64
 ---
 name:            dinsu
 alignment:       3
index 66a6053..75bf00e 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 0..31
+# Check that the machine verifier checks the position operand is in range 0..31
 ---
 name:            dinsm
 alignment:       3
index fba3bee..9b501d4 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 2..64
+# Check that the machine verifier checks the size operand is in range 2..64
 ---
 name:            dinsm
 alignment:       3
index 9d2d17c..51a5304 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 33..64
+# Check that the machine verifier checks the pos + size is in range 32..64
 ---
 name:            dinsu
 alignment:       3
index d89bb2d..cbfae68 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 32..63
+# Check that the machine verifier checks the position operand is in range 32..63
 ---
 name:            dinsu
 alignment:       3
index 550f890..048a6f0 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 1..32
+# Check that the machine verifier checks the size operand is in range 0..32
 ---
 name:            dinsu
 alignment:       3
index 94edecd..c230331 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 1..32
+# Check that the machine verifier checks the pos + size  is in range 0..32
 ---
 name:            f
 alignment:       2
index 7cca1b6..ce472db 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 0..31
+# Check that the machine verifier checks the position operand is in range 0..31
 ---
 name:            f
 alignment:       2
index 4c35e1f..00f7182 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 1..32
+# Check that the machine verifier checks the size operand is in range 0..32
 ---
 name:            f
 alignment:       2
index e825b59..9587236 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position + Size is out of range!
 
-# Check that the machine verifier checks the pos + size is in the range 1..32
+# Check that the machine verifier checks the pos + size  is in range 0..32
 ---
 name:            f
 alignment:       2
index a284fdb..c8811ed 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Position operand is out of range!
 
-# Check that the machine verifier checks the position operand is in the range 0..31
+# Check that the machine verifier checks the position operand is in range 0..31
 ---
 name:            f
 alignment:       2
index 6cd839a..fba2521 100644 (file)
@@ -3,7 +3,7 @@
 
 # CHECK: Size operand is out of range!
 
-# Check that the machine verifier checks the size operand is in the range 1..32
+# Check that the machine verifier checks the size operand is in range 0..32
 ---
 name:            f
 alignment:       2