1
1
; REQUIRES: asserts
2
- ; RUN: opt < %s -passes=loop-vectorize -debug-only=loop-vectorize -S 2>&1 | FileCheck %s
2
+ ; RUN: opt < %s -passes=loop-vectorize -debug-only=loop-vectorize -disable-output - S 2>&1 | FileCheck %s
3
3
4
4
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
5
5
target triple = "arm64-apple-ios5.0.0"
6
6
7
7
define void @selects_1 (ptr nocapture %dst , i32 %A , i32 %B , i32 %C , i32 %N ) {
8
+ ; CHECK: LV: Checking a loop in 'selects_1'
8
9
; CHECK: LV: Found an estimated cost of 1 for VF 2 For instruction: %cond = select i1 %cmp1, i32 10, i32 %and
9
10
; CHECK: LV: Found an estimated cost of 1 for VF 2 For instruction: %cond6 = select i1 %cmp2, i32 30, i32 %and
10
11
; CHECK: LV: Found an estimated cost of 1 for VF 2 For instruction: %cond11 = select i1 %cmp7, i32 %cond, i32 %cond6
11
12
12
13
; CHECK: LV: Found an estimated cost of 1 for VF 4 For instruction: %cond = select i1 %cmp1, i32 10, i32 %and
13
14
; CHECK: LV: Found an estimated cost of 1 for VF 4 For instruction: %cond6 = select i1 %cmp2, i32 30, i32 %and
14
15
; CHECK: LV: Found an estimated cost of 1 for VF 4 For instruction: %cond11 = select i1 %cmp7, i32 %cond, i32 %cond6
16
+ ; CHECK: LV: Selecting VF: 4
15
17
16
18
entry:
17
19
%cmp26 = icmp sgt i32 %N , 0
18
20
br i1 %cmp26 , label %for.body.preheader , label %for.cond.cleanup
19
21
20
22
for.body.preheader: ; preds = %entry
21
- %wide.trip.count = zext i32 %N to i64
23
+ %n = zext i32 %N to i64
22
24
br label %for.body
23
25
24
26
for.body: ; preds = %for.body.preheader, %for.body
@@ -34,7 +36,7 @@ for.body: ; preds = %for.body.preheader,
34
36
%cond11 = select i1 %cmp7 , i32 %cond , i32 %cond6
35
37
store i32 %cond11 , ptr %arrayidx , align 4
36
38
%indvars.iv.next = add nuw nsw i64 %indvars.iv , 1
37
- %exitcond.not = icmp eq i64 %indvars.iv.next , %wide.trip.count
39
+ %exitcond.not = icmp eq i64 %indvars.iv.next , %n
38
40
br i1 %exitcond.not , label %for.cond.cleanup.loopexit , label %for.body
39
41
40
42
for.cond.cleanup.loopexit: ; preds = %for.body
@@ -44,37 +46,30 @@ for.cond.cleanup: ; preds = %for.cond.cleanup.lo
44
46
ret void
45
47
}
46
48
47
- define i32 @multi_user_cmp (ptr readonly %a , i32 noundef %n ) {
49
+ define i32 @multi_user_cmp (ptr readonly %a , i64 noundef %n ) {
50
+ ; CHECK: LV: Checking a loop in 'multi_user_cmp'
48
51
; CHECK: LV: Found an estimated cost of 4 for VF 16 For instruction: %cmp1 = fcmp olt float %load1, 0.000000e+00
49
52
; CHECK: LV: Found an estimated cost of 1 for VF 16 For instruction: %.any.0.off0 = select i1 %cmp1, i1 true, i1 %any.0.off09
50
- ; CHECK: LV: Found an estimated cost of 1 for VF 16 For instruction: %all.0.off0. = select i1 %cmp1, i1 %all.0.off010, i1 false
53
+ ; CHECK: LV: Found an estimated cost of 1 for VF 16 For instruction: %all.off = select i1 %cmp1, i1 %all.off.next, i1 false
54
+ ; CHECK: LV: Selecting VF: 16.
51
55
entry:
52
- %wide.trip.count = zext nneg i32 %n to i64
53
56
br label %for.body
54
57
55
58
for.body:
56
59
%indvars.iv = phi i64 [ 0 , %entry ], [ %indvars.iv.next , %for.body ]
57
- %all.0.off010 = phi i1 [ true , %entry ], [ %all.0.off0. , %for.body ]
60
+ %all.off.next = phi i1 [ true , %entry ], [ %all.off , %for.body ]
58
61
%any.0.off09 = phi i1 [ false , %entry ], [ %.any.0.off0 , %for.body ]
59
62
%arrayidx = getelementptr inbounds float , ptr %a , i64 %indvars.iv
60
63
%load1 = load float , ptr %arrayidx , align 4
61
64
%cmp1 = fcmp olt float %load1 , 0 .000000e+00
62
65
%.any.0.off0 = select i1 %cmp1 , i1 true , i1 %any.0.off09
63
- %all.0.off0. = select i1 %cmp1 , i1 %all.0.off010 , i1 false
66
+ %all.off = select i1 %cmp1 , i1 %all.off.next , i1 false
64
67
%indvars.iv.next = add nuw nsw i64 %indvars.iv , 1
65
- %exitcond.not = icmp eq i64 %indvars.iv.next , %wide.trip.count
68
+ %exitcond.not = icmp eq i64 %indvars.iv.next , %n
66
69
br i1 %exitcond.not , label %exit , label %for.body
67
70
68
71
exit:
69
72
%0 = select i1 %.any.0.off0 , i32 2 , i32 3
70
- %1 = select i1 %all.0.off0. , i32 1 , i32 %0
73
+ %1 = select i1 %all.off , i32 1 , i32 %0
71
74
ret i32 %1
72
75
}
73
-
74
- ; CHECK-LABEL: define void @selects_1(
75
- ; CHECK: vector.body:
76
- ; CHECK: select <4 x i1>
77
-
78
- ; CHECK-LABEL: define i32 @multi_user_cmp(
79
- ; CHECK: vector.body:
80
- ; CHECK: %index = phi i64
0 commit comments