blob: 4be8c5847529cffda5a7bee52a5355c07215f461 [file] [log] [blame]
Tom Stellard49f8bfd2015-01-06 18:00:21 +00001; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck %s
Marek Olsak75170772015-01-27 17:27:15 +00002; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck %s
Matt Arsenault37d42ec2013-09-06 00:18:43 +00003
4; Test that codegenprepare understands address space sizes
5
6%struct.foo = type { [3 x float], [3 x float] }
7
Matt Arsenault99ed7892014-03-19 22:19:49 +00008; FIXME: Extra V_MOV from SGPR to VGPR for second read. The address is
9; already in a VGPR after the first read.
10
Tom Stellard79243d92014-10-01 17:15:17 +000011; CHECK-LABEL: {{^}}do_as_ptr_calcs:
Tom Stellard326d6ec2014-11-05 14:50:53 +000012; CHECK: s_load_dword [[SREG1:s[0-9]+]],
Tom Stellard83f0bce2015-01-29 16:55:25 +000013; CHECK: v_mov_b32_e32 [[VREG2:v[0-9]+]], [[SREG1]]
Tom Stellard326d6ec2014-11-05 14:50:53 +000014; CHECK: v_mov_b32_e32 [[VREG1:v[0-9]+]], [[SREG1]]
15; CHECK-DAG: ds_read_b32 v{{[0-9]+}}, [[VREG1]] offset:12
Tom Stellard83f0bce2015-01-29 16:55:25 +000016; CHECK-DAG: ds_read_b32 v{{[0-9]+}}, [[VREG2]] offset:20
Matt Arsenault37d42ec2013-09-06 00:18:43 +000017define void @do_as_ptr_calcs(%struct.foo addrspace(3)* nocapture %ptr) nounwind {
18entry:
David Blaikie79e6c742015-02-27 19:29:02 +000019 %x = getelementptr inbounds %struct.foo, %struct.foo addrspace(3)* %ptr, i32 0, i32 1, i32 0
20 %y = getelementptr inbounds %struct.foo, %struct.foo addrspace(3)* %ptr, i32 0, i32 1, i32 2
Matt Arsenault37d42ec2013-09-06 00:18:43 +000021 br label %bb32
22
23bb32:
David Blaikiea79ac142015-02-27 21:17:42 +000024 %a = load float, float addrspace(3)* %x, align 4
25 %b = load float, float addrspace(3)* %y, align 4
Matt Arsenault37d42ec2013-09-06 00:18:43 +000026 %cmp = fcmp one float %a, %b
27 br i1 %cmp, label %bb34, label %bb33
28
29bb33:
30 unreachable
31
32bb34:
33 unreachable
34}
35
36