xref: /aosp_15_r20/external/llvm/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -basicaa -licm -S | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@a = external constant float*
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine void @test(i32 %count) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker        br label %forcond
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; CHECK:  %tmp3 = load float*, float** @a
10*9880d681SAndroid Build Coastguard Worker; CHECK:  br label %forcond
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerforcond:
13*9880d681SAndroid Build Coastguard Worker        %i.0 = phi i32 [ 0, %entry ], [ %inc, %forbody ]
14*9880d681SAndroid Build Coastguard Worker        %cmp = icmp ult i32 %i.0, %count
15*9880d681SAndroid Build Coastguard Worker        br i1 %cmp, label %forbody, label %afterfor
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK:  %i.0 = phi i32 [ 0, %entry ], [ %inc, %forbody ]
18*9880d681SAndroid Build Coastguard Worker; CHECK:  %cmp = icmp ult i32 %i.0, %count
19*9880d681SAndroid Build Coastguard Worker; CHECK:  br i1 %cmp, label %forbody, label %afterfor
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerforbody:
22*9880d681SAndroid Build Coastguard Worker        %tmp3 = load float*, float** @a
23*9880d681SAndroid Build Coastguard Worker        %arrayidx = getelementptr float, float* %tmp3, i32 %i.0
24*9880d681SAndroid Build Coastguard Worker        %tmp7 = uitofp i32 %i.0 to float
25*9880d681SAndroid Build Coastguard Worker        store float %tmp7, float* %arrayidx
26*9880d681SAndroid Build Coastguard Worker        %inc = add i32 %i.0, 1
27*9880d681SAndroid Build Coastguard Worker        br label %forcond
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK:  %arrayidx = getelementptr float, float* %tmp3, i32 %i.0
30*9880d681SAndroid Build Coastguard Worker; CHECK:  %tmp7 = uitofp i32 %i.0 to float
31*9880d681SAndroid Build Coastguard Worker; CHECK:  store float %tmp7, float* %arrayidx
32*9880d681SAndroid Build Coastguard Worker; CHECK:  %inc = add i32 %i.0, 1
33*9880d681SAndroid Build Coastguard Worker; CHECK:  br label %forcond
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerafterfor:
36*9880d681SAndroid Build Coastguard Worker        ret void
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; CHECK:  ret void
40