forked from OSchip/llvm-project
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:
parent
c3c0d4590b
commit
f70af977af
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
...
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue