xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/unroll.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -mtriple=amdgcn-- -loop-unroll -simplifycfg -sroa %s -S -o - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -mtriple=r600-- -loop-unroll -simplifycfg -sroa %s -S -o - | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; This test contains a simple loop that initializes an array declared in
6*9880d681SAndroid Build Coastguard Worker; private memory.  We want to make sure these kinds of loops are always
7*9880d681SAndroid Build Coastguard Worker; unrolled, because private memory is slow.
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test
10*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: alloca
11*9880d681SAndroid Build Coastguard Worker; CHECK: store i32 5, i32 addrspace(1)* %out
12*9880d681SAndroid Build Coastguard Workerdefine void @test(i32 addrspace(1)* %out) {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  %0 = alloca [32 x i32]
15*9880d681SAndroid Build Coastguard Worker  br label %loop.header
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerloop.header:
18*9880d681SAndroid Build Coastguard Worker  %counter = phi i32 [0, %entry], [%inc, %loop.inc]
19*9880d681SAndroid Build Coastguard Worker  br label %loop.body
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerloop.body:
22*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [32 x i32], [32 x i32]* %0, i32 0, i32 %counter
23*9880d681SAndroid Build Coastguard Worker  store i32 %counter, i32* %ptr
24*9880d681SAndroid Build Coastguard Worker  br label %loop.inc
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerloop.inc:
27*9880d681SAndroid Build Coastguard Worker  %inc = add i32 %counter, 1
28*9880d681SAndroid Build Coastguard Worker  %1 = icmp sge i32 %counter, 32
29*9880d681SAndroid Build Coastguard Worker  br i1 %1, label  %exit, label %loop.header
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerexit:
32*9880d681SAndroid Build Coastguard Worker  %2 = getelementptr [32 x i32], [32 x i32]* %0, i32 0, i32 5
33*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %2
34*9880d681SAndroid Build Coastguard Worker  store i32 %3, i32 addrspace(1)* %out
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker}
37