Home | History | Annotate | Download | only in Verifier
      1 ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
      2 
      3 declare i8* @foo()
      4 
      5 define void @f1() {
      6 entry:
      7   call i8* @foo(), !align !{i64 2}
      8   ret void
      9 }
     10 ; CHECK: align applies only to load instructions
     11 ; CHECK-NEXT: call i8* @foo()
     12 
     13 define i8 @f2(i8* %x) {
     14 entry:
     15   %y = load i8, i8* %x, !align !{i64 2}
     16   ret i8 %y
     17 }
     18 ; CHECK: align applies only to pointer types
     19 ; CHECK-NEXT: load i8, i8* %x
     20 
     21 define i8* @f3(i8** %x) {
     22 entry:
     23   %y = load i8*, i8** %x, !align !{}
     24   ret i8* %y
     25 }
     26 ; CHECK: align takes one operand
     27 ; CHECK-NEXT: load i8*, i8** %x
     28 
     29 define i8* @f4(i8** %x) {
     30 entry:
     31   %y = load i8*, i8** %x, !align !{!"str"}
     32   ret i8* %y
     33 }
     34 ; CHECK: align metadata value must be an i64!
     35 ; CHECK-NEXT: load i8*, i8** %x
     36 
     37 define i8* @f5(i8** %x) {
     38 entry:
     39   %y = load i8*, i8** %x, !align !{i32 2}
     40   ret i8* %y
     41 }
     42 ; CHECK: align metadata value must be an i64!
     43 ; CHECK-NEXT: load i8*, i8** %x
     44 
     45 define i8* @f6(i8** %x) {
     46 entry:
     47   %y = load i8*, i8** %x, !align !{i64 3}
     48   ret i8* %y
     49 }
     50 ; CHECK: align metadata value must be a power of 2!
     51 ; CHECK-NEXT: load i8*, i8** %x
     52 
     53 define i8* @f7(i8** %x) {
     54 entry:
     55   %y = load i8*, i8** %x, !align !{i64 1073741824}
     56   ret i8* %y
     57 }
     58 ; CHECK: alignment is larger that implementation defined limit
     59 ; CHECK-NEXT: load i8*, i8** %x