diff options
| author | Simon Dardis <simon.dardis@mips.com> | 2017-12-18 15:56:40 +0000 |
|---|---|---|
| committer | Simon Dardis <simon.dardis@mips.com> | 2017-12-18 15:56:40 +0000 |
| commit | fd8c65e868ae2bc59475a14fa328c133dcbd84a0 (patch) | |
| tree | 8697db294e5d784aaa629d8699a8e544d194f93b /llvm/test | |
| parent | de74bdb3d2cf84f7a586dd23a7e0fc993359c791 (diff) | |
| download | bcm5719-llvm-fd8c65e868ae2bc59475a14fa328c133dcbd84a0.tar.gz bcm5719-llvm-fd8c65e868ae2bc59475a14fa328c133dcbd84a0.zip | |
Reland "[mips] Fix the target specific instruction verifier"
Fix an off by one error in the bounds checking for 'dinsu' and update
the ranges in the test comments so that they are accurate.
This version has the correct commit message.
Reviewers: atanasyan
Differential Revision: https://reviews.llvm.org/D41183
llvm-svn: 320991
Diffstat (limited to 'llvm/test')
26 files changed, 89 insertions, 35 deletions
diff --git a/llvm/test/CodeGen/Mips/fcopysign-f32-f64.ll b/llvm/test/CodeGen/Mips/fcopysign-f32-f64.ll index 9ec2b8e2425..695431a5ab6 100644 --- a/llvm/test/CodeGen/Mips/fcopysign-f32-f64.ll +++ b/llvm/test/CodeGen/Mips/fcopysign-f32-f64.ll @@ -1,9 +1,9 @@ -; 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 +; 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 declare double @copysign(double, double) nounwind readnone diff --git a/llvm/test/CodeGen/Mips/fcopysign.ll b/llvm/test/CodeGen/Mips/fcopysign.ll index 9be876f2a9b..810d0f95808 100644 --- a/llvm/test/CodeGen/Mips/fcopysign.ll +++ b/llvm/test/CodeGen/Mips/fcopysign.ll @@ -1,8 +1,13 @@ -; 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 +; 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 define double @func0(double %d0, double %d1) nounwind readnone { entry: diff --git a/llvm/test/CodeGen/Mips/instverify/dext-pos.mir b/llvm/test/CodeGen/Mips/instverify/dext-pos.mir index 5b57564df70..8e3b887ffe9 100644 --- a/llvm/test/CodeGen/Mips/instverify/dext-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/dext-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 0..31 +# Check that the machine verifier checks the position operand is in the range 0..31 --- name: dext alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dext-size.mir b/llvm/test/CodeGen/Mips/instverify/dext-size.mir index d6436108cef..968dd4e370f 100644 --- a/llvm/test/CodeGen/Mips/instverify/dext-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dext-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 0..32 +# Check that the machine verifier checks the size operand is in the range 1..32 --- name: dext alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dextm-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/dextm-pos-size.mir index eec459fef42..bdf82ecd0d6 100644 --- a/llvm/test/CodeGen/Mips/instverify/dextm-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dextm-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 32..64 +# Check that the machine verifier checks the pos + size is in the range 33..64 --- name: dextm alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dextm-pos.mir b/llvm/test/CodeGen/Mips/instverify/dextm-pos.mir index 782d3fb8b65..987a228a1f8 100644 --- a/llvm/test/CodeGen/Mips/instverify/dextm-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/dextm-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 0..31 +# Check that the machine verifier checks the position operand is in the range 0..31 --- name: dextm alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dextm-size.mir b/llvm/test/CodeGen/Mips/instverify/dextm-size.mir index 771abef6517..b1e367e027e 100644 --- a/llvm/test/CodeGen/Mips/instverify/dextm-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dextm-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 32..64 +# Check that the machine verifier checks the size operand is in the range 33..64 --- name: dextm alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dextu-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/dextu-pos-size.mir index 5356cf5dfc1..9b6dac08350 100644 --- a/llvm/test/CodeGen/Mips/instverify/dextu-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dextu-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 32..64 +# Check that the machine verifier checks the pos + size is in the range 33..64 --- name: dextu alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dextu-pos.mir b/llvm/test/CodeGen/Mips/instverify/dextu-pos.mir index 11b94c3fd8d..65e5bd0e1c1 100644 --- a/llvm/test/CodeGen/Mips/instverify/dextu-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/dextu-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 32..63 +# Check that the machine verifier checks the position operand is in the range 32..63 --- name: dextu alignment: 3 @@ -42,7 +42,7 @@ body: | liveins: %a0_64 %0 = COPY %a0_64 - %1 = DEXTU %0, 65, 5 + %1 = DEXTU %0, 64, 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 new file mode 100644 index 00000000000..8c548f1c7b4 --- /dev/null +++ b/llvm/test/CodeGen/Mips/instverify/dextu-size-valid.mir @@ -0,0 +1,49 @@ +# 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 + +... diff --git a/llvm/test/CodeGen/Mips/instverify/dextu-size.mir b/llvm/test/CodeGen/Mips/instverify/dextu-size.mir index 4efdd966f7b..0511d1ae09d 100644 --- a/llvm/test/CodeGen/Mips/instverify/dextu-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dextu-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 0..32 +# Check that the machine verifier checks the size operand is in the range 1..32 --- name: dextu alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dins-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/dins-pos-size.mir index 6276790edc5..d1d178575c8 100644 --- a/llvm/test/CodeGen/Mips/instverify/dins-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dins-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 0..32 +# Check that the machine verifier checks the pos + size is in the range 1..32 --- name: dins alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dins-pos.mir b/llvm/test/CodeGen/Mips/instverify/dins-pos.mir index fe61deaebf0..1602aa2e25a 100644 --- a/llvm/test/CodeGen/Mips/instverify/dins-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/dins-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 0..31 +# Check that the machine verifier checks the position operand is in the range 0..31 --- name: dins alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dins-size.mir b/llvm/test/CodeGen/Mips/instverify/dins-size.mir index 9fa0bc79a4b..bf713bf992f 100644 --- a/llvm/test/CodeGen/Mips/instverify/dins-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dins-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 0..32 +# Check that the machine verifier checks the size operand is in the range 1..32 --- name: dins alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dinsm-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/dinsm-pos-size.mir index 450aa6a5053..aa73e7f1a53 100644 --- a/llvm/test/CodeGen/Mips/instverify/dinsm-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dinsm-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 32..64 +# Check that the machine verifier checks the pos + size is in the range 33..64 --- name: dinsu alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dinsm-pos.mir b/llvm/test/CodeGen/Mips/instverify/dinsm-pos.mir index 75bf00edd96..66a6053ca74 100644 --- a/llvm/test/CodeGen/Mips/instverify/dinsm-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/dinsm-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 0..31 +# Check that the machine verifier checks the position operand is in the range 0..31 --- name: dinsm alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dinsm-size.mir b/llvm/test/CodeGen/Mips/instverify/dinsm-size.mir index 9b501d44c47..fba3bee969a 100644 --- a/llvm/test/CodeGen/Mips/instverify/dinsm-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dinsm-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 2..64 +# Check that the machine verifier checks the size operand is in the range 2..64 --- name: dinsm alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dinsu-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/dinsu-pos-size.mir index 51a53041504..9d2d17c3c18 100644 --- a/llvm/test/CodeGen/Mips/instverify/dinsu-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dinsu-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 32..64 +# Check that the machine verifier checks the pos + size is in the range 33..64 --- name: dinsu alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dinsu-pos.mir b/llvm/test/CodeGen/Mips/instverify/dinsu-pos.mir index cbfae688b0a..d89bb2de3ae 100644 --- a/llvm/test/CodeGen/Mips/instverify/dinsu-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/dinsu-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 32..63 +# Check that the machine verifier checks the position operand is in the range 32..63 --- name: dinsu alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/dinsu-size.mir b/llvm/test/CodeGen/Mips/instverify/dinsu-size.mir index 048a6f01c80..550f890fbd8 100644 --- a/llvm/test/CodeGen/Mips/instverify/dinsu-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/dinsu-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 0..32 +# Check that the machine verifier checks the size operand is in the range 1..32 --- name: dinsu alignment: 3 diff --git a/llvm/test/CodeGen/Mips/instverify/ext-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/ext-pos-size.mir index c230331e8ef..94edecd8d24 100644 --- a/llvm/test/CodeGen/Mips/instverify/ext-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/ext-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 0..32 +# Check that the machine verifier checks the pos + size is in the range 1..32 --- name: f alignment: 2 diff --git a/llvm/test/CodeGen/Mips/instverify/ext-pos.mir b/llvm/test/CodeGen/Mips/instverify/ext-pos.mir index ce472db2ef0..7cca1b6a1b3 100644 --- a/llvm/test/CodeGen/Mips/instverify/ext-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/ext-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 0..31 +# Check that the machine verifier checks the position operand is in the range 0..31 --- name: f alignment: 2 diff --git a/llvm/test/CodeGen/Mips/instverify/ext-size.mir b/llvm/test/CodeGen/Mips/instverify/ext-size.mir index 00f7182df4a..4c35e1fb6a0 100644 --- a/llvm/test/CodeGen/Mips/instverify/ext-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/ext-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 0..32 +# Check that the machine verifier checks the size operand is in the range 1..32 --- name: f alignment: 2 diff --git a/llvm/test/CodeGen/Mips/instverify/ins-pos-size.mir b/llvm/test/CodeGen/Mips/instverify/ins-pos-size.mir index 95872364e07..e825b5997d8 100644 --- a/llvm/test/CodeGen/Mips/instverify/ins-pos-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/ins-pos-size.mir @@ -3,7 +3,7 @@ # CHECK: Position + Size is out of range! -# Check that the machine verifier checks the pos + size is in range 0..32 +# Check that the machine verifier checks the pos + size is in the range 1..32 --- name: f alignment: 2 diff --git a/llvm/test/CodeGen/Mips/instverify/ins-pos.mir b/llvm/test/CodeGen/Mips/instverify/ins-pos.mir index c8811ed3e20..a284fdb5799 100644 --- a/llvm/test/CodeGen/Mips/instverify/ins-pos.mir +++ b/llvm/test/CodeGen/Mips/instverify/ins-pos.mir @@ -3,7 +3,7 @@ # CHECK: Position operand is out of range! -# Check that the machine verifier checks the position operand is in range 0..31 +# Check that the machine verifier checks the position operand is in the range 0..31 --- name: f alignment: 2 diff --git a/llvm/test/CodeGen/Mips/instverify/ins-size.mir b/llvm/test/CodeGen/Mips/instverify/ins-size.mir index fba25212e1a..6cd839a01c6 100644 --- a/llvm/test/CodeGen/Mips/instverify/ins-size.mir +++ b/llvm/test/CodeGen/Mips/instverify/ins-size.mir @@ -3,7 +3,7 @@ # CHECK: Size operand is out of range! -# Check that the machine verifier checks the size operand is in range 0..32 +# Check that the machine verifier checks the size operand is in the range 1..32 --- name: f alignment: 2 |

