| Tom Stellard | 49f8bfd | 2015-01-06 18:00:21 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=amdgcn -mcpu=SI -mattr=-promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=SI-ALLOCA -check-prefix=SI %s |
| 2 | ; RUN: llc -march=amdgcn -mcpu=SI -mattr=+promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=SI-PROMOTE -check-prefix=SI %s |
| Marek Olsak | 7517077 | 2015-01-27 17:27:15 +0000 | [diff] [blame] | 3 | ; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=SI-ALLOCA -check-prefix=SI %s |
| 4 | ; RUN: llc -march=amdgcn -mcpu=tonga -mattr=+promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=SI-PROMOTE -check-prefix=SI %s |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 5 | |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 6 | |
| 7 | declare void @llvm.AMDGPU.barrier.local() noduplicate nounwind |
| 8 | |
| Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 9 | ; SI-LABEL: {{^}}private_access_f64_alloca: |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 10 | |
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 11 | ; SI-ALLOCA: buffer_store_dwordx2 |
| 12 | ; SI-ALLOCA: buffer_load_dwordx2 |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 13 | |
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 14 | ; SI-PROMOTE: ds_write_b64 |
| 15 | ; SI-PROMOTE: ds_read_b64 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 16 | define void @private_access_f64_alloca(double addrspace(1)* noalias %out, double addrspace(1)* noalias %in, i32 %b) nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 17 | %val = load double, double addrspace(1)* %in, align 8 |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 18 | %array = alloca double, i32 16, align 8 |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 19 | %ptr = getelementptr double, double* %array, i32 %b |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 20 | store double %val, double* %ptr, align 8 |
| 21 | call void @llvm.AMDGPU.barrier.local() noduplicate nounwind |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 22 | %result = load double, double* %ptr, align 8 |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 23 | store double %result, double addrspace(1)* %out, align 8 |
| 24 | ret void |
| 25 | } |
| 26 | |
| Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 27 | ; SI-LABEL: {{^}}private_access_v2f64_alloca: |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 28 | |
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 29 | ; SI-ALLOCA: buffer_store_dwordx4 |
| 30 | ; SI-ALLOCA: buffer_load_dwordx4 |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 31 | |
| Matt Arsenault | ff05da8 | 2015-11-24 12:18:54 +0000 | [diff] [blame^] | 32 | ; SI-PROMOTE: ds_write_b64 |
| 33 | ; SI-PROMOTE: ds_write_b64 |
| 34 | ; SI-PROMOTE: ds_read_b64 |
| 35 | ; SI-PROMOTE: ds_read_b64 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 36 | define void @private_access_v2f64_alloca(<2 x double> addrspace(1)* noalias %out, <2 x double> addrspace(1)* noalias %in, i32 %b) nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 37 | %val = load <2 x double>, <2 x double> addrspace(1)* %in, align 16 |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 38 | %array = alloca <2 x double>, i32 16, align 16 |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 39 | %ptr = getelementptr <2 x double>, <2 x double>* %array, i32 %b |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 40 | store <2 x double> %val, <2 x double>* %ptr, align 16 |
| 41 | call void @llvm.AMDGPU.barrier.local() noduplicate nounwind |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 42 | %result = load <2 x double>, <2 x double>* %ptr, align 16 |
| Matt Arsenault | 6e63dd2 | 2014-02-02 00:13:12 +0000 | [diff] [blame] | 43 | store <2 x double> %result, <2 x double> addrspace(1)* %out, align 16 |
| 44 | ret void |
| 45 | } |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 46 | |
| Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 47 | ; SI-LABEL: {{^}}private_access_i64_alloca: |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 48 | |
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 49 | ; SI-ALLOCA: buffer_store_dwordx2 |
| 50 | ; SI-ALLOCA: buffer_load_dwordx2 |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 51 | |
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 52 | ; SI-PROMOTE: ds_write_b64 |
| 53 | ; SI-PROMOTE: ds_read_b64 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 54 | define void @private_access_i64_alloca(i64 addrspace(1)* noalias %out, i64 addrspace(1)* noalias %in, i32 %b) nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 55 | %val = load i64, i64 addrspace(1)* %in, align 8 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 56 | %array = alloca i64, i32 16, align 8 |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 57 | %ptr = getelementptr i64, i64* %array, i32 %b |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 58 | store i64 %val, i64* %ptr, align 8 |
| 59 | call void @llvm.AMDGPU.barrier.local() noduplicate nounwind |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 60 | %result = load i64, i64* %ptr, align 8 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 61 | store i64 %result, i64 addrspace(1)* %out, align 8 |
| 62 | ret void |
| 63 | } |
| 64 | |
| Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 65 | ; SI-LABEL: {{^}}private_access_v2i64_alloca: |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 66 | |
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 67 | ; SI-ALLOCA: buffer_store_dwordx4 |
| 68 | ; SI-ALLOCA: buffer_load_dwordx4 |
| Matt Arsenault | 7d5e2cb | 2014-07-13 02:46:17 +0000 | [diff] [blame] | 69 | |
| Matt Arsenault | ff05da8 | 2015-11-24 12:18:54 +0000 | [diff] [blame^] | 70 | ; SI-PROMOTE: ds_write_b64 |
| 71 | ; SI-PROMOTE: ds_write_b64 |
| 72 | ; SI-PROMOTE: ds_read_b64 |
| 73 | ; SI-PROMOTE: ds_read_b64 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 74 | define void @private_access_v2i64_alloca(<2 x i64> addrspace(1)* noalias %out, <2 x i64> addrspace(1)* noalias %in, i32 %b) nounwind { |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 75 | %val = load <2 x i64>, <2 x i64> addrspace(1)* %in, align 16 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 76 | %array = alloca <2 x i64>, i32 16, align 16 |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 77 | %ptr = getelementptr <2 x i64>, <2 x i64>* %array, i32 %b |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 78 | store <2 x i64> %val, <2 x i64>* %ptr, align 16 |
| 79 | call void @llvm.AMDGPU.barrier.local() noduplicate nounwind |
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 80 | %result = load <2 x i64>, <2 x i64>* %ptr, align 16 |
| Matt Arsenault | ad41d7b | 2014-03-24 17:50:46 +0000 | [diff] [blame] | 81 | store <2 x i64> %result, <2 x i64> addrspace(1)* %out, align 16 |
| 82 | ret void |
| 83 | } |