blob: 2acd10e0c631e315e766becf45b52226dc80fb17 [file] [log] [blame]
Tom Stellard49f8bfd2015-01-06 18:00:21 +00001; RUN: llc < %s -march=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck -check-prefix=SI %s
Marek Olsak75170772015-01-27 17:27:15 +00002; RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck -check-prefix=SI %s
Michel Danzer12903692013-05-14 09:53:30 +00003
Tom Stellard79243d92014-10-01 17:15:17 +00004; SI-LABEL: {{^}}vector_umin:
Tom Stellard326d6ec2014-11-05 14:50:53 +00005; SI: v_min_u32_e32
Matt Arsenault8e2581b2014-03-21 18:01:18 +00006define void @vector_umin(i32 %p0, i32 %p1, i32 addrspace(1)* %in) #0 {
Michel Danzer12903692013-05-14 09:53:30 +00007main_body:
David Blaikiea79ac142015-02-27 21:17:42 +00008 %load = load i32, i32 addrspace(1)* %in, align 4
Matt Arsenault8e2581b2014-03-21 18:01:18 +00009 %min = call i32 @llvm.AMDGPU.umin(i32 %p0, i32 %load)
10 %bc = bitcast i32 %min to float
11 call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 0, float %bc, float %bc, float %bc, float %bc)
12 ret void
13}
14
Tom Stellard79243d92014-10-01 17:15:17 +000015; SI-LABEL: {{^}}scalar_umin:
Tom Stellard326d6ec2014-11-05 14:50:53 +000016; SI: s_min_u32
Matt Arsenault8e2581b2014-03-21 18:01:18 +000017define void @scalar_umin(i32 %p0, i32 %p1) #0 {
18entry:
19 %min = call i32 @llvm.AMDGPU.umin(i32 %p0, i32 %p1)
20 %bc = bitcast i32 %min to float
21 call void @llvm.SI.export(i32 15, i32 1, i32 1, i32 0, i32 0, float %bc, float %bc, float %bc, float %bc)
Michel Danzer12903692013-05-14 09:53:30 +000022 ret void
23}
24
Tom Stellard79243d92014-10-01 17:15:17 +000025; SI-LABEL: {{^}}trunc_zext_umin:
Tom Stellard326d6ec2014-11-05 14:50:53 +000026; SI: buffer_load_ubyte [[VREG:v[0-9]+]],
27; SI: v_min_u32_e32 [[RESULT:v[0-9]+]], 0, [[VREG]]
28; SI-NOT: and
29; SI: buffer_store_short [[RESULT]],
Matt Arsenault378bf9c2014-03-31 19:35:33 +000030define void @trunc_zext_umin(i16 addrspace(1)* nocapture %out, i8 addrspace(1)* nocapture %src) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000031 %tmp5 = load i8, i8 addrspace(1)* %src, align 1
Matt Arsenault378bf9c2014-03-31 19:35:33 +000032 %tmp2 = zext i8 %tmp5 to i32
33 %tmp3 = tail call i32 @llvm.AMDGPU.umin(i32 %tmp2, i32 0) nounwind readnone
34 %tmp4 = trunc i32 %tmp3 to i8
35 %tmp6 = zext i8 %tmp4 to i16
36 store i16 %tmp6, i16 addrspace(1)* %out, align 2
37 ret void
38}
39
Michel Danzer12903692013-05-14 09:53:30 +000040; Function Attrs: readnone
41declare i32 @llvm.AMDGPU.umin(i32, i32) #1
42
43declare void @llvm.SI.export(i32, i32, i32, i32, i32, float, float, float, float)
44
Matt Arsenault8e2581b2014-03-21 18:01:18 +000045attributes #0 = { nounwind }
46attributes #1 = { nounwind readnone }
Michel Danzer12903692013-05-14 09:53:30 +000047
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000048!0 = !{!"const", null, i32 1}