File: sequential_loops.ll

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (137 lines) | stat: -rw-r--r-- 3,960 bytes parent folder | download | duplicates (5)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
; RUN: opt %loadPolly -polly-print-ast -disable-output < %s | FileCheck %s

;#include <string.h>
;#define N 1024
;
;int A[N];
;
;void sequential_loops() {
;  int i;
;  for (i = 0; i < N/2; i++) {
;    A[i] = 1;
;  }
;  for (i = N/2 ; i < N; i++) {
;    A[i] = 2;
;  }
;}
;
;int main () {
;  int i;
;  memset(A, 0, sizeof(int) * N);
;
;  sequential_loops();
;
;  for (i = 0; i < N; i++) {
;    if (A[i] != 1 && i < N/2)
;      return 1;
;    if (A[i] !=  2 && i >= N/2)
;      return 1;
;  }
;
;  return 0;
;}

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"

@A = common global [1024 x i32] zeroinitializer, align 4 ; <ptr> [#uses=5]

define void @sequential_loops() nounwind {
bb:
  br label %bb1

bb1:                                              ; preds = %bb3, %bb
  %indvar1 = phi i64 [ %indvar.next2, %bb3 ], [ 0, %bb ]
  %scevgep4 = getelementptr [1024 x i32], ptr @A, i64 0, i64 %indvar1
  %exitcond3 = icmp ne i64 %indvar1, 512
  br i1 %exitcond3, label %bb2, label %bb4

bb2:                                              ; preds = %bb1
  store i32 1, ptr %scevgep4
  br label %bb3

bb3:                                              ; preds = %bb2
  %indvar.next2 = add i64 %indvar1, 1
  br label %bb1

bb4:                                              ; preds = %bb1
  br label %bb5

bb5:                                              ; preds = %bb7, %bb4
  %indvar = phi i64 [ %indvar.next, %bb7 ], [ 0, %bb4 ]
  %tmp = add i64 %indvar, 512
  %scevgep = getelementptr [1024 x i32], ptr @A, i64 0, i64 %tmp
  %exitcond = icmp ne i64 %indvar, 512
  br i1 %exitcond, label %bb6, label %bb8

bb6:                                              ; preds = %bb5
  store i32 2, ptr %scevgep
  br label %bb7

bb7:                                              ; preds = %bb6
  %indvar.next = add i64 %indvar, 1
  br label %bb5

bb8:                                              ; preds = %bb5
  ret void
}

define i32 @main() nounwind {
bb:
  call void @llvm.memset.p0.i64(ptr @A, i8 0, i64 4096, i32 1, i1 false)
  call void @sequential_loops()
  br label %bb1

bb1:                                              ; preds = %bb15, %bb
  %indvar = phi i64 [ %indvar.next, %bb15 ], [ 0, %bb ]
  %i.0 = trunc i64 %indvar to i32
  %scevgep = getelementptr [1024 x i32], ptr @A, i64 0, i64 %indvar
  %tmp = icmp slt i32 %i.0, 1024
  br i1 %tmp, label %bb2, label %bb16

bb2:                                              ; preds = %bb1
  %tmp3 = load i32, ptr %scevgep
  %tmp4 = icmp ne i32 %tmp3, 1
  br i1 %tmp4, label %bb5, label %bb8

bb5:                                              ; preds = %bb2
  %tmp6 = icmp slt i32 %i.0, 512
  br i1 %tmp6, label %bb7, label %bb8

bb7:                                              ; preds = %bb5
  br label %bb17

bb8:                                              ; preds = %bb5, %bb2
  %tmp9 = load i32, ptr %scevgep
  %tmp10 = icmp ne i32 %tmp9, 2
  br i1 %tmp10, label %bb11, label %bb14

bb11:                                             ; preds = %bb8
  %tmp12 = icmp sge i32 %i.0, 512
  br i1 %tmp12, label %bb13, label %bb14

bb13:                                             ; preds = %bb11
  br label %bb17

bb14:                                             ; preds = %bb11, %bb8
  br label %bb15

bb15:                                             ; preds = %bb14
  %indvar.next = add i64 %indvar, 1
  br label %bb1

bb16:                                             ; preds = %bb1
  br label %bb17

bb17:                                             ; preds = %bb16, %bb13, %bb7
  %.0 = phi i32 [ 1, %bb7 ], [ 1, %bb13 ], [ 0, %bb16 ]
  ret i32 %.0
}

declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i32, i1) nounwind

; CHECK: {
; CHECK:   for (int c0 = 0; c0 <= 511; c0 += 1)
; CHECK:     Stmt_bb2(c0);
; CHECK:   for (int c0 = 0; c0 <= 511; c0 += 1)
; CHECK:     Stmt_bb6(c0);
; CHECK: }