xref: /llvm-project/llvm/test/Transforms/InstSimplify/ConstProp/AMDGPU/wave.reduce.ll (revision 1462053608041c34e871b7d0a565f4ca541e2fd1)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3
4; --------------------------------------------------------------------
5; llvm.amdgcn.wave.reduce.umin.i32
6; --------------------------------------------------------------------
7
8declare i32 @llvm.amdgcn.wave.reduce.umin.i32(i32, i32 immarg)
9
10define amdgpu_kernel void @test_constant_fold_wave_reduce_umin_poison(ptr addrspace(1) %out, i32 %in) {
11; CHECK-LABEL: @test_constant_fold_wave_reduce_umin_poison(
12; CHECK-NEXT:  entry:
13; CHECK-NEXT:    store i32 poison, ptr addrspace(1) [[OUT:%.*]], align 4
14; CHECK-NEXT:    ret void
15;
16entry:
17  %result = call i32 @llvm.amdgcn.wave.reduce.umin.i32(i32 poison, i32 1)
18  store i32 %result, ptr addrspace(1) %out
19  ret void
20}
21
22define amdgpu_kernel void @test_constant_fold_wave_reduce_umin_const(ptr addrspace(1) %out) {
23; CHECK-LABEL: @test_constant_fold_wave_reduce_umin_const(
24; CHECK-NEXT:  entry:
25; CHECK-NEXT:    store i32 123, ptr addrspace(1) [[OUT:%.*]], align 4
26; CHECK-NEXT:    ret void
27;
28entry:
29  %result = call i32 @llvm.amdgcn.wave.reduce.umin.i32(i32 123, i32 1)
30  store i32 %result, ptr addrspace(1) %out
31  ret void
32}
33
34; --------------------------------------------------------------------
35; llvm.amdgcn.wave.reduce.umin.i32
36; --------------------------------------------------------------------
37
38declare i32 @llvm.amdgcn.wave.reduce.umax.i32(i32, i32 immarg)
39
40define amdgpu_kernel void @test_constant_fold_wave_reduce_umax_poison(ptr addrspace(1) %out, i32 %in) {
41; CHECK-LABEL: @test_constant_fold_wave_reduce_umax_poison(
42; CHECK-NEXT:  entry:
43; CHECK-NEXT:    store i32 poison, ptr addrspace(1) [[OUT:%.*]], align 4
44; CHECK-NEXT:    ret void
45;
46entry:
47  %result = call i32 @llvm.amdgcn.wave.reduce.umax.i32(i32 poison, i32 1)
48  store i32 %result, ptr addrspace(1) %out
49  ret void
50}
51
52define amdgpu_kernel void @test_constant_fold_wave_reduce_umax_const(ptr addrspace(1) %out) {
53; CHECK-LABEL: @test_constant_fold_wave_reduce_umax_const(
54; CHECK-NEXT:  entry:
55; CHECK-NEXT:    store i32 123, ptr addrspace(1) [[OUT:%.*]], align 4
56; CHECK-NEXT:    ret void
57;
58entry:
59  %result = call i32 @llvm.amdgcn.wave.reduce.umax.i32(i32 123, i32 1)
60  store i32 %result, ptr addrspace(1) %out
61  ret void
62}
63
64@gv = constant i32 0
65define amdgpu_kernel void @test_constant_fold_wave_reduce_umax_gv(ptr addrspace(1) %out) {
66; CHECK-LABEL: @test_constant_fold_wave_reduce_umax_gv(
67; CHECK-NEXT:  entry:
68; CHECK-NEXT:    [[RESULT:%.*]] = call i32 @llvm.amdgcn.wave.reduce.umax.i32(i32 ptrtoint (ptr @gv to i32), i32 1)
69; CHECK-NEXT:    store i32 [[RESULT]], ptr addrspace(1) [[OUT:%.*]], align 4
70; CHECK-NEXT:    ret void
71;
72entry:
73  %result = call i32 @llvm.amdgcn.wave.reduce.umax.i32(i32 ptrtoint (ptr @gv to i32), i32 1)
74  store i32 %result, ptr addrspace(1) %out
75  ret void
76}
77