1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm < %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // CHECK: @foo = common addrspace(1) global 4*67e74705SXin Li int foo __attribute__((address_space(1))); 5*67e74705SXin Li 6*67e74705SXin Li // CHECK: @ban = common addrspace(1) global 7*67e74705SXin Li int ban[10] __attribute__((address_space(1))); 8*67e74705SXin Li 9*67e74705SXin Li // CHECK-LABEL: define i32 @test1() 10*67e74705SXin Li // CHECK: load i32, i32 addrspace(1)* @foo test1()11*67e74705SXin Liint test1() { return foo; } 12*67e74705SXin Li 13*67e74705SXin Li // CHECK-LABEL: define i32 @test2(i32 %i) 14*67e74705SXin Li // CHECK: load i32, i32 addrspace(1)* 15*67e74705SXin Li // CHECK-NEXT: ret i32 test2(int i)16*67e74705SXin Liint test2(int i) { return ban[i]; } 17*67e74705SXin Li 18*67e74705SXin Li // Both A and B point into addrspace(2). 19*67e74705SXin Li __attribute__((address_space(2))) int *A, *B; 20*67e74705SXin Li 21*67e74705SXin Li // CHECK-LABEL: define void @test3() 22*67e74705SXin Li // CHECK: load i32 addrspace(2)*, i32 addrspace(2)** @B 23*67e74705SXin Li // CHECK: load i32, i32 addrspace(2)* 24*67e74705SXin Li // CHECK: load i32 addrspace(2)*, i32 addrspace(2)** @A 25*67e74705SXin Li // CHECK: store i32 {{.*}}, i32 addrspace(2)* test3()26*67e74705SXin Livoid test3() { 27*67e74705SXin Li *A = *B; 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li // PR7437 31*67e74705SXin Li typedef struct { 32*67e74705SXin Li float aData[1]; 33*67e74705SXin Li } MyStruct; 34*67e74705SXin Li 35*67e74705SXin Li // CHECK-LABEL: define void @test4( 36*67e74705SXin Li // CHECK: call void @llvm.memcpy.p0i8.p2i8 37*67e74705SXin Li // CHECK: call void @llvm.memcpy.p2i8.p0i8 test4(MyStruct * pPtr)38*67e74705SXin Livoid test4(MyStruct __attribute__((address_space(2))) *pPtr) { 39*67e74705SXin Li MyStruct s = pPtr[0]; 40*67e74705SXin Li pPtr[0] = s; 41*67e74705SXin Li } 42