diff options
| author | Graham Hunter <graham.hunter@arm.com> | 2019-06-18 10:11:56 +0000 |
|---|---|---|
| committer | Graham Hunter <graham.hunter@arm.com> | 2019-06-18 10:11:56 +0000 |
| commit | 43854e3ccc7fb9fa2cbe37529a72f77ca512bb86 (patch) | |
| tree | 3d8e9fffe51fc8b98b23a09d22a7070b339c9672 /llvm/test/Verifier | |
| parent | 6658bfb171afa65ca11bd729fcc0301d5d09543e (diff) | |
| download | bcm5719-llvm-43854e3ccc7fb9fa2cbe37529a72f77ca512bb86.tar.gz bcm5719-llvm-43854e3ccc7fb9fa2cbe37529a72f77ca512bb86.zip | |
[SVE][IR] Scalable Vector IR Type with pr42210 fix
Recommit of D32530 with a few small changes:
- Stopped recursively walking through aggregates in
the verifier, so that we don't impose too much
overhead on large modules under LTO (see PR42210).
- Changed tests to match; the errors are slightly
different since they only report the array or
struct that actually contains a scalable vector,
rather than all aggregates which contain one in
a nested member.
- Corrected an older comment
Reviewers: thakis, rengolin, sdesmalen
Reviewed By: sdesmalen
Differential Revision: https://reviews.llvm.org/D63321
llvm-svn: 363658
Diffstat (limited to 'llvm/test/Verifier')
| -rw-r--r-- | llvm/test/Verifier/scalable-aggregates.ll | 27 | ||||
| -rw-r--r-- | llvm/test/Verifier/scalable-global-vars.ll | 26 |
2 files changed, 53 insertions, 0 deletions
diff --git a/llvm/test/Verifier/scalable-aggregates.ll b/llvm/test/Verifier/scalable-aggregates.ll new file mode 100644 index 00000000000..aac3018cf16 --- /dev/null +++ b/llvm/test/Verifier/scalable-aggregates.ll @@ -0,0 +1,27 @@ +; RUN: not opt -S -verify < %s 2>&1 | FileCheck %s + +;; Arrays and Structs cannot contain scalable vectors, since we don't +;; know the size at compile time and the container types need to have +;; a known size. + +; CHECK-DAG: Arrays cannot contain scalable vectors +; CHECK-DAG: [4 x <vscale x 256 x i1>]; ModuleID = '<stdin>' +; CHECK-DAG: Arrays cannot contain scalable vectors +; CHECK-DAG: [2 x <vscale x 4 x i32>]; ModuleID = '<stdin>' +; CHECK-DAG: Structs cannot contain scalable vectors +; CHECK-DAG: { i32, <vscale x 1 x i32> }; ModuleID = '<stdin>' +;; CHECK-DAG: Structs cannot contain scalable vectors +; CHECK-DAG: { <vscale x 16 x i8>, <vscale x 2 x double> }; ModuleID = '<stdin>' +; CHECK-DAG: Structs cannot contain scalable vectors +; CHECK-DAG: %sty = type { i64, <vscale x 32 x i16> }; ModuleID = '<stdin>' + +%sty = type { i64, <vscale x 32 x i16> } + +define void @scalable_aggregates() { + %array = alloca [2 x <vscale x 4 x i32>] + %struct = alloca { <vscale x 16 x i8>, <vscale x 2 x double> } + %named_struct = alloca %sty + %s_in_a = alloca [2 x { i32, <vscale x 1 x i32> } ] + %a_in_s = alloca { i64, [4 x <vscale x 256 x i1> ] } + ret void +}
\ No newline at end of file diff --git a/llvm/test/Verifier/scalable-global-vars.ll b/llvm/test/Verifier/scalable-global-vars.ll new file mode 100644 index 00000000000..73b79ab6157 --- /dev/null +++ b/llvm/test/Verifier/scalable-global-vars.ll @@ -0,0 +1,26 @@ +; RUN: not opt -S -verify < %s 2>&1 | FileCheck %s + +;; Global variables cannot be scalable vectors, since we don't +;; know the size at compile time. + +; CHECK: Globals cannot contain scalable vectors +; CHECK-NEXT: <vscale x 4 x i32>* @ScalableVecGlobal +@ScalableVecGlobal = global <vscale x 4 x i32> zeroinitializer + +;; Global _pointers_ to scalable vectors are fine +; CHECK-NOT: Globals cannot contain scalable vectors +@ScalableVecPtr = global <vscale x 8 x i16>* zeroinitializer + +;; The following errors don't explicitly mention global variables, but +;; do still guarantee that the error will be caught. +; CHECK-DAG: Arrays cannot contain scalable vectors +; CHECK-DAG: [64 x <vscale x 2 x double>]; ModuleID = '<stdin>' +@ScalableVecGlobalArray = global [64 x <vscale x 2 x double>] zeroinitializer + +; CHECK-DAG: Structs cannot contain scalable vectors +; CHECK-DAG: { <vscale x 16 x i64>, <vscale x 16 x i1> }; ModuleID = '<stdin>' +@ScalableVecGlobalStruct = global { <vscale x 16 x i64>, <vscale x 16 x i1> } zeroinitializer + +; CHECK-DAG: Structs cannot contain scalable vectors +; CHECK-DAG { <vscale x 4 x i64>, <vscale x 32 x i8> }; ModuleID = '<stdin>' +@ScalableVecMixed = global { [4 x i32], [2 x { <vscale x 4 x i64>, <vscale x 32 x i8> }]} zeroinitializer |

