diff options
| author | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-10-09 17:41:29 +0000 |
|---|---|---|
| committer | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-10-09 17:41:29 +0000 |
| commit | cca800207aac434f9de79123b1c8eedc30b1163a (patch) | |
| tree | 7b1ec9ef0fa4d243fd3c9b90405dc4bfa69dd880 /llvm/test | |
| parent | b401db6d739987508854ee26d674a66ca8cda673 (diff) | |
| download | bcm5719-llvm-cca800207aac434f9de79123b1c8eedc30b1163a.tar.gz bcm5719-llvm-cca800207aac434f9de79123b1c8eedc30b1163a.zip | |
Add verification for align, dereferenceable, dereferenceable_or_null load metadata
Reviewed By: reames
Differential Revision: http://reviews.llvm.org/D13428
llvm-svn: 249856
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Verifier/align-md.ll | 59 | ||||
| -rw-r--r-- | llvm/test/Verifier/dereferenceable-md.ll | 86 |
2 files changed, 145 insertions, 0 deletions
diff --git a/llvm/test/Verifier/align-md.ll b/llvm/test/Verifier/align-md.ll new file mode 100644 index 00000000000..2de489ec21e --- /dev/null +++ b/llvm/test/Verifier/align-md.ll @@ -0,0 +1,59 @@ +; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s + +declare i8* @foo() + +define void @f1() { +entry: + call i8* @foo(), !align !{i64 2} + ret void +} +; CHECK: align applies only to load instructions +; CHECK-NEXT: call i8* @foo() + +define i8 @f2(i8* %x) { +entry: + %y = load i8, i8* %x, !align !{i64 2} + ret i8 %y +} +; CHECK: align applies only to pointer types +; CHECK-NEXT: load i8, i8* %x + +define i8* @f3(i8** %x) { +entry: + %y = load i8*, i8** %x, !align !{} + ret i8* %y +} +; CHECK: align takes one operand +; CHECK-NEXT: load i8*, i8** %x + +define i8* @f4(i8** %x) { +entry: + %y = load i8*, i8** %x, !align !{!"str"} + ret i8* %y +} +; CHECK: align metadata value must be an i64! +; CHECK-NEXT: load i8*, i8** %x + +define i8* @f5(i8** %x) { +entry: + %y = load i8*, i8** %x, !align !{i32 2} + ret i8* %y +} +; CHECK: align metadata value must be an i64! +; CHECK-NEXT: load i8*, i8** %x + +define i8* @f6(i8** %x) { +entry: + %y = load i8*, i8** %x, !align !{i64 3} + ret i8* %y +} +; CHECK: align metadata value must be a power of 2! +; CHECK-NEXT: load i8*, i8** %x + +define i8* @f7(i8** %x) { +entry: + %y = load i8*, i8** %x, !align !{i64 1073741824} + ret i8* %y +} +; CHECK: alignment is larger that implementation defined limit +; CHECK-NEXT: load i8*, i8** %x
\ No newline at end of file diff --git a/llvm/test/Verifier/dereferenceable-md.ll b/llvm/test/Verifier/dereferenceable-md.ll new file mode 100644 index 00000000000..94c89c33202 --- /dev/null +++ b/llvm/test/Verifier/dereferenceable-md.ll @@ -0,0 +1,86 @@ +; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s + +declare i8* @foo() + +define void @f1() { +entry: + call i8* @foo(), !dereferenceable !{i64 2} + ret void +} +; CHECK: dereferenceable, dereferenceable_or_null apply only to load instructions, use attributes for calls or invokes +; CHECK-NEXT: call i8* @foo() + +define void @f2() { +entry: + call i8* @foo(), !dereferenceable_or_null !{i64 2} + ret void +} +; CHECK: dereferenceable, dereferenceable_or_null apply only to load instructions, use attributes for calls or invokes +; CHECK-NEXT: call i8* @foo() + +define i8 @f3(i8* %x) { +entry: + %y = load i8, i8* %x, !dereferenceable !{i64 2} + ret i8 %y +} +; CHECK: dereferenceable, dereferenceable_or_null apply only to pointer types +; CHECK-NEXT: load i8, i8* %x + +define i8 @f4(i8* %x) { +entry: + %y = load i8, i8* %x, !dereferenceable_or_null !{i64 2} + ret i8 %y +} +; CHECK: dereferenceable, dereferenceable_or_null apply only to pointer types +; CHECK-NEXT: load i8, i8* %x + +define i8* @f5(i8** %x) { +entry: + %y = load i8*, i8** %x, !dereferenceable !{} + ret i8* %y +} +; CHECK: dereferenceable, dereferenceable_or_null take one operand +; CHECK-NEXT: load i8*, i8** %x + + +define i8* @f6(i8** %x) { +entry: + %y = load i8*, i8** %x, !dereferenceable_or_null !{} + ret i8* %y +} +; CHECK: dereferenceable, dereferenceable_or_null take one operand +; CHECK-NEXT: load i8*, i8** %x + +define i8* @f7(i8** %x) { +entry: + %y = load i8*, i8** %x, !dereferenceable !{!"str"} + ret i8* %y +} +; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64! +; CHECK-NEXT: load i8*, i8** %x + + +define i8* @f8(i8** %x) { +entry: + %y = load i8*, i8** %x, !dereferenceable_or_null !{!"str"} + ret i8* %y +} +; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64! +; CHECK-NEXT: load i8*, i8** %x + +define i8* @f9(i8** %x) { +entry: + %y = load i8*, i8** %x, !dereferenceable !{i32 2} + ret i8* %y +} +; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64! +; CHECK-NEXT: load i8*, i8** %x + + +define i8* @f10(i8** %x) { +entry: + %y = load i8*, i8** %x, !dereferenceable_or_null !{i32 2} + ret i8* %y +} +; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64! +; CHECK-NEXT: load i8*, i8** %x
\ No newline at end of file |

