summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorAakanksha Patil <aakanksha555@gmail.com>2018-11-12 21:04:06 +0000
committerAakanksha Patil <aakanksha555@gmail.com>2018-11-12 21:04:06 +0000
commita992c694c6b8c88511df502d03664454b4e203e2 (patch)
tree6ebe6defce0191c335b936b4a7de7007e94b3879 /llvm/test
parentb32d03dfed227ad073f7f8614472744ac38a6dca (diff)
downloadbcm5719-llvm-a992c694c6b8c88511df502d03664454b4e203e2.tar.gz
bcm5719-llvm-a992c694c6b8c88511df502d03664454b4e203e2.zip
AMDGPU: Adding more median3 patterns
min(max(a, b), max(min(a, b), c)) -> med3 a, b, c Differential Revision: https://reviews.llvm.org/D54331 llvm-svn: 346704
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/AMDGPU/smed3.ll205
-rw-r--r--llvm/test/CodeGen/AMDGPU/umed3.ll206
2 files changed, 411 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/smed3.ll b/llvm/test/CodeGen/AMDGPU/smed3.ll
index 22f11da4648..f2b64f06426 100644
--- a/llvm/test/CodeGen/AMDGPU/smed3.ll
+++ b/llvm/test/CodeGen/AMDGPU/smed3.ll
@@ -364,6 +364,211 @@ bb:
ret void
}
+; 16 combinations
+
+; 16: min(max(x, y), max(min(x, y), z))
+; 17: min(max(x, y), max(min(y, x), z))
+; 18: min(max(x, y), max(z, min(x, y)))
+; 19: min(max(x, y), max(z, min(y, x)))
+; 20: min(max(y, x), max(min(x, y), z))
+; 21: min(max(y, x), max(min(y, x), z))
+; 22: min(max(y, x), max(z, min(x, y)))
+; 23: min(max(y, x), max(z, min(y, x)))
+;
+; + commute outermost min
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_16:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_16(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_17:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_17(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_18:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_18(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_19:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_19(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_20:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_20(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_21:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_21(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_22:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_22(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_23:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_23(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_24:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_24(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_25:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_25(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_26:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_26(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_27:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_27(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %x, i32 %y)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_28:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_28(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_29:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_29(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_30:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_30(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %x, i32 %y)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_smed3_i32_pat_31:
+; GCN: v_med3_i32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_smed3_i32_pat_31(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @smin(i32 %y, i32 %x)
+ %tmp1 = call i32 @smax(i32 %y, i32 %x)
+ %tmp2 = call i32 @smax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @smin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
; FIXME: Should keep scalar or not promote
; GCN-LABEL: {{^}}s_test_smed3_i16_pat_0:
; GCN: s_sext_i32_i16
diff --git a/llvm/test/CodeGen/AMDGPU/umed3.ll b/llvm/test/CodeGen/AMDGPU/umed3.ll
index 071fc07ea59..315308e03ec 100644
--- a/llvm/test/CodeGen/AMDGPU/umed3.ll
+++ b/llvm/test/CodeGen/AMDGPU/umed3.ll
@@ -363,6 +363,212 @@ bb:
ret void
}
+; 16 combinations
+
+; 16: min(max(x, y), max(min(x, y), z))
+; 17: min(max(x, y), max(min(y, x), z))
+; 18: min(max(x, y), max(z, min(x, y)))
+; 19: min(max(x, y), max(z, min(y, x)))
+; 20: min(max(y, x), max(min(x, y), z))
+; 21: min(max(y, x), max(min(y, x), z))
+; 22: min(max(y, x), max(z, min(x, y)))
+; 23: min(max(y, x), max(z, min(y, x)))
+;
+; + commute outermost min
+
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_16:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_16(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_17:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_17(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_18:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_18(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_19:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_19(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_20:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_20(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_21:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_21(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_22:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_22(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_23:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_23(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_24:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_24(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_25:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_25(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp1, i32 %tmp2)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_26:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_26(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_27:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_27(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %x, i32 %y)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_28:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_28(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_29:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_29(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %tmp0, i32 %z)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_30:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_30(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %x, i32 %y)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
+; GCN-LABEL: {{^}}s_test_umed3_i32_pat_31:
+; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
+define amdgpu_kernel void @s_test_umed3_i32_pat_31(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 {
+bb:
+ %tmp0 = call i32 @umin(i32 %y, i32 %x)
+ %tmp1 = call i32 @umax(i32 %y, i32 %x)
+ %tmp2 = call i32 @umax(i32 %z, i32 %tmp0)
+ %tmp3 = call i32 @umin(i32 %tmp2, i32 %tmp1)
+ store i32 %tmp3, i32 addrspace(1)* %arg
+ ret void
+}
+
; GCN-LABEL: {{^}}s_test_umed3_i16_pat_0:
; GCN: s_and_b32
; GCN: s_and_b32
OpenPOWER on IntegriCloud