diff options
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 |

