Home | History | Annotate | Download | only in BasicAA
      1 ; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
      2 
      3 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:64-v128:32:128-a0:0:32-n32"
      4 
      5 ; BasicAA should prove that these calls don't interfere, since they are
      6 ; IntrArgReadMem and have noalias pointers.
      7 
      8 ; CHECK:      define <8 x i16> @test0(i8* noalias %p, i8* noalias %q, <8 x i16> %y) {
      9 ; CHECK-NEXT: entry:
     10 ; CHECK-NEXT:   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) [[ATTR:#[0-9]+]]
     11 ; CHECK-NEXT:   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)
     12 ; CHECK-NEXT:   %c = add <8 x i16> %a, %a
     13 define <8 x i16> @test0(i8* noalias %p, i8* noalias %q, <8 x i16> %y) {
     14 entry:
     15   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) nounwind
     16   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)
     17   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) nounwind
     18   %c = add <8 x i16> %a, %b
     19   ret <8 x i16> %c
     20 }
     21 
     22 ; CHECK:      define <8 x i16> @test1(i8* %p, <8 x i16> %y) {
     23 ; CHECK-NEXT: entry:
     24 ; CHECK-NEXT:   %q = getelementptr i8* %p, i64 16
     25 ; CHECK-NEXT:   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) [[ATTR]]
     26 ; CHECK-NEXT:   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)
     27 ; CHECK-NEXT:   %c = add <8 x i16> %a, %a
     28 define <8 x i16> @test1(i8* %p, <8 x i16> %y) {
     29 entry:
     30   %q = getelementptr i8* %p, i64 16
     31   %a = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) nounwind
     32   call void @llvm.arm.neon.vst1.v8i16(i8* %q, <8 x i16> %y, i32 16)
     33   %b = call <8 x i16> @llvm.arm.neon.vld1.v8i16(i8* %p, i32 16) nounwind
     34   %c = add <8 x i16> %a, %b
     35   ret <8 x i16> %c
     36 }
     37 
     38 declare <8 x i16> @llvm.arm.neon.vld1.v8i16(i8*, i32) nounwind readonly
     39 declare void @llvm.arm.neon.vst1.v8i16(i8*, <8 x i16>, i32) nounwind
     40 
     41 ; CHECK: attributes #0 = { nounwind readonly }
     42 ; CHECK: attributes [[ATTR]] = { nounwind }
     43