diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-03-13 19:07:59 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-03-13 19:07:59 +0000 |
| commit | 88dc015a92dc441f94cfff8b3f10c19617bc71d6 (patch) | |
| tree | bdf3cf1ea3be5c4ba7ec1e91a752ced5a94b9418 /llvm/test/Verifier | |
| parent | e15cd7909b2840bb0e26ee54f09894660d809476 (diff) | |
| download | bcm5719-llvm-88dc015a92dc441f94cfff8b3f10c19617bc71d6.tar.gz bcm5719-llvm-88dc015a92dc441f94cfff8b3f10c19617bc71d6.zip | |
Mips: Add ImmArg to intrinsics
I found these by asserting in clang for any GCCBuiltin that doesn't
require mangling and requires a constant for the builtin. This means
that intrinsics are missing which don't use GCCBuiltin, don't have
builtins defined in clang, or were missing the constant annotation in
the builtin definition.
I'm not sure what's going on with the immediates.ll test. It seems to
be intended to test invalid cases like this, but then tries to handle
some of them anyway. I've moved the cases that were inconsistent with
the GCCBuiltin definition so they don't test the codegen anymore.
llvm-svn: 356085
Diffstat (limited to 'llvm/test/Verifier')
| -rw-r--r-- | llvm/test/Verifier/Mips/intrinsic-immarg.ll | 82 | ||||
| -rw-r--r-- | llvm/test/Verifier/Mips/lit.local.cfg | 2 |
2 files changed, 84 insertions, 0 deletions
diff --git a/llvm/test/Verifier/Mips/intrinsic-immarg.ll b/llvm/test/Verifier/Mips/intrinsic-immarg.ll new file mode 100644 index 00000000000..dfe5aa94ab9 --- /dev/null +++ b/llvm/test/Verifier/Mips/intrinsic-immarg.ll @@ -0,0 +1,82 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +define void @ld_b(<16 x i8> * %ptr, i8 * %ldptr, i32 %offset) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: %a = call <16 x i8> @llvm.mips.ld.b(i8* %ldptr, i32 %offset) + %a = call <16 x i8> @llvm.mips.ld.b(i8* %ldptr, i32 %offset) + store <16 x i8> %a, <16 x i8> * %ptr, align 16 + ret void +} + +define void @st_b(<16 x i8> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: call void @llvm.mips.st.b(<16 x i8> %a, i8* %stptr, i32 %offset) + %a = call <16 x i8> @llvm.mips.ld.b(i8* %ldptr, i32 0) + call void @llvm.mips.st.b(<16 x i8> %a, i8* %stptr, i32 %offset) + ret void +} + +define void @ld_w(<4 x i32> * %ptr, i8 * %ldptr, i32 %offset) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: %a = call <4 x i32> @llvm.mips.ld.w(i8* %ldptr, i32 %offset) + %a = call <4 x i32> @llvm.mips.ld.w(i8* %ldptr, i32 %offset) + store <4 x i32> %a, <4 x i32> * %ptr, align 16 + ret void +} + +define void @st_w(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: call void @llvm.mips.st.w(<4 x i32> %a, i8* %stptr, i32 %offset) + %a = call <4 x i32> @llvm.mips.ld.w(i8* %ldptr, i32 0) + call void @llvm.mips.st.w(<4 x i32> %a, i8* %stptr, i32 %offset) + ret void +} + +define void @ld_h(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: %a = call <8 x i16> @llvm.mips.ld.h(i8* %ldptr, i32 %offset) + %a = call <8 x i16> @llvm.mips.ld.h(i8* %ldptr, i32 %offset) + store <8 x i16> %a, <8 x i16> * %ptr, align 16 + ret void +} + +define void @st_h(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: call void @llvm.mips.st.h(<8 x i16> %a, i8* %stptr, i32 %offset) + %a = call <8 x i16> @llvm.mips.ld.h(i8* %ldptr, i32 0) + call void @llvm.mips.st.h(<8 x i16> %a, i8* %stptr, i32 %offset) + ret void +} + +define void @ld_d(<2 x i64> * %ptr, i8 * %ldptr, i32 %offset) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 %offset) + %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 %offset) + store <2 x i64> %a, <2 x i64> * %ptr, align 16 + ret void +} + +define void @st_d(<2 x i64> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { + ; CHECK: immarg operand has non-immediate parameter + ; CHECK-NEXT: i32 %offset + ; CHECK-NEXT: call void @llvm.mips.st.d(<2 x i64> %a, i8* %stptr, i32 %offset) + %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 0) + call void @llvm.mips.st.d(<2 x i64> %a, i8* %stptr, i32 %offset) + ret void +} + +declare <16 x i8> @llvm.mips.ld.b(i8*, i32) +declare <8 x i16> @llvm.mips.ld.h(i8*, i32) +declare <4 x i32> @llvm.mips.ld.w(i8*, i32) +declare <2 x i64> @llvm.mips.ld.d(i8*, i32) +declare void @llvm.mips.st.b(<16 x i8>, i8*, i32) +declare void @llvm.mips.st.h(<8 x i16>, i8*, i32) +declare void @llvm.mips.st.w(<4 x i32>, i8*, i32) +declare void @llvm.mips.st.d(<2 x i64>, i8*, i32) diff --git a/llvm/test/Verifier/Mips/lit.local.cfg b/llvm/test/Verifier/Mips/lit.local.cfg new file mode 100644 index 00000000000..7d12f7a9c56 --- /dev/null +++ b/llvm/test/Verifier/Mips/lit.local.cfg @@ -0,0 +1,2 @@ +if not 'Mips' in config.root.targets: + config.unsupported = True |

