xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/swp-max.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon -mcpu=hexagonv5 -enable-pipeliner \
2*9880d681SAndroid Build Coastguard Worker; RUN:     -pipeliner-max-stages=2 < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@A = global [8 x i32] [i32 4, i32 -3, i32 5, i32 -2, i32 -1, i32 2, i32 6, i32 -2], align 8
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine i32 @test(i32 %Left, i32 %Right) {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %Right, %Left
9*9880d681SAndroid Build Coastguard Worker  %div = sdiv i32 %add, 2
10*9880d681SAndroid Build Coastguard Worker  %cmp9 = icmp slt i32 %div, %Left
11*9880d681SAndroid Build Coastguard Worker  br i1 %cmp9, label %for.end, label %for.body.preheader
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerfor.body.preheader:
14*9880d681SAndroid Build Coastguard Worker  br label %for.body
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; CHECK: loop0(.LBB0_[[LOOP:.]],
17*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_[[LOOP]]:
18*9880d681SAndroid Build Coastguard Worker; CHECK: [[REG1:(r[0-9]+)]] = max(r{{[0-9]+}}, [[REG1]])
19*9880d681SAndroid Build Coastguard Worker; CHECK: [[REG0:(r[0-9]+)]] = add([[REG2:(r[0-9]+)]], [[REG0]])
20*9880d681SAndroid Build Coastguard Worker; CHECK: [[REG2]] = memw
21*9880d681SAndroid Build Coastguard Worker; CHECK: endloop0
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerfor.body:
24*9880d681SAndroid Build Coastguard Worker  %MaxLeftBorderSum.012 = phi i32 [ %MaxLeftBorderSum.1, %for.body ], [ 0, %for.body.preheader ]
25*9880d681SAndroid Build Coastguard Worker  %i.011 = phi i32 [ %dec, %for.body ], [ %div, %for.body.preheader ]
26*9880d681SAndroid Build Coastguard Worker  %LeftBorderSum.010 = phi i32 [ %add1, %for.body ], [ 0, %for.body.preheader ]
27*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [8 x i32], [8 x i32]* @A, i32 0, i32 %i.011
28*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx, align 4
29*9880d681SAndroid Build Coastguard Worker  %add1 = add nsw i32 %0, %LeftBorderSum.010
30*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp sgt i32 %add1, %MaxLeftBorderSum.012
31*9880d681SAndroid Build Coastguard Worker  %MaxLeftBorderSum.1 = select i1 %cmp2, i32 %add1, i32 %MaxLeftBorderSum.012
32*9880d681SAndroid Build Coastguard Worker  %dec = add nsw i32 %i.011, -1
33*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %dec, %Left
34*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %for.end.loopexit, label %for.body
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerfor.end.loopexit:
37*9880d681SAndroid Build Coastguard Worker  br label %for.end
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerfor.end:
40*9880d681SAndroid Build Coastguard Worker  %MaxLeftBorderSum.0.lcssa = phi i32 [ 0, %entry ], [ %MaxLeftBorderSum.1, %for.end.loopexit ]
41*9880d681SAndroid Build Coastguard Worker  ret i32 %MaxLeftBorderSum.0.lcssa
42*9880d681SAndroid Build Coastguard Worker}
43