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