Revert "[mips] Fix the target specific instruction verifier"

This reverts commit r320974. The commit message lacked the Differential Revison: line.

llvm-svn: 320975
This commit is contained in:
Simon Dardis 2017-12-18 12:30:34 +00:00
parent c3c0d4590b
commit f70af977af
27 changed files with 50 additions and 111 deletions

View 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:

View 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

View 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:

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@ -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
...

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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