1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
; RUN: opt < %s -S -loop-reduce | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct = type { [8 x i8] }
declare void @use_32(i32)
declare void @use_64(i64)
define void @f(i32 %tmp156, i32* %length_buf_1, i32* %length_buf_0, %struct* %b,
%struct* %c, %struct* %d, %struct* %e, i32* %length_buf_2,
i32 %tmp160) {
; CHECK-LABEL: @f(
entry:
%begin151 = getelementptr inbounds %struct, %struct* %b, i64 0, i32 0, i64 12
%tmp21 = bitcast i8* %begin151 to i32*
%begin157 = getelementptr inbounds %struct, %struct* %c, i64 0, i32 0, i64 16
%tmp23 = bitcast i8* %begin157 to double*
%begin163 = getelementptr inbounds %struct, %struct* %d, i64 0, i32 0, i64 16
%tmp25 = bitcast i8* %begin163 to double*
%length.i820 = load i32, i32* %length_buf_1, align 4, !range !0
%enter = icmp ne i32 %tmp156, -1
br i1 %enter, label %ok_146, label %block_81_2
ok_146:
%var_13 = phi double [ %tmp186, %ok_161 ], [ 0.000000e+00, %entry ]
%var_17 = phi i32 [ %tmp187, %ok_161 ], [ %tmp156, %entry ]
%tmp174 = zext i32 %var_17 to i64
%tmp175 = icmp ult i32 %var_17, %length.i820
br i1 %tmp175, label %ok_152, label %block_81_2
ok_152:
%tmp176 = getelementptr inbounds i32, i32* %tmp21, i64 %tmp174
%tmp177 = load i32, i32* %tmp176, align 4
%tmp178 = zext i32 %tmp177 to i64
%length.i836 = load i32, i32* %length_buf_2, align 4, !range !0
%tmp179 = icmp ult i32 %tmp177, %length.i836
br i1 %tmp179, label %ok_158, label %block_81_2
ok_158:
%tmp180 = getelementptr inbounds double, double* %tmp23, i64 %tmp178
%tmp181 = load double, double* %tmp180, align 8
%length.i = load i32, i32* %length_buf_0, align 4, !range !0
%tmp182 = icmp slt i32 %var_17, %length.i
br i1 %tmp182, label %ok_161, label %block_81_2
ok_161:
; CHECK-LABEL: ok_161:
; CHECK: add
; CHECK-NOT: add
%tmp183 = getelementptr inbounds double, double* %tmp25, i64 %tmp174
%tmp184 = load double, double* %tmp183, align 8
%tmp185 = fmul double %tmp181, %tmp184
%tmp186 = fadd double %var_13, %tmp185
%tmp187 = add nsw i32 %var_17, 1
%tmp188 = icmp slt i32 %tmp187, %tmp160
; CHECK: br
br i1 %tmp188, label %ok_146, label %block_81
block_81:
call void @use_64(i64 %tmp174) ;; pre-inc use
call void @use_32(i32 %tmp187) ;; post-inc use
ret void
block_81_2:
ret void
}
!0 = !{i32 0, i32 2147483647}
|